diff options
23 files changed, 109 insertions, 276 deletions
diff --git a/testsuite/sed.tests b/testsuite/sed.tests new file mode 100755 index 0000000..479dd9a --- /dev/null +++ b/testsuite/sed.tests @@ -0,0 +1,109 @@ +#!/bin/sh + +# SUSv3 compliant sed tests. +# Copyright 2005 by Rob Landley <rob@landley.net> +# Licensed under GPL v2, see file LICENSE for details. + +[ -z "$COMMAND" ] && COMMAND=sed +. testing.sh + +# testing "description" "arguments" "result" "infile" "stdin" + +# Corner cases +testing "sed as cat" '"" -' "hello\n" "" "hello\n" +testing "sed handles empty lines" "-e 's/\$/@/'" "@\n" "" "\n" + +# no files (stdin) +# explicit stdin +# mix files and stdin (various orders) +# list stdin twice +# Trailing EOF. +# Multiple files: first no EOF, second length 0. +# Match $, at end of each file or all files? +# First no EOF, second no matches at all. +# -e corner cases +# without -e +# multiple -e +# interact with a +# -eee arg1 arg2 arg3 +# -f corner cases +# -e -f -e +# -n corner cases +# no newline at EOF? +# -r corner cases +# Just make sure it works. +# -i corner cases: +# sed -i - +# permissions +# -i on a symlink +# on a directory + +# command list +testing "sed accepts blanks before command" "-e '1 d'" "" "" "" +testing "sed accepts newlines in -e" "-e 'i\ +1 +a\ +3'" "1\n2\n3\n" "" "2\n" +testing "sed accepts multiple -e" "-e 'i\' -e '1' -e 'a\' -e '3'" \ + "1\n2\n3\n" "" "2\n" + +# substitutions +testing "sed -n" "-n -e s/foo/bar/ -e s/bar/baz/" "" "" "foo\n" +testing "sed s//p" "-e s/foo/bar/p -e s/bar/baz/p" "bar\nbaz\nbaz\n" \ + "" "foo\n" +testing "sed -n s//p" "-ne s/abc/def/p" "def\n" "" "abc\n" +testing "sed s//g (exhaustive)" "-e 's/[[:space:]]*/,/g'" ",1,2,3,4,5,\n" \ + "" "12345\n" +testing "sed s arbitrary delimiter" "-e 's woo boing '" "boing\n" "" "woo\n" +testing "sed s chains" "-e s/foo/bar/ -e s/bar/baz/" "baz\n" "" "foo\n" +testing "sed s chains2" "-e s/foo/bar/ -e s/baz/nee/" "bar\n" "" "foo\n" +testing "sed s [delimiter]" "-e 's@[@]@@'" "onetwo" "" "one@two" + +# branch +testing "sed b (branch)" "-e 'b one;p;: one'" "foo\n" "" "foo\n" +testing "sed b (branch with no label jumps to end)" "-e 'b;p'" \ + "foo\n" "" "foo\n" + +# test and branch +testing "sed t (test/branch)" "-e 's/a/1/;t one;p;: one;p'" \ + "1\n1\nb\nb\nb\nc\nc\nc\n" "" "a\nb\nc\n" +testing "sed t (test/branch clears test bit)" "-e 's/a/b/;:loop;t loop'" \ + "b\nb\nc\n" "" "a\nb\nc\n" +testing "sed T (!test/branch)" "-e 's/a/1/;T notone;p;: notone;p'" \ + "1\n1\n1\nb\nb\nc\nc\n" "" "a\nb\nc\n" + +# Normal sed end-of-script doesn't print "c" because n flushed the pattern +# space. If n hits EOF, pattern space is empty when script ends. +# Query: how does this interact with no newline at EOF? +testing "sed n (flushes pattern space, terminates early)" "-e 'n;p'" \ + "a\nb\nb\nc\n" "" "a\nb\nc\n" +# N does _not_ flush pattern space, therefore c is still in there @ script end. +testing "sed N (doesn't flush pattern space when terminating)" "-e 'N;p'" \ + "a\nb\na\nb\nc\n" "" "a\nb\nc\n" +testing "sed address match newline" '"/b/N;/b\\nc/i woo"' "a\nwoo\nb\nc\nd\n" \ + "" "a\nb\nc\nd\n" + +# Multiple lines in pattern space +testing "sed N (stops at end of input) and P (prints to first newline only)" \ + "-n 'N;P;p'" "a\na\nb\n" "" "a\nb\nc\n" + +# Hold space +testing "sed G (append hold space to pattern space)" 'G' "a\n\nb\n\nc\n\n" \ + "" "a\nb\nc\n" +#testing "sed g/G (swap/append hold and patter space)" +#testing "sed g (swap hold/pattern space)" + +testing "sed d ends script iteration" \ + "-e '/ook/d;s/ook/ping/p;i woot'" "" "" "ook\n" +testing "sed d ends script iteration (2)" \ + "-e '/ook/d;a\' -e 'bang'" "woot\nbang\n" "" "ook\nwoot\n" + +# Ponder this a bit more, why "woo not found" from gnu version? +#testing "sed doesn't substitute in deleted line" \ +# "-e '/ook/d;s/ook//;t woo;a bang;'" "bang" "" "ook\n" + +# This makes both seds very unhappy. Why? +#testing "sed -g (exhaustive)" "sed -e 's/[[:space:]]*/,/g'" ",1,2,3,4,5," \ +# "" "12345" + +exit $FAILCOUNT diff --git a/testsuite/sed/sed-accepts-blanks-before-command b/testsuite/sed/sed-accepts-blanks-before-command deleted file mode 100644 index 9597c2f..0000000 --- a/testsuite/sed/sed-accepts-blanks-before-command +++ /dev/null @@ -1 +0,0 @@ -busybox sed -e '1 d' </dev/null diff --git a/testsuite/sed/sed-aic-commands b/testsuite/sed/sed-aic-commands deleted file mode 100644 index b41c14a..0000000 --- a/testsuite/sed/sed-aic-commands +++ /dev/null @@ -1,134 +0,0 @@ -cat - >input <<EOF -2i\\ -before 2 -5c\\ -Change 5 -10a\\ -After 10 -22i\\ -before 22\\ -Continued -25c\\ -Change 25\\ -Continued -20a\\ -After 20\\ -Continued - 32i\\ -before 32\\ -Continued 1\\ -Continued 2\\ -Continued 3 - 35c\\ -Change 35\\ -Continued 1\\ -Continued 2\\ -Continued 3 - 30a\\ -After 30\\ -Continued 1\\ -Continued 2\\ -Continued 3 -EOF -busybox sed -f input >output <<EOF - 1 y - 2 y - 3 y - 4 y - 5 y - 6 y - 7 y - 8 y - 9 y - 10 y - 11 y - 12 y - 13 y - 14 y - 15 y - 16 y - 17 y - 18 y - 19 y - 20 y - 21 y - 22 y - 23 y - 24 y - 25 y - 26 y - 27 y - 28 y - 29 y - 30 y - 31 y - 32 y - 33 y - 34 y - 35 y - 36 y - 37 y - 38 y - 39 y - 40 y -EOF -cmp -s output - <<EOF - 1 y -before 2 - 2 y - 3 y - 4 y -Change 5 - 6 y - 7 y - 8 y - 9 y - 10 y -After 10 - 11 y - 12 y - 13 y - 14 y - 15 y - 16 y - 17 y - 18 y - 19 y - 20 y -After 20 -Continued - 21 y -before 22 -Continued - 22 y - 23 y - 24 y -Change 25 -Continued - 26 y - 27 y - 28 y - 29 y - 30 y -After 30 -Continued 1 -Continued 2 -Continued 3 - 31 y -before 32 -Continued 1 -Continued 2 -Continued 3 - 32 y - 33 y - 34 y -Change 35 -Continued 1 -Continued 2 -Continued 3 - 36 y - 37 y - 38 y - 39 y - 40 y -EOF diff --git a/testsuite/sed/sed-append-hold-space-to-pattern-space b/testsuite/sed/sed-append-hold-space-to-pattern-space deleted file mode 100644 index 6dda80f..0000000 --- a/testsuite/sed/sed-append-hold-space-to-pattern-space +++ /dev/null @@ -1,13 +0,0 @@ -busybox sed 'G'>output <<EOF -a -b -c -EOF -cmp -s output - <<EOF -a - -b - -c - -EOF diff --git a/testsuite/sed/sed-append-next-line b/testsuite/sed/sed-append-next-line deleted file mode 100644 index 0621a31..0000000 --- a/testsuite/sed/sed-append-next-line +++ /dev/null @@ -1,19 +0,0 @@ -# This will fail if CONFIG_FEATURE_SED_GNU_COMPATABILITY is defined -busybox sed 'N;p'>output <<EOF -a -b -c -EOF - -set +e -cmp -s output - <<EOF -a -b -a -b -c -EOF -if [ $? != 0 ] ; then - exit 0; -fi -exit 1; diff --git a/testsuite/sed/sed-branch b/testsuite/sed/sed-branch deleted file mode 100644 index 4167569..0000000 --- a/testsuite/sed/sed-branch +++ /dev/null @@ -1 +0,0 @@ -test "$(echo foo | busybox sed 'b one;p;: one')" = foo diff --git a/testsuite/sed/sed-branch-conditional b/testsuite/sed/sed-branch-conditional deleted file mode 100644 index 47d0a5f..0000000 --- a/testsuite/sed/sed-branch-conditional +++ /dev/null @@ -1,15 +0,0 @@ -busybox sed 's/a/1/;t one;p;: one;p'>output <<EOF -a -b -c -EOF -cmp -s output - <<EOF -1 -1 -b -b -b -c -c -c -EOF diff --git a/testsuite/sed/sed-branch-conditional-inverted b/testsuite/sed/sed-branch-conditional-inverted deleted file mode 100755 index f4df84b..0000000 --- a/testsuite/sed/sed-branch-conditional-inverted +++ /dev/null @@ -1,14 +0,0 @@ -busybox sed 's/a/1/;T notone;p;: notone;p'>output <<EOF -a -b -c -EOF -cmp -s output - <<EOF -1 -1 -1 -b -b -c -c -EOF diff --git a/testsuite/sed/sed-branch-conditional2 b/testsuite/sed/sed-branch-conditional2 deleted file mode 100644 index f4b11f0..0000000 --- a/testsuite/sed/sed-branch-conditional2 +++ /dev/null @@ -1,11 +0,0 @@ -#XFAIL -busybox sed 's/a/b/;:loop;t loop'>output <<EOF -a -b -c -EOF -cmp -s output - <<EOF -b -b -c -EOF diff --git a/testsuite/sed/sed-branch-no-label b/testsuite/sed/sed-branch-no-label deleted file mode 100644 index 446c1bc..0000000 --- a/testsuite/sed/sed-branch-no-label +++ /dev/null @@ -1 +0,0 @@ -test "$(echo foo | busybox sed 'b;p')" = foo diff --git a/testsuite/sed/sed-chains-substs b/testsuite/sed/sed-chains-substs deleted file mode 100644 index 266936a..0000000 --- a/testsuite/sed/sed-chains-substs +++ /dev/null @@ -1 +0,0 @@ -test "$(echo foo | busybox sed -e s/foo/bar/ -e s/bar/baz/)" = baz diff --git a/testsuite/sed/sed-chains-substs2 b/testsuite/sed/sed-chains-substs2 deleted file mode 100644 index 90568f6..0000000 --- a/testsuite/sed/sed-chains-substs2 +++ /dev/null @@ -1 +0,0 @@ -test x"$(echo foo | busybox -n sed -e s/foo/bar/ -e s/foo/baz/)" = x diff --git a/testsuite/sed/sed-does-not-substitute-in-deleted-line b/testsuite/sed/sed-does-not-substitute-in-deleted-line deleted file mode 100644 index 6f106e1..0000000 --- a/testsuite/sed/sed-does-not-substitute-in-deleted-line +++ /dev/null @@ -1,2 +0,0 @@ -echo foo | busybox sed -e /foo/d -e s/foo/bar/ >foo -cmp foo /dev/null diff --git a/testsuite/sed/sed-handles-embedded-slashes b/testsuite/sed/sed-handles-embedded-slashes deleted file mode 100644 index cc28761..0000000 --- a/testsuite/sed/sed-handles-embedded-slashes +++ /dev/null @@ -1 +0,0 @@ -test "$(echo fu/bar | busybox sed -e 's/[/]//')" = fubar diff --git a/testsuite/sed/sed-handles-empty-lines b/testsuite/sed/sed-handles-empty-lines deleted file mode 100644 index 2bb8f04..0000000 --- a/testsuite/sed/sed-handles-empty-lines +++ /dev/null @@ -1 +0,0 @@ -test `echo | busybox sed -e 's/$/@/'` = @ diff --git a/testsuite/sed/sed-handles-unsatisfied-backrefs b/testsuite/sed/sed-handles-unsatisfied-backrefs deleted file mode 100644 index 61bff88..0000000 --- a/testsuite/sed/sed-handles-unsatisfied-backrefs +++ /dev/null @@ -1,6 +0,0 @@ -busybox sed -e 's/.*root=/\1/' >output <<EOF -BOOT_IMAGE=vmlinuz root=/dev/hda5 initrd=init1 -EOF -cmp -s output - <<EOF -/dev/hda5 initrd=init1 -EOF diff --git a/testsuite/sed/sed-next-line b/testsuite/sed/sed-next-line deleted file mode 100644 index 38fe20c..0000000 --- a/testsuite/sed/sed-next-line +++ /dev/null @@ -1,12 +0,0 @@ -busybox sed 'n;p'>output <<EOF -a -b -c -EOF -cmp -s output - <<EOF -a -b -b -c -c -EOF diff --git a/testsuite/sed/sed-prints-line-once-for-multiple-substs b/testsuite/sed/sed-prints-line-once-for-multiple-substs deleted file mode 100644 index ba8955d..0000000 --- a/testsuite/sed/sed-prints-line-once-for-multiple-substs +++ /dev/null @@ -1,4 +0,0 @@ -busybox sed -e s/1/2/g -e s/3/4/g >output <<EOF -1 -EOF -echo 2 | cmp -s output - diff --git a/testsuite/sed/sed-recurses-properly b/testsuite/sed/sed-recurses-properly deleted file mode 100644 index a02667b..0000000 --- a/testsuite/sed/sed-recurses-properly +++ /dev/null @@ -1 +0,0 @@ -test "`echo '12345' | busybox sed -e 's/[[:space:]]*/,/g')` = ',1,2,3,4,5,'" diff --git a/testsuite/sed/sed-regex-match-newline b/testsuite/sed/sed-regex-match-newline deleted file mode 100644 index 1057e17..0000000 --- a/testsuite/sed/sed-regex-match-newline +++ /dev/null @@ -1,10 +0,0 @@ -# FEATURE: CONFIG_FEATURE_SED_EMBEDED_NEWLINE -busybox sed -n 'N;/a\nb/p'>output <<EOF -a -b -c -EOF -cmp -s output - <<EOF -a -b -EOF diff --git a/testsuite/sed/sed-splits-edit-commands-on-command-line b/testsuite/sed/sed-splits-edit-commands-on-command-line deleted file mode 100644 index 6421fa5..0000000 --- a/testsuite/sed/sed-splits-edit-commands-on-command-line +++ /dev/null @@ -1,9 +0,0 @@ -echo 2 | busybox sed -e 'i\ -1 -a\ -3' > output -cmp output - <<EOF -1 -2 -3 -EOF diff --git a/testsuite/sed/sed-subst-subprint b/testsuite/sed/sed-subst-subprint deleted file mode 100644 index 24f8bad..0000000 --- a/testsuite/sed/sed-subst-subprint +++ /dev/null @@ -1,9 +0,0 @@ -busybox sed 's/foo/bar/p'>output <<EOF -foo -bar -EOF -cmp -s output - <<EOF -bar -bar -bar -EOF diff --git a/testsuite/sed/sed-write-to-stdout b/testsuite/sed/sed-write-to-stdout deleted file mode 100644 index 95b4d72..0000000 --- a/testsuite/sed/sed-write-to-stdout +++ /dev/null @@ -1,10 +0,0 @@ -busybox sed -n 'N;P;p'>output <<EOF -a -b -c -EOF -cmp -s output - <<EOF -a -a -b -EOF |