Home | History | Annotate | Line # | Download | only in TEST
sed.test revision 1.1
      1  1.1  cgd #!/bin/sh -
      2  1.1  cgd #
      3  1.1  cgd # Copyright (c) 1992 Diomidis Spinellis.
      4  1.1  cgd # Copyright (c) 1992, 1993
      5  1.1  cgd #	The Regents of the University of California.  All rights reserved.
      6  1.1  cgd #
      7  1.1  cgd # Redistribution and use in source and binary forms, with or without
      8  1.1  cgd # modification, are permitted provided that the following conditions
      9  1.1  cgd # are met:
     10  1.1  cgd # 1. Redistributions of source code must retain the above copyright
     11  1.1  cgd #    notice, this list of conditions and the following disclaimer.
     12  1.1  cgd # 2. Redistributions in binary form must reproduce the above copyright
     13  1.1  cgd #    notice, this list of conditions and the following disclaimer in the
     14  1.1  cgd #    documentation and/or other materials provided with the distribution.
     15  1.1  cgd # 3. All advertising materials mentioning features or use of this software
     16  1.1  cgd #    must display the following acknowledgement:
     17  1.1  cgd #	This product includes software developed by the University of
     18  1.1  cgd #	California, Berkeley and its contributors.
     19  1.1  cgd # 4. Neither the name of the University nor the names of its contributors
     20  1.1  cgd #    may be used to endorse or promote products derived from this software
     21  1.1  cgd #    without specific prior written permission.
     22  1.1  cgd #
     23  1.1  cgd # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     24  1.1  cgd # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     25  1.1  cgd # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     26  1.1  cgd # ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     27  1.1  cgd # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     28  1.1  cgd # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     29  1.1  cgd # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     30  1.1  cgd # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     31  1.1  cgd # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     32  1.1  cgd # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     33  1.1  cgd # SUCH DAMAGE.
     34  1.1  cgd #
     35  1.1  cgd #	@(#)sed.test	8.1 (Berkeley) 6/6/93
     36  1.1  cgd #
     37  1.1  cgd 
     38  1.1  cgd # sed Regression Tests
     39  1.1  cgd #
     40  1.1  cgd # The following files are created:
     41  1.1  cgd # lines[1-4], script1, script2
     42  1.1  cgd # Two directories *.out contain the test results
     43  1.1  cgd 
     44  1.1  cgd main()
     45  1.1  cgd {
     46  1.1  cgd 	BASE=/usr/old/bin/sed
     47  1.1  cgd 	BASELOG=sed.out
     48  1.1  cgd 	TEST=../obj/sed
     49  1.1  cgd 	TESTLOG=nsed.out
     50  1.1  cgd 	DICT=/usr/share/dict/words
     51  1.1  cgd 
     52  1.1  cgd 	test_error | more
     53  1.1  cgd 
     54  1.1  cgd 	awk 'END { for (i = 1; i < 15; i++) print "l1_" i}' </dev/null >lines1
     55  1.1  cgd 	awk 'END { for (i = 1; i < 10; i++) print "l2_" i}' </dev/null >lines2
     56  1.1  cgd 
     57  1.1  cgd 	exec 4>&1 5>&2
     58  1.1  cgd 
     59  1.1  cgd 	# Set these flags to get messages about known problems
     60  1.1  cgd 	BSD=1
     61  1.1  cgd 	GNU=0
     62  1.1  cgd 	SUN=0
     63  1.1  cgd 	tests $BASE $BASELOG
     64  1.1  cgd 
     65  1.1  cgd 	BSD=0
     66  1.1  cgd 	GNU=0
     67  1.1  cgd 	SUN=0
     68  1.1  cgd 	tests $TEST $TESTLOG
     69  1.1  cgd 	exec 1>&4 2>&5
     70  1.1  cgd 	diff -c $BASELOG $TESTLOG | more
     71  1.1  cgd }
     72  1.1  cgd 
     73  1.1  cgd tests()
     74  1.1  cgd {
     75  1.1  cgd 	SED=$1
     76  1.1  cgd 	DIR=$2
     77  1.1  cgd 	rm -rf $DIR
     78  1.1  cgd 	mkdir $DIR
     79  1.1  cgd 	MARK=100
     80  1.1  cgd 
     81  1.1  cgd 	test_args
     82  1.1  cgd 	test_addr
     83  1.1  cgd 	echo Testing commands
     84  1.1  cgd 	test_group
     85  1.1  cgd 	test_acid
     86  1.1  cgd 	test_branch
     87  1.1  cgd 	test_pattern
     88  1.1  cgd 	test_print
     89  1.1  cgd 	test_subst
     90  1.1  cgd }
     91  1.1  cgd 
     92  1.1  cgd mark()
     93  1.1  cgd {
     94  1.1  cgd 	MARK=`expr $MARK + 1`
     95  1.1  cgd 	exec 1>&4 2>&5
     96  1.1  cgd 	exec >"$DIR/${MARK}_$1"
     97  1.1  cgd 	echo "Test $1:$MARK"
     98  1.1  cgd 	# Uncomment this line to match tests with sed error messages
     99  1.1  cgd 	echo "Test $1:$MARK" >&5
    100  1.1  cgd }
    101  1.1  cgd 
    102  1.1  cgd test_args()
    103  1.1  cgd {
    104  1.1  cgd 	mark '1.1'
    105  1.1  cgd 	echo Testing argument parsing
    106  1.1  cgd 	echo First type
    107  1.1  cgd 	if [ $SUN -eq 1 ] ; then
    108  1.1  cgd 		echo SunOS sed prints only with -n
    109  1.1  cgd 	else
    110  1.1  cgd 		$SED 's/^/e1_/p' lines1
    111  1.1  cgd 	fi
    112  1.1  cgd 	mark '1.2' ; $SED -n 's/^/e1_/p' lines1
    113  1.1  cgd 	mark '1.3'
    114  1.1  cgd 	if [ $SUN -eq 1 ] ; then
    115  1.1  cgd 		echo SunOS sed prints only with -n
    116  1.1  cgd 	else
    117  1.1  cgd 		$SED 's/^/e1_/p' <lines1
    118  1.1  cgd 	fi
    119  1.1  cgd 	mark '1.4' ; $SED -n 's/^/e1_/p' <lines1
    120  1.1  cgd 	echo Second type
    121  1.1  cgd 	mark '1.4.1'
    122  1.1  cgd 	if [ $SUN -eq 1 ] ; then
    123  1.1  cgd 		echo SunOS sed fails this
    124  1.1  cgd 	fi
    125  1.1  cgd 	$SED -e '' <lines1
    126  1.1  cgd 	echo 's/^/s1_/p' >script1
    127  1.1  cgd 	echo 's/^/s2_/p' >script2
    128  1.1  cgd 	mark '1.5'
    129  1.1  cgd 	if [ $SUN -eq 1 ] ; then
    130  1.1  cgd 		echo SunOS sed prints only with -n
    131  1.1  cgd 	else
    132  1.1  cgd 		$SED -f script1 lines1
    133  1.1  cgd 	fi
    134  1.1  cgd 	mark '1.6'
    135  1.1  cgd 	if [ $SUN -eq 1 ] ; then
    136  1.1  cgd 		echo SunOS sed prints only with -n
    137  1.1  cgd 	else
    138  1.1  cgd 		$SED -f script1 <lines1
    139  1.1  cgd 	fi
    140  1.1  cgd 	mark '1.7'
    141  1.1  cgd 	if [ $SUN -eq 1 ] ; then
    142  1.1  cgd 		echo SunOS sed prints only with -n
    143  1.1  cgd 	else
    144  1.1  cgd 		$SED -e 's/^/e1_/p' lines1
    145  1.1  cgd 	fi
    146  1.1  cgd 	mark '1.8'
    147  1.1  cgd 	if [ $SUN -eq 1 ] ; then
    148  1.1  cgd 		echo SunOS sed prints only with -n
    149  1.1  cgd 	else
    150  1.1  cgd 		$SED -e 's/^/e1_/p' <lines1
    151  1.1  cgd 	fi
    152  1.1  cgd 	mark '1.9' ; $SED -n -f script1 lines1
    153  1.1  cgd 	mark '1.10' ; $SED -n -f script1 <lines1
    154  1.1  cgd 	mark '1.11' ; $SED -n -e 's/^/e1_/p' lines1
    155  1.1  cgd 	mark '1.12'
    156  1.1  cgd 	if [ $SUN -eq 1 ] ; then
    157  1.1  cgd 		echo SunOS sed prints only with -n
    158  1.1  cgd 	else
    159  1.1  cgd 		$SED -n -e 's/^/e1_/p' <lines1
    160  1.1  cgd 	fi
    161  1.1  cgd 	mark '1.13'
    162  1.1  cgd 	if [ $SUN -eq 1 ] ; then
    163  1.1  cgd 		echo SunOS sed prints only with -n
    164  1.1  cgd 	else
    165  1.1  cgd 		$SED -e 's/^/e1_/p' -e 's/^/e2_/p' lines1
    166  1.1  cgd 	fi
    167  1.1  cgd 	mark '1.14'
    168  1.1  cgd 	if [ $SUN -eq 1 ] ; then
    169  1.1  cgd 		echo SunOS sed prints only with -n
    170  1.1  cgd 	else
    171  1.1  cgd 		$SED -f script1 -f script2 lines1
    172  1.1  cgd 	fi
    173  1.1  cgd 	mark '1.15'
    174  1.1  cgd 	if [ $GNU -eq 1 -o $SUN -eq 1 ] ; then
    175  1.1  cgd 		echo GNU and SunOS sed fail this following older POSIX draft
    176  1.1  cgd 	else
    177  1.1  cgd 		$SED -e 's/^/e1_/p' -f script1 lines1
    178  1.1  cgd 	fi
    179  1.1  cgd 	mark '1.16'
    180  1.1  cgd 	if [ $SUN -eq 1 ] ; then
    181  1.1  cgd 		echo SunOS sed prints only with -n
    182  1.1  cgd 	else
    183  1.1  cgd 		$SED -e 's/^/e1_/p' lines1 lines1
    184  1.1  cgd 	fi
    185  1.1  cgd 	# POSIX D11.2:11251
    186  1.1  cgd 	mark '1.17' ; $SED p <lines1 lines1
    187  1.1  cgd cat >script1 <<EOF
    188  1.1  cgd #n
    189  1.1  cgd # A comment
    190  1.1  cgd 
    191  1.1  cgd p
    192  1.1  cgd EOF
    193  1.1  cgd 	mark '1.18' ; $SED -f script1 <lines1 lines1
    194  1.1  cgd }
    195  1.1  cgd 
    196  1.1  cgd test_addr()
    197  1.1  cgd {
    198  1.1  cgd 	echo Testing address ranges
    199  1.1  cgd 	mark '2.1' ; $SED -n -e '4p' lines1
    200  1.1  cgd 	mark '2.2' ; $SED -n -e '20p' lines1 lines2
    201  1.1  cgd 	mark '2.3' ; $SED -n -e '$p' lines1
    202  1.1  cgd 	mark '2.4' ; $SED -n -e '$p' lines1 lines2
    203  1.1  cgd 	mark '2.5' ; $SED -n -e '$a\
    204  1.1  cgd hello' /dev/null
    205  1.1  cgd 	mark '2.6' ; $SED -n -e '$p' lines1 /dev/null lines2
    206  1.1  cgd 	# Should not print anything
    207  1.1  cgd 	mark '2.7' ; $SED -n -e '20p' lines1
    208  1.1  cgd 	mark '2.8' ; $SED -n -e '0p' lines1
    209  1.1  cgd 	mark '2.9' ; $SED -n '/l1_7/p' lines1
    210  1.1  cgd 	mark '2.10' ; $SED -n ' /l1_7/ p' lines1
    211  1.1  cgd 	mark '2.11'
    212  1.1  cgd 	if [ $BSD -eq 1 ] ; then
    213  1.1  cgd 		echo BSD sed fails this test
    214  1.1  cgd 	fi
    215  1.1  cgd 	if [ $GNU -eq 1 ] ; then
    216  1.1  cgd 		echo GNU sed fails this
    217  1.1  cgd 	fi
    218  1.1  cgd 	$SED -n '\_l1\_7_p' lines1
    219  1.1  cgd 	mark '2.12' ; $SED -n '1,4p' lines1
    220  1.1  cgd 	mark '2.13' ; $SED -n '1,$p' lines1 lines2
    221  1.1  cgd 	mark '2.14' ; $SED -n '1,/l2_9/p' lines1 lines2
    222  1.1  cgd 	mark '2.15' ; $SED -n '/4/,$p' lines1 lines2
    223  1.1  cgd 	mark '2.16' ; $SED -n '/4/,20p' lines1 lines2
    224  1.1  cgd 	mark '2.17' ; $SED -n '/4/,/10/p' lines1 lines2
    225  1.1  cgd 	mark '2.18' ; $SED -n '/l2_3/,/l1_8/p' lines1 lines2
    226  1.1  cgd 	mark '2.19'
    227  1.1  cgd 	if [ $GNU -eq 1 ] ; then
    228  1.1  cgd 		echo GNU sed fails this
    229  1.1  cgd 	fi
    230  1.1  cgd 	$SED -n '12,3p' lines1 lines2
    231  1.1  cgd 	mark '2.20'
    232  1.1  cgd 	if [ $GNU -eq 1 ] ; then
    233  1.1  cgd 		echo GNU sed fails this
    234  1.1  cgd 	fi
    235  1.1  cgd 	$SED -n '/l1_7/,3p' lines1 lines2
    236  1.1  cgd }
    237  1.1  cgd 
    238  1.1  cgd test_group()
    239  1.1  cgd {
    240  1.1  cgd 	echo Brace and other grouping
    241  1.1  cgd 	mark '3.1' ; $SED -e '
    242  1.1  cgd 4,12 {
    243  1.1  cgd 	s/^/^/
    244  1.1  cgd 	s/$/$/
    245  1.1  cgd 	s/_/T/
    246  1.1  cgd }' lines1
    247  1.1  cgd 	mark '3.2' ; $SED -e '
    248  1.1  cgd 4,12 {
    249  1.1  cgd 	s/^/^/
    250  1.1  cgd 	/6/,/10/ {
    251  1.1  cgd 		s/$/$/
    252  1.1  cgd 		/8/ s/_/T/
    253  1.1  cgd 	}
    254  1.1  cgd }' lines1
    255  1.1  cgd 	mark '3.3' ; $SED -e '
    256  1.1  cgd 4,12 !{
    257  1.1  cgd 	s/^/^/
    258  1.1  cgd 	/6/,/10/ !{
    259  1.1  cgd 		s/$/$/
    260  1.1  cgd 		/8/ !s/_/T/
    261  1.1  cgd 	}
    262  1.1  cgd }' lines1
    263  1.1  cgd 	mark '3.4' ; $SED -e '4,12!s/^/^/' lines1
    264  1.1  cgd }
    265  1.1  cgd 
    266  1.1  cgd test_acid()
    267  1.1  cgd {
    268  1.1  cgd 	echo Testing a c d and i commands
    269  1.1  cgd 	mark '4.1' ; $SED -n -e '
    270  1.1  cgd s/^/before_i/p
    271  1.1  cgd 20i\
    272  1.1  cgd inserted
    273  1.1  cgd s/^/after_i/p
    274  1.1  cgd ' lines1 lines2
    275  1.1  cgd 	mark '4.2' ; $SED -n -e '
    276  1.1  cgd 5,12s/^/5-12/
    277  1.1  cgd s/^/before_a/p
    278  1.1  cgd /5-12/a\
    279  1.1  cgd appended
    280  1.1  cgd s/^/after_a/p
    281  1.1  cgd ' lines1 lines2
    282  1.1  cgd 	mark '4.3'
    283  1.1  cgd 	if [ $GNU -eq 1 ] ; then
    284  1.1  cgd 		echo GNU sed fails this
    285  1.1  cgd 	fi
    286  1.1  cgd 	$SED -n -e '
    287  1.1  cgd s/^/^/p
    288  1.1  cgd /l1_/a\
    289  1.1  cgd appended
    290  1.1  cgd 8,10N
    291  1.1  cgd s/$/$/p
    292  1.1  cgd ' lines1 lines2
    293  1.1  cgd 	mark '4.4' ; $SED -n -e '
    294  1.1  cgd c\
    295  1.1  cgd hello
    296  1.1  cgd ' lines1
    297  1.1  cgd 	mark '4.5' ; $SED -n -e '
    298  1.1  cgd 8c\
    299  1.1  cgd hello
    300  1.1  cgd ' lines1
    301  1.1  cgd 	mark '4.6' ; $SED -n -e '
    302  1.1  cgd 3,14c\
    303  1.1  cgd hello
    304  1.1  cgd ' lines1
    305  1.1  cgd # SunOS and GNU sed behave differently.   We follow POSIX
    306  1.1  cgd #	mark '4.7' ; $SED -n -e '
    307  1.1  cgd #8,3c\
    308  1.1  cgd #hello
    309  1.1  cgd #' lines1
    310  1.1  cgd 	mark '4.8' ; $SED d <lines1
    311  1.1  cgd }
    312  1.1  cgd 
    313  1.1  cgd test_branch()
    314  1.1  cgd {
    315  1.1  cgd 	echo Testing labels and branching
    316  1.1  cgd 	mark '5.1' ; $SED -n -e '
    317  1.1  cgd b label4
    318  1.1  cgd :label3
    319  1.1  cgd s/^/label3_/p
    320  1.1  cgd b end
    321  1.1  cgd :label4
    322  1.1  cgd 2,12b label1
    323  1.1  cgd b label2
    324  1.1  cgd :label1
    325  1.1  cgd s/^/label1_/p
    326  1.1  cgd b
    327  1.1  cgd :label2
    328  1.1  cgd s/^/label2_/p
    329  1.1  cgd b label3
    330  1.1  cgd :end
    331  1.1  cgd ' lines1
    332  1.1  cgd 	mark '5.2'
    333  1.1  cgd 	if [ $BSD -eq 1 ] ; then
    334  1.1  cgd 		echo BSD sed fails this test
    335  1.1  cgd 	fi
    336  1.1  cgd 	$SED -n -e '
    337  1.1  cgd s/l1_/l2_/
    338  1.1  cgd t ok
    339  1.1  cgd b
    340  1.1  cgd :ok
    341  1.1  cgd s/^/tested /p
    342  1.1  cgd ' lines1 lines2
    343  1.1  cgd # SunOS sed behaves differently here.  Clarification needed.
    344  1.1  cgd #	mark '5.3' ; $SED -n -e '
    345  1.1  cgd #5,8b inside
    346  1.1  cgd #1,5 {
    347  1.1  cgd #	s/^/^/p
    348  1.1  cgd #	:inside
    349  1.1  cgd #	s/$/$/p
    350  1.1  cgd #}
    351  1.1  cgd #' lines1
    352  1.1  cgd # Check that t clears the substitution done flag
    353  1.1  cgd 	mark '5.4' ; $SED -n -e '
    354  1.1  cgd 1,8s/^/^/
    355  1.1  cgd t l1
    356  1.1  cgd :l1
    357  1.1  cgd t l2
    358  1.1  cgd s/$/$/p
    359  1.1  cgd b
    360  1.1  cgd :l2
    361  1.1  cgd s/^/ERROR/
    362  1.1  cgd ' lines1
    363  1.1  cgd # Check that reading a line clears the substitution done flag
    364  1.1  cgd 	mark '5.5'
    365  1.1  cgd 	if [ $BSD -eq 1 ] ; then
    366  1.1  cgd 		echo BSD sed fails this test
    367  1.1  cgd 	fi
    368  1.1  cgd 	$SED -n -e '
    369  1.1  cgd t l2
    370  1.1  cgd 1,8s/^/^/p
    371  1.1  cgd 2,7N
    372  1.1  cgd b
    373  1.1  cgd :l2
    374  1.1  cgd s/^/ERROR/p
    375  1.1  cgd ' lines1
    376  1.1  cgd 	mark '5.6' ; $SED 5q lines1
    377  1.1  cgd 	mark '5.7' ; $SED -e '
    378  1.1  cgd 5i\
    379  1.1  cgd hello
    380  1.1  cgd 5q' lines1
    381  1.1  cgd # Branch across block boundary
    382  1.1  cgd 	mark '5.8' ; $SED -e '
    383  1.1  cgd {
    384  1.1  cgd :b
    385  1.1  cgd }
    386  1.1  cgd s/l/m/
    387  1.1  cgd tb' lines1
    388  1.1  cgd }
    389  1.1  cgd 
    390  1.1  cgd test_pattern()
    391  1.1  cgd {
    392  1.1  cgd echo Pattern space commands
    393  1.1  cgd # Check that the pattern space is deleted
    394  1.1  cgd 	mark '6.1' ; $SED -n -e '
    395  1.1  cgd c\
    396  1.1  cgd changed
    397  1.1  cgd p
    398  1.1  cgd ' lines1
    399  1.1  cgd 	mark '6.2' ; $SED -n -e '
    400  1.1  cgd 4d
    401  1.1  cgd p
    402  1.1  cgd ' lines1
    403  1.1  cgd # SunOS sed refused to print here
    404  1.1  cgd #	mark '6.3' ; $SED -e '
    405  1.1  cgd #N
    406  1.1  cgd #N
    407  1.1  cgd #N
    408  1.1  cgd #D
    409  1.1  cgd #P
    410  1.1  cgd #4p
    411  1.1  cgd #' lines1
    412  1.1  cgd 	mark '6.4' ; $SED -e '
    413  1.1  cgd 2h
    414  1.1  cgd 3H
    415  1.1  cgd 4g
    416  1.1  cgd 5G
    417  1.1  cgd 6x
    418  1.1  cgd 6p
    419  1.1  cgd 6x
    420  1.1  cgd 6p
    421  1.1  cgd ' lines1
    422  1.1  cgd 	mark '6.5' ; $SED -e '4n' lines1
    423  1.1  cgd 	mark '6.6' ; $SED -n -e '4n' lines1
    424  1.1  cgd }
    425  1.1  cgd 
    426  1.1  cgd test_print()
    427  1.1  cgd {
    428  1.1  cgd 	echo Testing print and file routines
    429  1.1  cgd 	awk 'END {for (i = 1; i < 256; i++) printf("%c", i);print "\n"}' \
    430  1.1  cgd 		</dev/null >lines3
    431  1.1  cgd 	# GNU and SunOS sed behave differently here
    432  1.1  cgd 	mark '7.1'
    433  1.1  cgd 	if [ $BSD -eq 1 ] ; then
    434  1.1  cgd 		echo 'BSD sed drops core on this one; TEST SKIPPED'
    435  1.1  cgd 	else
    436  1.1  cgd 		$SED -n l lines3
    437  1.1  cgd 	fi
    438  1.1  cgd 	mark '7.2' ; $SED -e '/l2_/=' lines1 lines2
    439  1.1  cgd 	rm -f lines4
    440  1.1  cgd 	mark '7.3' ; $SED -e '3,12w lines4' lines1
    441  1.1  cgd 	echo w results
    442  1.1  cgd 	cat lines4
    443  1.1  cgd 	mark '7.4' ; $SED -e '4r lines2' lines1
    444  1.1  cgd 	mark '7.5' ; $SED -e '5r /dev/dds' lines1
    445  1.1  cgd 	mark '7.6' ; $SED -e '6r /dev/null' lines1
    446  1.1  cgd 	mark '7.7'
    447  1.1  cgd 	if [ $BSD -eq 1 -o $GNU -eq 1 -o $SUN -eq 1 ] ; then
    448  1.1  cgd 		echo BSD, GNU and SunOS cannot pass this one
    449  1.1  cgd 	else
    450  1.1  cgd 		sed '200q' $DICT | sed 's$.*$s/^/&/w tmpdir/&$' >script1
    451  1.1  cgd 		rm -rf tmpdir
    452  1.1  cgd 		mkdir tmpdir
    453  1.1  cgd 		$SED -f script1 lines1
    454  1.1  cgd 		cat tmpdir/*
    455  1.1  cgd 		rm -rf tmpdir
    456  1.1  cgd 	fi
    457  1.1  cgd 	mark '7.8'
    458  1.1  cgd 	if [ $BSD -eq 1 ] ; then
    459  1.1  cgd 		echo BSD sed cannot pass 7.7
    460  1.1  cgd 	else
    461  1.1  cgd 		echo line1 > lines3
    462  1.1  cgd 		echo "" >> lines3
    463  1.1  cgd 		$SED -n -e '$p' lines3 /dev/null
    464  1.1  cgd 	fi
    465  1.1  cgd 		
    466  1.1  cgd }
    467  1.1  cgd 
    468  1.1  cgd test_subst()
    469  1.1  cgd {
    470  1.1  cgd 	echo Testing substitution commands
    471  1.1  cgd 	mark '8.1' ; $SED -e 's/./X/g' lines1
    472  1.1  cgd 	mark '8.2' ; $SED -e 's,.,X,g' lines1
    473  1.1  cgd # GNU and SunOS sed thinks we are escaping . as wildcard, not as separator
    474  1.1  cgd #	mark '8.3' ; $SED -e 's.\..X.g' lines1
    475  1.1  cgd # POSIX does not say that this should work
    476  1.1  cgd #	mark '8.4' ; $SED -e 's/[/]/Q/' lines1
    477  1.1  cgd 	mark '8.4' ; $SED -e 's/[\/]/Q/' lines1
    478  1.1  cgd 	mark '8.5' ; $SED -e 's_\__X_' lines1
    479  1.1  cgd 	mark '8.6' ; $SED -e 's/./(&)/g' lines1
    480  1.1  cgd 	mark '8.7' ; $SED -e 's/./(\&)/g' lines1
    481  1.1  cgd 	mark '8.8' ; $SED -e 's/\(.\)\(.\)\(.\)/x\3x\2x\1/g' lines1
    482  1.1  cgd 	mark '8.9' ; $SED -e 's/_/u0\
    483  1.1  cgd u1\
    484  1.1  cgd u2/g' lines1
    485  1.1  cgd 	mark '8.10'
    486  1.1  cgd 	if [ $BSD -eq 1 -o $GNU -eq 1 ] ; then
    487  1.1  cgd 		echo 'BSD/GNU sed do not understand digit flags on s commands'
    488  1.1  cgd 	fi
    489  1.1  cgd 	$SED -e 's/./X/4' lines1
    490  1.1  cgd 	rm -f lines4
    491  1.1  cgd 	mark '8.11' ; $SED -e 's/1/X/w lines4' lines1
    492  1.1  cgd 	echo s wfile results
    493  1.1  cgd 	cat lines4
    494  1.1  cgd 	mark '8.12' ; $SED -e 's/[123]/X/g' lines1
    495  1.1  cgd 	mark '8.13' ; $SED -e 'y/0123456789/9876543210/' lines1
    496  1.1  cgd 	mark '8.14' ; 
    497  1.1  cgd 	if [ $BSD -eq 1 -o $GNU -eq 1 -o $SUN -eq 1 ] ; then
    498  1.1  cgd 		echo BSD/GNU/SUN sed fail this test
    499  1.1  cgd 	else
    500  1.1  cgd 		$SED -e 'y10\123456789198765432\101' lines1
    501  1.1  cgd 	fi
    502  1.1  cgd 	mark '8.15' ; $SED -e '1N;2y/\n/X/' lines1
    503  1.1  cgd 	mark '8.16'
    504  1.1  cgd 	if [ $BSD -eq 1 ] ; then
    505  1.1  cgd 		echo 'BSD sed does not handle branch defined REs'
    506  1.1  cgd 	else
    507  1.1  cgd 		echo 'eeefff' | $SED -e 'p' -e 's/e/X/p' -e ':x' \
    508  1.1  cgd 		    -e 's//Y/p' -e '/f/bx'
    509  1.1  cgd 	fi
    510  1.1  cgd }
    511  1.1  cgd 
    512  1.1  cgd test_error()
    513  1.1  cgd {
    514  1.1  cgd 	exec 0>&3 4>&1 5>&2
    515  1.1  cgd 	exec 0</dev/null
    516  1.1  cgd 	exec 2>&1
    517  1.1  cgd 	set -x
    518  1.1  cgd 	$TEST -x && exit 1
    519  1.1  cgd 	$TEST -f && exit 1
    520  1.1  cgd 	$TEST -e && exit 1
    521  1.1  cgd 	$TEST -f /dev/dds && exit 1
    522  1.1  cgd 	$TEST p /dev/dds && exit 1
    523  1.1  cgd 	$TEST -f /bin/sh && exit 1
    524  1.1  cgd 	$TEST '{' && exit 1
    525  1.1  cgd 	$TEST '{' && exit 1
    526  1.1  cgd 	$TEST '/hello/' && exit 1
    527  1.1  cgd 	$TEST '1,/hello/' && exit 1
    528  1.1  cgd 	$TEST -e '-5p' && exit 1
    529  1.1  cgd 	$TEST '/jj' && exit 1
    530  1.1  cgd 	$TEST 'a hello' && exit 1
    531  1.1  cgd 	$TEST 'a \ hello' && exit 1
    532  1.1  cgd 	$TEST 'b foo' && exit 1
    533  1.1  cgd 	$TEST 'd hello' && exit 1
    534  1.1  cgd 	$TEST 's/aa' && exit 1
    535  1.1  cgd 	$TEST 's/aa/' && exit 1
    536  1.1  cgd 	$TEST 's/a/b' && exit 1
    537  1.1  cgd 	$TEST 's/a/b/c/d' && exit 1
    538  1.1  cgd 	$TEST 's/a/b/ 1 2' && exit 1
    539  1.1  cgd 	$TEST 's/a/b/ 1 g' && exit 1
    540  1.1  cgd 	$TEST 's/a/b/w' && exit 1
    541  1.1  cgd 	$TEST 'y/aa' && exit 1
    542  1.1  cgd 	$TEST 'y/aa/b/' && exit 1
    543  1.1  cgd 	$TEST 'y/aa/' && exit 1
    544  1.1  cgd 	$TEST 'y/a/b' && exit 1
    545  1.1  cgd 	$TEST 'y/a/b/c/d' && exit 1
    546  1.1  cgd 	$TEST '!' && exit 1
    547  1.1  cgd 	$TEST supercalifrangolisticexprialidociussupercalifrangolisticexcius
    548  1.1  cgd 	set +x
    549  1.1  cgd 	exec 0>&3 1>&4 2>&5
    550  1.1  cgd }
    551  1.1  cgd 
    552  1.1  cgd main
    553