aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xtestsuite/sed.tests109
-rw-r--r--testsuite/sed/sed-accepts-blanks-before-command1
-rw-r--r--testsuite/sed/sed-aic-commands134
-rw-r--r--testsuite/sed/sed-append-hold-space-to-pattern-space13
-rw-r--r--testsuite/sed/sed-append-next-line19
-rw-r--r--testsuite/sed/sed-branch1
-rw-r--r--testsuite/sed/sed-branch-conditional15
-rwxr-xr-xtestsuite/sed/sed-branch-conditional-inverted14
-rw-r--r--testsuite/sed/sed-branch-conditional211
-rw-r--r--testsuite/sed/sed-branch-no-label1
-rw-r--r--testsuite/sed/sed-chains-substs1
-rw-r--r--testsuite/sed/sed-chains-substs21
-rw-r--r--testsuite/sed/sed-does-not-substitute-in-deleted-line2
-rw-r--r--testsuite/sed/sed-handles-embedded-slashes1
-rw-r--r--testsuite/sed/sed-handles-empty-lines1
-rw-r--r--testsuite/sed/sed-handles-unsatisfied-backrefs6
-rw-r--r--testsuite/sed/sed-next-line12
-rw-r--r--testsuite/sed/sed-prints-line-once-for-multiple-substs4
-rw-r--r--testsuite/sed/sed-recurses-properly1
-rw-r--r--testsuite/sed/sed-regex-match-newline10
-rw-r--r--testsuite/sed/sed-splits-edit-commands-on-command-line9
-rw-r--r--testsuite/sed/sed-subst-subprint9
-rw-r--r--testsuite/sed/sed-write-to-stdout10
23 files changed, 109 insertions, 276 deletions
diff --git a/testsuite/sed.tests b/testsuite/sed.tests
new file mode 100755
index 000000000..479dd9ae7
--- /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 9597c2f8b..000000000
--- 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 b41c14ab8..000000000
--- 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 6dda80fee..000000000
--- 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 0621a319f..000000000
--- 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 4167569ad..000000000
--- 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 47d0a5ff2..000000000
--- 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 f4df84b3e..000000000
--- 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 f4b11f0f8..000000000
--- 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 446c1bcd9..000000000
--- 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 266936ac4..000000000
--- 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 90568f6e6..000000000
--- 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 6f106e104..000000000
--- 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 cc287613d..000000000
--- 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 2bb8f045a..000000000
--- 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 61bff8837..000000000
--- 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 38fe20cf2..000000000
--- 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 ba8955d6e..000000000
--- 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 a02667b41..000000000
--- 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 1057e1718..000000000
--- 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 6421fa552..000000000
--- 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 24f8bad7d..000000000
--- 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 95b4d724b..000000000
--- 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