diff options
Diffstat (limited to 'testsuite')
-rwxr-xr-x | testsuite/cpio.tests | 23 | ||||
-rwxr-xr-x | testsuite/cut.tests | 140 | ||||
-rwxr-xr-x | testsuite/hexdump.tests | 6 | ||||
-rwxr-xr-x | testsuite/make.tests | 40 |
4 files changed, 197 insertions, 12 deletions
diff --git a/testsuite/cpio.tests b/testsuite/cpio.tests index 85e746589..a4462c53e 100755 --- a/testsuite/cpio.tests +++ b/testsuite/cpio.tests | |||
@@ -154,6 +154,29 @@ testing "cpio -R with extract" \ | |||
154 | " "" "" | 154 | " "" "" |
155 | SKIP= | 155 | SKIP= |
156 | 156 | ||
157 | # Create an archive containing a file with "../dont_write" filename. | ||
158 | # See that it will not be allowed to unpack. | ||
159 | # NB: GNU cpio 2.15 DOES NOT do such checks. | ||
160 | optional FEATURE_PATH_TRAVERSAL_PROTECTION | ||
161 | rm -rf cpio.testdir | ||
162 | mkdir -p cpio.testdir/prepare/inner | ||
163 | echo "file outside of destination was written" > cpio.testdir/prepare/dont_write | ||
164 | echo "data" > cpio.testdir/prepare/inner/to_extract | ||
165 | mkdir -p cpio.testdir/extract | ||
166 | testing "cpio extract file outside of destination" "\ | ||
167 | (cd cpio.testdir/prepare/inner && echo -e '../dont_write\nto_extract' | cpio -o -H newc) | (cd cpio.testdir/extract && cpio -vi 2>&1) | ||
168 | echo \$? | ||
169 | ls cpio.testdir/dont_write 2>&1" \ | ||
170 | "\ | ||
171 | cpio: removing leading '../' from member names | ||
172 | ../dont_write | ||
173 | to_extract | ||
174 | 1 blocks | ||
175 | 0 | ||
176 | ls: cpio.testdir/dont_write: No such file or directory | ||
177 | " "" "" | ||
178 | SKIP= | ||
179 | |||
157 | # Clean up | 180 | # Clean up |
158 | rm -rf cpio.testdir cpio.testdir2 2>/dev/null | 181 | rm -rf cpio.testdir cpio.testdir2 2>/dev/null |
159 | 182 | ||
diff --git a/testsuite/cut.tests b/testsuite/cut.tests index a31f41f7f..21cfea809 100755 --- a/testsuite/cut.tests +++ b/testsuite/cut.tests | |||
@@ -23,14 +23,30 @@ the quick brown fox jumps over the lazy dog | |||
23 | 23 | ||
24 | testing "cut -b a,a,a" "cut -b 3,3,3 input" "e\np\ne\n" "$abc" "" | 24 | testing "cut -b a,a,a" "cut -b 3,3,3 input" "e\np\ne\n" "$abc" "" |
25 | 25 | ||
26 | testing "cut -b overlaps" "cut -b 1-3,2-5,7-9,9-10 input" \ | 26 | testing "cut -b overlaps" \ |
27 | "one:to:th\nalphabeta\nthe qick \n" "$abc" "" | 27 | "cut -b 1-3,2-5,7-9,9-10 input" \ |
28 | testing "-b encapsulated" "cut -b 3-8,4-6 input" "e:two:\npha:be\ne quic\n" \ | 28 | "\ |
29 | "$abc" "" | 29 | one:to:th |
30 | # --output-delimiter not implemnted (yet?) | 30 | alphabeta |
31 | #testing "cut -bO overlaps" \ | 31 | the qick \n" \ |
32 | # "cut --output-delimiter ' ' -b 1-3,2-5,7-9,9-10 input" \ | 32 | "$abc" "" |
33 | # "one:t o:th\nalpha beta\nthe q ick \n" "$abc" "" | 33 | testing "-b encapsulated" \ |
34 | "cut -b 3-8,4-6 input" \ | ||
35 | "\ | ||
36 | e:two: | ||
37 | pha:be | ||
38 | e quic\n" \ | ||
39 | "$abc" "" | ||
40 | optional LONG_OPTS | ||
41 | testing "cut -b --output-delimiter overlaps" \ | ||
42 | "cut --output-delimiter='^' -b 1-3,2-5,7-9,9-10 input" \ | ||
43 | "\ | ||
44 | one:t^o:th | ||
45 | alpha^beta | ||
46 | the q^ick \n" \ | ||
47 | "$abc" "" | ||
48 | SKIP= | ||
49 | |||
34 | testing "cut high-low error" "cut -b 8-3 input 2>/dev/null || echo err" "err\n" \ | 50 | testing "cut high-low error" "cut -b 8-3 input 2>/dev/null || echo err" "err\n" \ |
35 | "$abc" "" | 51 | "$abc" "" |
36 | 52 | ||
@@ -68,10 +84,27 @@ testing "cut with -d -f( ) -s" "cut -d' ' -f3 -s input && echo yes" "yes\n" "$in | |||
68 | testing "cut with -d -f(a) -s" "cut -da -f3 -s input" "n\nsium:Jim\n\ncion:Ed\n" "$input" "" | 84 | testing "cut with -d -f(a) -s" "cut -da -f3 -s input" "n\nsium:Jim\n\ncion:Ed\n" "$input" "" |
69 | testing "cut with -d -f(a) -s -n" "cut -da -f3 -s -n input" "n\nsium:Jim\n\ncion:Ed\n" "$input" "" | 85 | testing "cut with -d -f(a) -s -n" "cut -da -f3 -s -n input" "n\nsium:Jim\n\ncion:Ed\n" "$input" "" |
70 | 86 | ||
87 | input="\ | ||
88 | |||
89 | foo bar baz | ||
90 | |||
91 | bing bong boop | ||
92 | |||
93 | " | ||
94 | testing "cut with -d -s omits blank lines" "cut -d' ' -f2 -s input" "bar\nbong\n" "$input" "" | ||
95 | |||
71 | # substitute for awk | 96 | # substitute for awk |
72 | optional FEATURE_CUT_REGEX | 97 | optional FEATURE_CUT_REGEX |
73 | testing "cut -DF" "cut -DF 2,7,5" \ | 98 | testing "cut -DF unordered" "cut -DF 2,7,5" \ |
74 | "said and your\nare\nis demand. supply\nforecast :\nyou you better,\n\nEm: Took hate\n" "" \ | 99 | "\ |
100 | said and your | ||
101 | are | ||
102 | is demand. supply | ||
103 | forecast : | ||
104 | you you better, | ||
105 | |||
106 | Em: Took hate | ||
107 | " "" \ | ||
75 | "Bother, said Pooh. It's your husband, and he has a gun. | 108 | "Bother, said Pooh. It's your husband, and he has a gun. |
76 | Cheerios are donut seeds. | 109 | Cheerios are donut seeds. |
77 | Talk is cheap because supply exceeds demand. | 110 | Talk is cheap because supply exceeds demand. |
@@ -79,9 +112,92 @@ Weather forecast for tonight : dark. | |||
79 | Apple: you can buy better, but you can't pay more. | 112 | Apple: you can buy better, but you can't pay more. |
80 | Subcalifragilisticexpialidocious. | 113 | Subcalifragilisticexpialidocious. |
81 | Auntie Em: Hate you, hate Kansas. Took the dog. Dorothy." | 114 | Auntie Em: Hate you, hate Kansas. Took the dog. Dorothy." |
115 | |||
116 | # No delimiter found: print entire line regardless of -F RANGES | ||
117 | testing "cut -F1" "cut -d: -F1" \ | ||
118 | "the_only_field\n" "" \ | ||
119 | "the_only_field\n" | ||
120 | testing "cut -F2" "cut -d: -F2" \ | ||
121 | "the_only_field\n" "" \ | ||
122 | "the_only_field\n" | ||
123 | # No delimiter found and -s: skip entire line | ||
124 | testing "cut -sF1" "cut -d: -sF1" \ | ||
125 | "" "" \ | ||
126 | "the_only_field\n" | ||
127 | #^^^ the above is probably mishandled by toybox, it prints the line | ||
128 | testing "cut -sF2" "cut -d: -sF2" \ | ||
129 | "" "" \ | ||
130 | "the_only_field\n" | ||
131 | # -D disables special handling of lines with no delimiters, the line is treated as the 1st field | ||
132 | testing "cut -DF1" "cut -d: -DF1" \ | ||
133 | "the_only_field\n" "" \ | ||
134 | "the_only_field\n" | ||
135 | testing "cut -DF2" "cut -d: -DF2" \ | ||
136 | "\n" "" \ | ||
137 | "the_only_field\n" | ||
138 | |||
139 | optional FEATURE_CUT_REGEX LONG_OPTS | ||
140 | testing "cut -F preserves intermediate delimiters" \ | ||
141 | "cut --output-delimiter=: -F2,4-6,7" \ | ||
142 | "2:4 5 6:7\n" \ | ||
143 | "" "1 2 3 4\t\t5 6 7 8\n" | ||
144 | SKIP= | ||
145 | |||
146 | optional LONG_OPTS | ||
147 | testing "cut -f does not preserve intermediate delimiters" \ | ||
148 | "cut --output-delimiter=: -d' ' -f2,4-6,7" \ | ||
149 | "2:4:5:6:7\n" \ | ||
150 | "" "1 2 3 4 5 6 7 8\n" | ||
151 | SKIP= | ||
152 | |||
153 | testing "cut empty field" "cut -d ':' -f 1-3" \ | ||
154 | "a::b\n" \ | ||
155 | "" "a::b\n" | ||
156 | testing "cut empty field 2" "cut -d ':' -f 3-5" \ | ||
157 | "b::c\n" \ | ||
158 | "" "a::b::c:d\n" | ||
159 | testing "cut non-existing field" "cut -d ':' -f1,3" \ | ||
160 | "1\n" \ | ||
161 | "" "1:\n" | ||
162 | |||
163 | # cut -d$'\n' has a special meaning: "select input lines". | ||
164 | # I didn't find any documentation for this feature. | ||
165 | testing "cut -dNEWLINE" \ | ||
166 | "cut -d' | ||
167 | ' -f4,2,6-8" \ | ||
168 | "2\n4\n6\n7\n" \ | ||
169 | "" "1\n2\n3\n4\n5\n6\n7" | ||
170 | |||
171 | optional LONG_OPTS | ||
172 | testing "cut -dNEWLINE --output-delimiter" \ | ||
173 | "cut -d' | ||
174 | ' --output-delimiter=@@ -f4,2,6-8" \ | ||
175 | "2@@4@@6@@7\n" \ | ||
176 | "" "1\n2\n3\n4\n5\n6\n7" | ||
177 | |||
178 | testing "cut -dNEWLINE --output-delimiter 2" \ | ||
179 | "cut -d' | ||
180 | ' --output-delimiter=@@ -f4,2,6-8" \ | ||
181 | "2@@4@@6@@7\n" \ | ||
182 | "" "1\n2\n3\n4\n5\n6\n7\n" | ||
183 | |||
184 | testing "cut -dNEWLINE --output-delimiter EMPTY_INPUT" \ | ||
185 | "cut -d' | ||
186 | ' --output-delimiter=@@ -f4,2,6-8" \ | ||
187 | "" \ | ||
188 | "" "" | ||
82 | SKIP= | 189 | SKIP= |
83 | 190 | ||
84 | testing "cut empty field" "cut -d ':' -f 1-3" "a::b\n" "" "a::b\n" | 191 | # This seems to work as if delimiter is never found. |
85 | testing "cut empty field 2" "cut -d ':' -f 3-5" "b::c\n" "" "a::b::c:d\n" | 192 | # We test here that -d '' does *not* operate as if there was no -d |
193 | # and delimiter has defaulted to TAB: | ||
194 | testing "cut -d EMPTY" \ | ||
195 | "cut -d '' -f2-" \ | ||
196 | "1 2\t3 4 5\n" \ | ||
197 | "" "1 2\t3 4 5\n" | ||
198 | testing "cut -d EMPTY -s" \ | ||
199 | "cut -d '' -f2- -s" \ | ||
200 | "" \ | ||
201 | "" "1 2\t3 4 5\n" | ||
86 | 202 | ||
87 | exit $FAILCOUNT | 203 | exit $FAILCOUNT |
diff --git a/testsuite/hexdump.tests b/testsuite/hexdump.tests index be0379cfc..517ec508b 100755 --- a/testsuite/hexdump.tests +++ b/testsuite/hexdump.tests | |||
@@ -82,4 +82,10 @@ testing "hexdump -e /2 %d" \ | |||
82 | "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"\ | 82 | "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"\ |
83 | "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"\ | 83 | "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"\ |
84 | 84 | ||
85 | testing "hexdump -n4 -e '\"%u\"'" \ | ||
86 | "hexdump -n4 -e '\"%u\"'" \ | ||
87 | "12345678" \ | ||
88 | "" \ | ||
89 | "\x4e\x61\xbc\x00AAAA" | ||
90 | |||
85 | exit $FAILCOUNT | 91 | exit $FAILCOUNT |
diff --git a/testsuite/make.tests b/testsuite/make.tests index 376bdcc15..fabdbe45c 100755 --- a/testsuite/make.tests +++ b/testsuite/make.tests | |||
@@ -86,6 +86,16 @@ test.k: | |||
86 | ' | 86 | ' |
87 | cd .. || exit 1; rm -rf make.tempdir 2>/dev/null | 87 | cd .. || exit 1; rm -rf make.tempdir 2>/dev/null |
88 | 88 | ||
89 | # Check that single-suffix inference rules work. | ||
90 | mkdir make.tempdir && cd make.tempdir || exit 1 | ||
91 | touch test.sh | ||
92 | testing "make single-suffix inference rule works" \ | ||
93 | "make -f - -s; echo $?" \ | ||
94 | "0\n" "" ' | ||
95 | test: | ||
96 | ' | ||
97 | cd .. || exit 1; rm -rf make.tempdir 2>/dev/null | ||
98 | |||
89 | # There was a bug where the failure of a build command didn't result | 99 | # There was a bug where the failure of a build command didn't result |
90 | # in make returning a non-zero exit status. | 100 | # in make returning a non-zero exit status. |
91 | testing "make return error if command fails" \ | 101 | testing "make return error if command fails" \ |
@@ -541,6 +551,36 @@ testing "make chained inference rules" \ | |||
541 | ' | 551 | ' |
542 | cd .. || exit 1; rm -rf make.tempdir 2>/dev/null | 552 | cd .. || exit 1; rm -rf make.tempdir 2>/dev/null |
543 | 553 | ||
554 | # Suffixes with multiple periods are supported | ||
555 | mkdir make.tempdir && cd make.tempdir || exit 1 | ||
556 | touch x.c.c | ||
557 | testing "make support multi-period suffixes" \ | ||
558 | "make -f -" "cat x.c.c >x.o.o\nx\n" "" ' | ||
559 | .SUFFIXES: .c.c .o.o | ||
560 | x.o.o: | ||
561 | .c.c.o.o: | ||
562 | cat $< >$@ | ||
563 | @echo $* | ||
564 | ' | ||
565 | cd .. || exit 1; rm -rf make.tempdir 2>/dev/null | ||
566 | |||
567 | # Suffixes with no periods are supported | ||
568 | mkdir make.tempdir && cd make.tempdir || exit 1 | ||
569 | touch filex | ||
570 | testing "make support suffixes without any periods" \ | ||
571 | "make -f -" "cp filex fileh\nfile\ncp filex filez\nfile\n" "" ' | ||
572 | .SUFFIXES: x h z | ||
573 | all: fileh filez | ||
574 | fileh: | ||
575 | filez: filex | ||
576 | cp filex filez | ||
577 | @echo $* | ||
578 | xh: | ||
579 | cp $< $@ | ||
580 | @echo $* | ||
581 | ' | ||
582 | cd .. || exit 1; rm -rf make.tempdir 2>/dev/null | ||
583 | |||
544 | # make supports *, ? and [] wildcards in targets and prerequisites | 584 | # make supports *, ? and [] wildcards in targets and prerequisites |
545 | mkdir make.tempdir && cd make.tempdir || exit 1 | 585 | mkdir make.tempdir && cd make.tempdir || exit 1 |
546 | touch -t 202206171201 t1a t2aa t3b | 586 | touch -t 202206171201 t1a t2aa t3b |