1# regression tests for the POSIX ed utility 2 3KEEP "*.dat" 4 5function DATA 6{ 7 typeset f x=0123456789 8 integer i 9 typeset -i8 n 10 for f 11 do test -f $f && continue 12 case $f in 13 big.dat)for ((i = 0; i <= 10000; i++)) 14 do print $i:$x$x$x$x$x$x$x$x$x$x 15 done 16 ;; 17 dem.dat)for ((i = 512; i >= 0; i--)) 18 do print $i 19 done 20 ;; 21 med.dat)for ((i = 0; i <= 512; i++)) 22 do print $i 23 done 24 ;; 25 esac > $f 26 done 27} 28 29TEST 01 'file args' 30 DO DATA big.dat 31 EXEC 32 NOTE 'no input file' 33 EXEC file 34 NOTE 'empty input file' 35 INPUT file 36 OUTPUT - 0 37 EXEC big.dat 38 NOTE 'big input file' 39 INPUT - $'v/^10*:/d\n1,$s/:.*//\n,p\nQ' 40 OUTPUT - $'1058997\n1\n10\n100\n1000\n10000' 41 EXEC not_a_file 42 NOTE 'non-existent input file' 43 OUTPUT - '?' 44 EXIT '[12]' 45 46TEST 02 '{ = # a c } commands' 47 EXEC file 48 NOTE '=' 49 INPUT - g/./.= 50 INPUT file $'a\nb\nc' 51 OUTPUT - $'6\n1\n2\n3' 52 EXEC file 53 NOTE '# comments' 54 INPUT - $'#n\ng/./.=\n#comment' 55 EXEC file 56 NOTE 'a top' 57 INPUT - $'0a\nz\n.\nw\nq' 58 OUTPUT - $'6\n8' 59 OUTPUT file $'z\na\nb\nc' 60 EXEC file 61 NOTE 'a mid' 62 INPUT - $'2a\nz\n.\nw\nq' 63 OUTPUT file $'a\nb\nz\nc' 64 EXEC file 65 NOTE 'a bot' 66 INPUT - $'$a\nz\n.\nw\nq' 67 OUTPUT file $'a\nb\nc\nz' 68 EXEC file 69 NOTE 'c top' 70 INPUT - $'1c\nz\n.\nw\nq' 71 OUTPUT - $'6\n6' 72 OUTPUT file $'z\nb\nc' 73 EXEC file 74 NOTE 'c mid' 75 INPUT - $'2c\nz\n.\nw\nq' 76 OUTPUT file $'a\nz\nc' 77 EXEC file 78 NOTE 'c bot' 79 INPUT - $'$c\nz\n.\nw\nq' 80 OUTPUT file $'a\nb\nz' 81 82TEST 03 '{ s } commands' 83 EXEC file 84 NOTE 'substitute' 85 INPUT file $'a\nb\nc' 86 INPUT - $'1,$s/./&&/\n1,$s/./&x/\n1,$s/./&y/2\n1,$s/./&z/4\nw\nq' 87 OUTPUT file $'axyaz\nbxybz\ncxycz' 88 OUTPUT - $'6\n18' 89 EXEC file 90 NOTE 'substitute g' 91 INPUT file $'abcabcabc\nabcabcabc\nabcabcabc\nabcabcabc\nabcabcabc\nabcabcabc\nabcabcabc\nabcabcabc\nabcabcabc' 92 INPUT - $'1s/a//g\n2s/b//g\n3s/c//g\n4s/a/X/g\n5s/b/X/g\n6s/c/X/g\n7s/a/XX/g\n8s/b/XX/g\n9s/c/XX/g\nw\nq' 93 OUTPUT file $'bcbcbc\nacacac\nababab\nXbcXbcXbc\naXcaXcaXc\nabXabXabX\nXXbcXXbcXXbc\naXXcaXXcaXXc\nabXXabXXabXX' 94 OUTPUT - $'90\n90' 95 EXEC file 96 NOTE 'substitute count' 97 INPUT - $'1s/a//2\n2s/b//2\n3s/c//2\n4s/a/X/2\n5s/b/X/2\n6s/c/X/2\n7s/a/XX/2\n8s/b/XX/2\n9s/c/XX/2\nw\nq' 98 OUTPUT file $'abcbcabc\nabcacabc\nabcababc\nabcXbcabc\nabcaXcabc\nabcabXabc\nabcXXbcabc\nabcaXXcabc\nabcabXXabc' 99 OUTPUT - $'90\n90' 100 EXEC file 101 NOTE 'substitute null g' 102 INPUT file $'123\naaa' 103 INPUT - $'1,$s/a*/x/g\nw\nq' 104 OUTPUT file $'x1x2x3x\nx' 105 OUTPUT - $'8\n10' 106 EXEC file 107 NOTE 'substitute splice' 108 INPUT file $'123\naaa' 109 INPUT - $'1,$s/a/&\\\nx/\nw\nq' 110 OUTPUT file $'123\na\nxaa' 111 OUTPUT - $'8\n10' 112 EXEC file 113 NOTE 'substitute previous' 114 INPUT file $'123\naaa' 115 INPUT - $'/aa/p\ns//zz/\nw\nq' 116 OUTPUT file $'123\nzza' 117 OUTPUT - $'8\naaa\n8' 118 119TEST 04 'global commands' 120 EXEC file 121 NOTE 'global substitute splice' 122 INPUT file $'yyabcyy\n123yyxx\nfoo\nbaryy\nfooyybar' 123 INPUT - $'g/yy/s//ex/g\nw\nq' 124 OUTPUT file $'exabcex\n123exxx\nfoo\nbarex\nfooexbar' 125 OUTPUT - $'35\n35' 126 127TEST 05 '{ t } commands' 128 DO DATA med.dat dem.dat 129 EXEC file 130 NOTE 'copy' 131 INPUT file $'1\n2\n3\n4' 132 INPUT - $'-2\n.t.\nw\nq' 133 OUTPUT file $'1\n2\n2\n3\n4' 134 OUTPUT - $'8\n2\n10' 135 EXEC med.dat 136 NOTE 'copy reverse' 137 INPUT - $'g/./.t0\n514,$d\nw file\nq' 138 SAME file dem.dat 139 OUTPUT - $'1942\n1942' 140 141TEST 06 '! command' 142 EXEC -h file 143 NOTE 'no saved command' 144 INPUT file 145 OUTPUT - $'"file" 0 lines, 0 characters' 146 INPUT - $'!!' 147 ERROR - $'ed: no saved shell command' 148 EXIT 1 149 EXEC 150 NOTE 'empty command' 151 INPUT - $'!' 152 ERROR - $'ed: empty shell command' 153 EXEC 154 NOTE 'to stdout' 155 INPUT - $'!echo stdout\n!!' 156 OUTPUT - $'"file" 0 lines, 0 characters\nstdout\n!\necho stdout\nstdout\n!' 157 ERROR - 158 EXIT 0 159 EXEC 160 NOTE 'to stderr' 161 INPUT - $'!echo stderr >&2\n!!' 162 OUTPUT - $'"file" 0 lines, 0 characters\n!\necho stderr >&2\n!' 163 ERROR - $'stderr\nstderr' 164 165TEST 07 'REs' 166 EXEC file 167 NOTE 'remembered RE' 168 INPUT file $'foo 1\nfoo 2\nfoo 3' 169 INPUT - $'/foo\n//\n/' 170 OUTPUT - $'18\nfoo 1\nfoo 2\nfoo 3' 171 172TEST 08 '.' 173 EXEC file 174 NOTE '. before and after' 175 INPUT file $'1\n2\n3' 176 INPUT - $'.=\n1,$s/^/x/\n.=\n1\n1,$s/^/x/\n.=\ng/[12]/s/^/z/\n.=\nQ' 177 OUTPUT - $'6\n3\n3\nx1\n3\n2' 178