diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2016-10-03 00:06:55 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2016-10-03 00:06:55 +0200 |
commit | a62bc80571eae6d286aed9a92d47dc42318a8146 (patch) | |
tree | 45ce124c7a8426ebf95c07a34c3c521595e400de /shell/ash_test/ash-misc | |
parent | ce332a23a3ff45a5aeb3e737da15b469badd5d12 (diff) | |
download | busybox-w32-a62bc80571eae6d286aed9a92d47dc42318a8146.tar.gz busybox-w32-a62bc80571eae6d286aed9a92d47dc42318a8146.tar.bz2 busybox-w32-a62bc80571eae6d286aed9a92d47dc42318a8146.zip |
ash testsuite: add most of hust tests which pass for ash
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'shell/ash_test/ash-misc')
76 files changed, 607 insertions, 0 deletions
diff --git a/shell/ash_test/ash-misc/and-or.right b/shell/ash_test/ash-misc/and-or.right new file mode 100644 index 000000000..f9fa5fbf8 --- /dev/null +++ b/shell/ash_test/ash-misc/and-or.right | |||
@@ -0,0 +1,18 @@ | |||
1 | a1 | ||
2 | a4 | ||
3 | b1 | ||
4 | b3 | ||
5 | b4 | ||
6 | b6 | ||
7 | c4 | ||
8 | c5 | ||
9 | c7 | ||
10 | c8 | ||
11 | ff1 | ||
12 | ff3 | ||
13 | ft2 | ||
14 | ft3 | ||
15 | tf2 | ||
16 | tf3 | ||
17 | tt2 | ||
18 | tt4 | ||
diff --git a/shell/ash_test/ash-misc/and-or.tests b/shell/ash_test/ash-misc/and-or.tests new file mode 100755 index 000000000..485458abe --- /dev/null +++ b/shell/ash_test/ash-misc/and-or.tests | |||
@@ -0,0 +1,34 @@ | |||
1 | false || echo a1 | ||
2 | false && echo a2 | ||
3 | true || echo a3 | ||
4 | true && echo a4 | ||
5 | |||
6 | false || echo b1 || echo b2 | ||
7 | false || echo b3 && echo b4 | ||
8 | false && echo b5 || echo b6 | ||
9 | false && echo b7 && echo b8 | ||
10 | |||
11 | true || echo c1 || echo c2 | ||
12 | true || echo c3 && echo c4 | ||
13 | true && echo c5 || echo c6 | ||
14 | true && echo c7 && echo c8 | ||
15 | |||
16 | false || false || echo ff1 | ||
17 | false || false && echo ff2 | ||
18 | false && false || echo ff3 | ||
19 | false && false && echo ff4 | ||
20 | |||
21 | false || true || echo ft1 | ||
22 | false || true && echo ft2 | ||
23 | false && true || echo ft3 | ||
24 | false && true && echo ft4 | ||
25 | |||
26 | true || false || echo tf1 | ||
27 | true || false && echo tf2 | ||
28 | true && false || echo tf3 | ||
29 | true && false && echo tf4 | ||
30 | |||
31 | true || true || echo tt1 | ||
32 | true || true && echo tt2 | ||
33 | true && true || echo tt3 | ||
34 | true && true && echo tt4 | ||
diff --git a/shell/ash_test/ash-misc/assignment1.right b/shell/ash_test/ash-misc/assignment1.right new file mode 100644 index 000000000..d0a13d3d8 --- /dev/null +++ b/shell/ash_test/ash-misc/assignment1.right | |||
@@ -0,0 +1,9 @@ | |||
1 | if1:0 | ||
2 | while1:0 | ||
3 | until1:0 | ||
4 | if2:0 | ||
5 | while2:0 | ||
6 | until2:0 | ||
7 | if3:0 | ||
8 | while3:0 | ||
9 | until3:0 | ||
diff --git a/shell/ash_test/ash-misc/assignment1.tests b/shell/ash_test/ash-misc/assignment1.tests new file mode 100755 index 000000000..033b35250 --- /dev/null +++ b/shell/ash_test/ash-misc/assignment1.tests | |||
@@ -0,0 +1,42 @@ | |||
1 | # Assignments after some keywords should still work | ||
2 | |||
3 | if a=1 true; then a=1 true; elif a=1 true; then a=1 true; else a=1 true; fi | ||
4 | echo if1:$? | ||
5 | while a=1 true; do a=1 true; break; done | ||
6 | echo while1:$? | ||
7 | until a=1 false; do a=1 true; break; done | ||
8 | echo until1:$? | ||
9 | |||
10 | if a=1 true | ||
11 | then a=1 true | ||
12 | elif a=1 true | ||
13 | then a=1 true | ||
14 | else a=1 true | ||
15 | fi | ||
16 | echo if2:$? | ||
17 | while a=1 true | ||
18 | do a=1 true | ||
19 | break | ||
20 | done | ||
21 | echo while2:$? | ||
22 | until a=1 false | ||
23 | do a=1 true | ||
24 | break | ||
25 | done | ||
26 | echo until2:$? | ||
27 | |||
28 | if | ||
29 | a=1 true; then | ||
30 | a=1 true; elif | ||
31 | a=1 true; then | ||
32 | a=1 true; else | ||
33 | a=1 true; fi | ||
34 | echo if3:$? | ||
35 | while | ||
36 | a=1 true; do | ||
37 | a=1 true; break; done | ||
38 | echo while3:$? | ||
39 | until | ||
40 | a=1 false; do | ||
41 | a=1 true; break; done | ||
42 | echo until3:$? | ||
diff --git a/shell/ash_test/ash-misc/assignment3.right b/shell/ash_test/ash-misc/assignment3.right new file mode 100644 index 000000000..0f02d7cbc --- /dev/null +++ b/shell/ash_test/ash-misc/assignment3.right | |||
@@ -0,0 +1,2 @@ | |||
1 | Done:0 | ||
2 | abc=123 | ||
diff --git a/shell/ash_test/ash-misc/assignment3.tests b/shell/ash_test/ash-misc/assignment3.tests new file mode 100755 index 000000000..790129be1 --- /dev/null +++ b/shell/ash_test/ash-misc/assignment3.tests | |||
@@ -0,0 +1,5 @@ | |||
1 | # This must be interpreted as assignments | ||
2 | a=1 b\ | ||
3 | =2 c=3 | ||
4 | echo Done:$? | ||
5 | echo abc=$a$b$c | ||
diff --git a/shell/ash_test/ash-misc/assignment4.right b/shell/ash_test/ash-misc/assignment4.right new file mode 100644 index 000000000..31c896f62 --- /dev/null +++ b/shell/ash_test/ash-misc/assignment4.right | |||
@@ -0,0 +1 @@ | |||
Done:0 | |||
diff --git a/shell/ash_test/ash-misc/assignment4.tests b/shell/ash_test/ash-misc/assignment4.tests new file mode 100755 index 000000000..6f46d0a33 --- /dev/null +++ b/shell/ash_test/ash-misc/assignment4.tests | |||
@@ -0,0 +1,3 @@ | |||
1 | # There was a bug where we misinterpreted assignments after 'do': | ||
2 | for i in 1; do eval b=; done | ||
3 | echo Done:$? | ||
diff --git a/shell/ash_test/ash-misc/break1.right b/shell/ash_test/ash-misc/break1.right new file mode 100644 index 000000000..04a4b1757 --- /dev/null +++ b/shell/ash_test/ash-misc/break1.right | |||
@@ -0,0 +1,2 @@ | |||
1 | A | ||
2 | OK:0 | ||
diff --git a/shell/ash_test/ash-misc/break1.tests b/shell/ash_test/ash-misc/break1.tests new file mode 100755 index 000000000..3a6b060d9 --- /dev/null +++ b/shell/ash_test/ash-misc/break1.tests | |||
@@ -0,0 +1,2 @@ | |||
1 | while true; do echo A; break; echo B; done | ||
2 | echo OK:$? | ||
diff --git a/shell/ash_test/ash-misc/break2.right b/shell/ash_test/ash-misc/break2.right new file mode 100644 index 000000000..8a15cb95f --- /dev/null +++ b/shell/ash_test/ash-misc/break2.right | |||
@@ -0,0 +1,3 @@ | |||
1 | A | ||
2 | AA | ||
3 | OK:0 | ||
diff --git a/shell/ash_test/ash-misc/break2.tests b/shell/ash_test/ash-misc/break2.tests new file mode 100755 index 000000000..7da9faf34 --- /dev/null +++ b/shell/ash_test/ash-misc/break2.tests | |||
@@ -0,0 +1,6 @@ | |||
1 | while true; do | ||
2 | echo A | ||
3 | while true; do echo AA; break 2; echo BB; done | ||
4 | echo B | ||
5 | done | ||
6 | echo OK:$? | ||
diff --git a/shell/ash_test/ash-misc/break3.right b/shell/ash_test/ash-misc/break3.right new file mode 100644 index 000000000..04a4b1757 --- /dev/null +++ b/shell/ash_test/ash-misc/break3.right | |||
@@ -0,0 +1,2 @@ | |||
1 | A | ||
2 | OK:0 | ||
diff --git a/shell/ash_test/ash-misc/break3.tests b/shell/ash_test/ash-misc/break3.tests new file mode 100755 index 000000000..d138dcac5 --- /dev/null +++ b/shell/ash_test/ash-misc/break3.tests | |||
@@ -0,0 +1,2 @@ | |||
1 | v=break; while true; do echo A; $v; echo B; break; echo C; done | ||
2 | echo OK:$? | ||
diff --git a/shell/ash_test/ash-misc/break4.right b/shell/ash_test/ash-misc/break4.right new file mode 100644 index 000000000..6f41c141d --- /dev/null +++ b/shell/ash_test/ash-misc/break4.right | |||
@@ -0,0 +1,6 @@ | |||
1 | A | ||
2 | AA | ||
3 | TRUE | ||
4 | A | ||
5 | AA | ||
6 | OK:0 | ||
diff --git a/shell/ash_test/ash-misc/break4.tests b/shell/ash_test/ash-misc/break4.tests new file mode 100755 index 000000000..67da2889c --- /dev/null +++ b/shell/ash_test/ash-misc/break4.tests | |||
@@ -0,0 +1,12 @@ | |||
1 | cond=true | ||
2 | while $cond; do | ||
3 | echo A | ||
4 | if test "$cond" = true; then | ||
5 | cond='echo TRUE' | ||
6 | else | ||
7 | cond=false | ||
8 | fi | ||
9 | while true; do echo AA; continue 2; echo BB; done | ||
10 | echo B | ||
11 | done | ||
12 | echo OK:$? | ||
diff --git a/shell/ash_test/ash-misc/break5.right b/shell/ash_test/ash-misc/break5.right new file mode 100644 index 000000000..0b9df2a4f --- /dev/null +++ b/shell/ash_test/ash-misc/break5.right | |||
@@ -0,0 +1,13 @@ | |||
1 | A | ||
2 | B | ||
3 | 0 | ||
4 | A:a | ||
5 | B | ||
6 | D | ||
7 | A:b | ||
8 | B | ||
9 | D | ||
10 | A:c | ||
11 | B | ||
12 | D | ||
13 | 0 | ||
diff --git a/shell/ash_test/ash-misc/break5.tests b/shell/ash_test/ash-misc/break5.tests new file mode 100755 index 000000000..273e040ec --- /dev/null +++ b/shell/ash_test/ash-misc/break5.tests | |||
@@ -0,0 +1,4 @@ | |||
1 | while true; do echo A; { echo B; break; echo C; }; echo D; done | ||
2 | echo $? | ||
3 | for v in a b c; do echo A:$v; (echo B; break; echo C); echo D; done | ||
4 | echo $? | ||
diff --git a/shell/ash_test/ash-misc/builtin1.right b/shell/ash_test/ash-misc/builtin1.right new file mode 100644 index 000000000..2e55ecb09 --- /dev/null +++ b/shell/ash_test/ash-misc/builtin1.right | |||
@@ -0,0 +1,2 @@ | |||
1 | VARIABLE=export | ||
2 | OK:0 | ||
diff --git a/shell/ash_test/ash-misc/builtin1.tests b/shell/ash_test/ash-misc/builtin1.tests new file mode 100755 index 000000000..1a2941faa --- /dev/null +++ b/shell/ash_test/ash-misc/builtin1.tests | |||
@@ -0,0 +1,6 @@ | |||
1 | # builtins, unlike keywords like "while", can be constructed | ||
2 | # with substitutions | ||
3 | VARIABLE=export | ||
4 | $VARIABLE VARIABLE | ||
5 | env | grep ^VARIABLE | ||
6 | echo OK:$? | ||
diff --git a/shell/ash_test/ash-misc/case1.right b/shell/ash_test/ash-misc/case1.right new file mode 100644 index 000000000..4afb2f51c --- /dev/null +++ b/shell/ash_test/ash-misc/case1.right | |||
@@ -0,0 +1,22 @@ | |||
1 | OK_1 | ||
2 | OK_1 | ||
3 | OK_21 | ||
4 | OK_22 | ||
5 | OK_23 | ||
6 | OK_31 | ||
7 | OK_32 | ||
8 | OK_41 | ||
9 | OK_42 | ||
10 | OK_43 | ||
11 | OK_44 | ||
12 | OK_51 | ||
13 | OK_52 | ||
14 | OK_53 | ||
15 | OK_sub1 | ||
16 | OK_sub2 | ||
17 | OK_sub3 | ||
18 | OK_sub4 | ||
19 | OK_sub5 | ||
20 | OK_sub6 | ||
21 | OK_esac1 | ||
22 | Done | ||
diff --git a/shell/ash_test/ash-misc/case1.tests b/shell/ash_test/ash-misc/case1.tests new file mode 100755 index 000000000..d72b57f53 --- /dev/null +++ b/shell/ash_test/ash-misc/case1.tests | |||
@@ -0,0 +1,40 @@ | |||
1 | case w in a) echo SKIP;; w) echo OK_1;; w) echo WRONG;; esac | ||
2 | |||
3 | case w in | ||
4 | a) echo SKIP;; | ||
5 | w)echo OK_1 ;; | ||
6 | w) | ||
7 | echo WRONG | ||
8 | ;; | ||
9 | esac | ||
10 | |||
11 | t=w | ||
12 | case $t in a) echo SKIP;; w) echo OK_21;; w) echo WRONG;; esac; | ||
13 | case "$t" in a) echo SKIP;; w) echo OK_22;; w) echo WRONG;; esac; | ||
14 | case w in a) echo SKIP;; $t) echo OK_23;; "$t") echo WRONG;; esac; | ||
15 | |||
16 | case '' in a) echo SKIP;; w) echo WRONG;; *) echo OK_31;; esac; | ||
17 | case '' in a) echo SKIP;; '') echo OK_32;; *) echo WRONG;; esac; | ||
18 | |||
19 | case `echo w` in a) echo SKIP;; w) echo OK_41;; w) echo WRONG;; esac; | ||
20 | case "`echo w`" in a) echo SKIP;; w) echo OK_42;; w) echo WRONG;; esac; | ||
21 | case `echo w w` in a) echo SKIP;; w) echo WRONG;; 'w w') echo OK_43;; esac; | ||
22 | case `echo w w` in a) echo SKIP;; w) echo WRONG;; w*) echo OK_44;; esac; | ||
23 | |||
24 | case w in `echo w`) echo OK_51;; `echo WRONG >&2`w) echo WRONG;; esac; | ||
25 | case w in `echo OK_52 >&2`) echo SKIP;; `echo`w) echo OK_53;; esac; | ||
26 | |||
27 | # parsing cases in subshells can easily get messy | ||
28 | case m in m) echo OK_sub1;; esac | ||
29 | case m in (m) echo OK_sub2;; esac | ||
30 | (case m in m) echo OK_sub3;; esac) | ||
31 | (case m in (m) echo OK_sub4;; esac) | ||
32 | ( | ||
33 | case m in m) echo OK_sub5;; esac | ||
34 | ) | ||
35 | ( | ||
36 | case m in (m) echo OK_sub6;; esac | ||
37 | ) | ||
38 | (case esac in "esac") echo OK_esac1;; esac) | ||
39 | |||
40 | echo Done | ||
diff --git a/shell/ash_test/ash-misc/colon.right b/shell/ash_test/ash-misc/colon.right new file mode 100644 index 000000000..2a87d0293 --- /dev/null +++ b/shell/ash_test/ash-misc/colon.right | |||
@@ -0,0 +1,2 @@ | |||
1 | 0 | ||
2 | OK: 0 | ||
diff --git a/shell/ash_test/ash-misc/colon.tests b/shell/ash_test/ash-misc/colon.tests new file mode 100755 index 000000000..cb8ab5306 --- /dev/null +++ b/shell/ash_test/ash-misc/colon.tests | |||
@@ -0,0 +1,5 @@ | |||
1 | false | ||
2 | : | ||
3 | echo $? | ||
4 | (while :; do exit; done) | ||
5 | echo OK: $? | ||
diff --git a/shell/ash_test/ash-misc/compound.right b/shell/ash_test/ash-misc/compound.right new file mode 100644 index 000000000..757d42fe4 --- /dev/null +++ b/shell/ash_test/ash-misc/compound.right | |||
@@ -0,0 +1,14 @@ | |||
1 | new group | ||
2 | 0 | ||
3 | 1 | ||
4 | 2 | ||
5 | 3 | ||
6 | 4 | ||
7 | 5 | ||
8 | 6 | ||
9 | new group | ||
10 | new group | ||
11 | 0 | ||
12 | 1 | ||
13 | 2 | ||
14 | 3 | ||
diff --git a/shell/ash_test/ash-misc/compound.tests b/shell/ash_test/ash-misc/compound.tests new file mode 100755 index 000000000..a5e85c3d5 --- /dev/null +++ b/shell/ash_test/ash-misc/compound.tests | |||
@@ -0,0 +1,21 @@ | |||
1 | echo new group | ||
2 | echo 0; { :; } | ||
3 | echo 1; { : ;} | ||
4 | echo 2; ({ :; }) | ||
5 | echo 3; ({ : ;}) | ||
6 | echo 4; ( : ) | ||
7 | echo 5; ( :; ) | ||
8 | echo 6; ( : ;) | ||
9 | # not sure if POSIX requires these, but bash accepts them ... | ||
10 | #echo 7; {( : )} | ||
11 | #echo 8; {( :; )} | ||
12 | #echo 9; {( : ;)} | ||
13 | |||
14 | echo new group | ||
15 | #echo 0; {(:);} | ||
16 | |||
17 | echo new group | ||
18 | echo 0; (:) | ||
19 | echo 1; (:;) | ||
20 | echo 2; (:); | ||
21 | echo 3; (:;); | ||
diff --git a/shell/ash_test/ash-misc/continue1.right b/shell/ash_test/ash-misc/continue1.right new file mode 100644 index 000000000..c4a5565bc --- /dev/null +++ b/shell/ash_test/ash-misc/continue1.right | |||
@@ -0,0 +1,8 @@ | |||
1 | A:a | ||
2 | A:b | ||
3 | A:c | ||
4 | OK1 | ||
5 | A:a | ||
6 | A:b | ||
7 | A:c | ||
8 | OK2 | ||
diff --git a/shell/ash_test/ash-misc/continue1.tests b/shell/ash_test/ash-misc/continue1.tests new file mode 100755 index 000000000..72d356660 --- /dev/null +++ b/shell/ash_test/ash-misc/continue1.tests | |||
@@ -0,0 +1,4 @@ | |||
1 | for v in a b c; do echo A:$v; continue 666; done | ||
2 | echo OK1 | ||
3 | for v in a b c; do echo A:$v; continue 666; done | ||
4 | echo OK2 | ||
diff --git a/shell/ash_test/ash-misc/continue2.right b/shell/ash_test/ash-misc/continue2.right new file mode 100644 index 000000000..49d3ebd3a --- /dev/null +++ b/shell/ash_test/ash-misc/continue2.right | |||
@@ -0,0 +1 @@ | |||
Ok:1 | |||
diff --git a/shell/ash_test/ash-misc/continue2.tests b/shell/ash_test/ash-misc/continue2.tests new file mode 100755 index 000000000..c2df07195 --- /dev/null +++ b/shell/ash_test/ash-misc/continue2.tests | |||
@@ -0,0 +1,3 @@ | |||
1 | e='' | ||
2 | (while test $e && exit 1; true; do e=1; continue; done) | ||
3 | echo Ok:$? | ||
diff --git a/shell/ash_test/ash-misc/continue3.right b/shell/ash_test/ash-misc/continue3.right new file mode 100644 index 000000000..aa47d0d46 --- /dev/null +++ b/shell/ash_test/ash-misc/continue3.right | |||
@@ -0,0 +1,2 @@ | |||
1 | 0 | ||
2 | 0 | ||
diff --git a/shell/ash_test/ash-misc/continue3.tests b/shell/ash_test/ash-misc/continue3.tests new file mode 100755 index 000000000..0aff867cd --- /dev/null +++ b/shell/ash_test/ash-misc/continue3.tests | |||
@@ -0,0 +1,3 @@ | |||
1 | # Test that "continue" does affect exitcode (sets to 0) | ||
2 | e='' | ||
3 | while echo $?; test $e && exit; true; do e=1; false; continue; done | ||
diff --git a/shell/ash_test/ash-misc/empty_for.right b/shell/ash_test/ash-misc/empty_for.right new file mode 100644 index 000000000..290d39b7e --- /dev/null +++ b/shell/ash_test/ash-misc/empty_for.right | |||
@@ -0,0 +1 @@ | |||
OK: 0 | |||
diff --git a/shell/ash_test/ash-misc/empty_for.tests b/shell/ash_test/ash-misc/empty_for.tests new file mode 100755 index 000000000..0cb52e849 --- /dev/null +++ b/shell/ash_test/ash-misc/empty_for.tests | |||
@@ -0,0 +1,3 @@ | |||
1 | false | ||
2 | for a in; do echo "HELLO"; done | ||
3 | echo OK: $? | ||
diff --git a/shell/ash_test/ash-misc/empty_for2.right b/shell/ash_test/ash-misc/empty_for2.right new file mode 100644 index 000000000..1acee9eb8 --- /dev/null +++ b/shell/ash_test/ash-misc/empty_for2.right | |||
@@ -0,0 +1,4 @@ | |||
1 | PARAM:abc | ||
2 | PARAM:d e | ||
3 | PARAM:123 | ||
4 | OK: 0 | ||
diff --git a/shell/ash_test/ash-misc/empty_for2.tests b/shell/ash_test/ash-misc/empty_for2.tests new file mode 100755 index 000000000..2b12ec2c1 --- /dev/null +++ b/shell/ash_test/ash-misc/empty_for2.tests | |||
@@ -0,0 +1,6 @@ | |||
1 | if test $# = 0; then | ||
2 | exec "$THIS_SH" $0 abc "d e" 123 | ||
3 | fi | ||
4 | false | ||
5 | for v; do echo "PARAM:$v"; done | ||
6 | echo OK: $? | ||
diff --git a/shell/ash_test/ash-misc/exit1.right b/shell/ash_test/ash-misc/exit1.right new file mode 100644 index 000000000..dd2cfc279 --- /dev/null +++ b/shell/ash_test/ash-misc/exit1.right | |||
@@ -0,0 +1 @@ | |||
Once | |||
diff --git a/shell/ash_test/ash-misc/exit1.tests b/shell/ash_test/ash-misc/exit1.tests new file mode 100755 index 000000000..41e0d092d --- /dev/null +++ b/shell/ash_test/ash-misc/exit1.tests | |||
@@ -0,0 +1,4 @@ | |||
1 | trap "echo Not shown" EXIT | ||
2 | (exit) # must be silent | ||
3 | trap "echo Once; exit" EXIT | ||
4 | { exit; } | ||
diff --git a/shell/ash_test/ash-misc/for_with_bslashes.right b/shell/ash_test/ash-misc/for_with_bslashes.right new file mode 100644 index 000000000..02d96692c --- /dev/null +++ b/shell/ash_test/ash-misc/for_with_bslashes.right | |||
@@ -0,0 +1,8 @@ | |||
1 | a | ||
2 | b\c | ||
3 | b\\c | ||
4 | b"c | ||
5 | b'c | ||
6 | b$c | ||
7 | b`true`c | ||
8 | Zero:0 | ||
diff --git a/shell/ash_test/ash-misc/for_with_bslashes.tests b/shell/ash_test/ash-misc/for_with_bslashes.tests new file mode 100755 index 000000000..363f3d85b --- /dev/null +++ b/shell/ash_test/ash-misc/for_with_bslashes.tests | |||
@@ -0,0 +1,10 @@ | |||
1 | # UNFIXED BUG. | ||
2 | # commented-out words contain ^C character. | ||
3 | # It's a SPECIAL_VAR_SYMBOL, for now hush does not escape it. | ||
4 | # When it is fixed, update this test. | ||
5 | |||
6 | for a in 'a' 'b\c' 'b\\c' 'b"c' "b'c" 'b$c' 'b`true`c' ### 'b#c' | ||
7 | do | ||
8 | echo $a | ||
9 | done | ||
10 | echo Zero:$? | ||
diff --git a/shell/ash_test/ash-misc/for_with_keywords.right b/shell/ash_test/ash-misc/for_with_keywords.right new file mode 100644 index 000000000..eb04e9af9 --- /dev/null +++ b/shell/ash_test/ash-misc/for_with_keywords.right | |||
@@ -0,0 +1,4 @@ | |||
1 | do | ||
2 | done | ||
3 | then | ||
4 | OK: 0 | ||
diff --git a/shell/ash_test/ash-misc/for_with_keywords.tests b/shell/ash_test/ash-misc/for_with_keywords.tests new file mode 100755 index 000000000..a8b8e4264 --- /dev/null +++ b/shell/ash_test/ash-misc/for_with_keywords.tests | |||
@@ -0,0 +1,2 @@ | |||
1 | for if in do done then; do echo $if; done | ||
2 | echo OK: $? | ||
diff --git a/shell/ash_test/ash-misc/if_false_exitcode.right b/shell/ash_test/ash-misc/if_false_exitcode.right new file mode 100644 index 000000000..7b24a35ff --- /dev/null +++ b/shell/ash_test/ash-misc/if_false_exitcode.right | |||
@@ -0,0 +1 @@ | |||
Ok:0 | |||
diff --git a/shell/ash_test/ash-misc/if_false_exitcode.tests b/shell/ash_test/ash-misc/if_false_exitcode.tests new file mode 100755 index 000000000..01b36b100 --- /dev/null +++ b/shell/ash_test/ash-misc/if_false_exitcode.tests | |||
@@ -0,0 +1,2 @@ | |||
1 | if false; then echo Bad; fi | ||
2 | echo Ok:$? | ||
diff --git a/shell/ash_test/ash-misc/nommu1.right b/shell/ash_test/ash-misc/nommu1.right new file mode 100644 index 000000000..d206a854b --- /dev/null +++ b/shell/ash_test/ash-misc/nommu1.right | |||
@@ -0,0 +1,7 @@ | |||
1 | Ok | ||
2 | Ok | ||
3 | Ok | ||
4 | Ok | ||
5 | Ok | ||
6 | Ok | ||
7 | Done | ||
diff --git a/shell/ash_test/ash-misc/nommu1.tests b/shell/ash_test/ash-misc/nommu1.tests new file mode 100755 index 000000000..e14ada5f9 --- /dev/null +++ b/shell/ash_test/ash-misc/nommu1.tests | |||
@@ -0,0 +1,12 @@ | |||
1 | (echo \ | ||
2 | Ok) | ||
3 | ( (echo \ | ||
4 | Ok) ) | ||
5 | ( ( (echo \ | ||
6 | Ok) ) ) | ||
7 | |||
8 | (echo \Ok) | ||
9 | ( (echo \Ok) ) | ||
10 | ( ( (echo \Ok) ) ) | ||
11 | |||
12 | echo Done | ||
diff --git a/shell/ash_test/ash-misc/nommu2.right b/shell/ash_test/ash-misc/nommu2.right new file mode 100644 index 000000000..fb8ba8b5c --- /dev/null +++ b/shell/ash_test/ash-misc/nommu2.right | |||
@@ -0,0 +1,5 @@ | |||
1 | Ok | ||
2 | Ok | ||
3 | Ok | ||
4 | Ok | ||
5 | Done | ||
diff --git a/shell/ash_test/ash-misc/nommu2.tests b/shell/ash_test/ash-misc/nommu2.tests new file mode 100755 index 000000000..61ed5ce5b --- /dev/null +++ b/shell/ash_test/ash-misc/nommu2.tests | |||
@@ -0,0 +1,5 @@ | |||
1 | echo Not shown | if true; then echo $(echo Ok); fi | ||
2 | echo Not shown | if true; then echo `echo Ok`; fi | ||
3 | echo Not shown | ( if true; then echo $(echo Ok); fi ) | ||
4 | echo Not shown | ( if true; then echo `echo Ok`; fi ) | ||
5 | echo Done | ||
diff --git a/shell/ash_test/ash-misc/nommu3.right b/shell/ash_test/ash-misc/nommu3.right new file mode 100644 index 000000000..da1534bef --- /dev/null +++ b/shell/ash_test/ash-misc/nommu3.right | |||
@@ -0,0 +1,2 @@ | |||
1 | Ok | ||
2 | 0 | ||
diff --git a/shell/ash_test/ash-misc/nommu3.tests b/shell/ash_test/ash-misc/nommu3.tests new file mode 100755 index 000000000..ac82a6a11 --- /dev/null +++ b/shell/ash_test/ash-misc/nommu3.tests | |||
@@ -0,0 +1,15 @@ | |||
1 | #!/bin/sh | ||
2 | |||
3 | func() | ||
4 | { | ||
5 | while read p; do echo "$p"; done | ||
6 | } | ||
7 | |||
8 | pipe_to_func() | ||
9 | { | ||
10 | # We had a NOMMU bug which caused "echo Ok |" part to be lost | ||
11 | echo Ok | func | ||
12 | } | ||
13 | |||
14 | pipe_to_func | cat | ||
15 | echo $? | ||
diff --git a/shell/ash_test/ash-misc/opts1.right b/shell/ash_test/ash-misc/opts1.right new file mode 100644 index 000000000..4da75737d --- /dev/null +++ b/shell/ash_test/ash-misc/opts1.right | |||
@@ -0,0 +1,2 @@ | |||
1 | Param1: >-10qwertyuiop< | ||
2 | Done | ||
diff --git a/shell/ash_test/ash-misc/opts1.tests b/shell/ash_test/ash-misc/opts1.tests new file mode 100755 index 000000000..45a23d66b --- /dev/null +++ b/shell/ash_test/ash-misc/opts1.tests | |||
@@ -0,0 +1,5 @@ | |||
1 | if test $# = 0; then | ||
2 | exec "$THIS_SH" $0 -10qwertyuiop | ||
3 | fi | ||
4 | echo "Param1: >$1<" | ||
5 | echo Done | ||
diff --git a/shell/ash_test/ash-misc/pid.right b/shell/ash_test/ash-misc/pid.right new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/shell/ash_test/ash-misc/pid.right | |||
@@ -0,0 +1 @@ | |||
0 | |||
diff --git a/shell/ash_test/ash-misc/pid.tests b/shell/ash_test/ash-misc/pid.tests new file mode 100755 index 000000000..eaeaa717b --- /dev/null +++ b/shell/ash_test/ash-misc/pid.tests | |||
@@ -0,0 +1 @@ | |||
test `(echo $$)` = `echo $$`; echo $? | |||
diff --git a/shell/ash_test/ash-misc/pipefail.right b/shell/ash_test/ash-misc/pipefail.right new file mode 100644 index 000000000..5845d8939 --- /dev/null +++ b/shell/ash_test/ash-misc/pipefail.right | |||
@@ -0,0 +1,40 @@ | |||
1 | Default: | ||
2 | true | true: | ||
3 | 0 | ||
4 | 1 | ||
5 | true | false: | ||
6 | 1 | ||
7 | 0 | ||
8 | false | true: | ||
9 | 0 | ||
10 | 1 | ||
11 | exit 2 | exit 3 | exit 4: | ||
12 | 4 | ||
13 | 0 | ||
14 | Pipefail on: | ||
15 | true | true: | ||
16 | 0 | ||
17 | 1 | ||
18 | true | false: | ||
19 | 1 | ||
20 | 0 | ||
21 | false | true: | ||
22 | 1 | ||
23 | 0 | ||
24 | exit 2 | exit 3 | exit 4: | ||
25 | 4 | ||
26 | 0 | ||
27 | Pipefail off: | ||
28 | true | true: | ||
29 | 0 | ||
30 | 1 | ||
31 | true | false: | ||
32 | 1 | ||
33 | 0 | ||
34 | false | true: | ||
35 | 0 | ||
36 | 1 | ||
37 | exit 2 | exit 3 | exit 4: | ||
38 | 4 | ||
39 | 0 | ||
40 | Done | ||
diff --git a/shell/ash_test/ash-misc/pipefail.tests b/shell/ash_test/ash-misc/pipefail.tests new file mode 100755 index 000000000..9df841861 --- /dev/null +++ b/shell/ash_test/ash-misc/pipefail.tests | |||
@@ -0,0 +1,45 @@ | |||
1 | echo Default: | ||
2 | echo "true | true:" | ||
3 | true | true; echo $? | ||
4 | ! true | true; echo $? | ||
5 | echo "true | false:" | ||
6 | true | false; echo $? | ||
7 | ! true | false; echo $? | ||
8 | echo "false | true:" | ||
9 | false | true; echo $? | ||
10 | ! false | true; echo $? | ||
11 | echo "exit 2 | exit 3 | exit 4:" | ||
12 | exit 2 | exit 3 | exit 4; echo $? | ||
13 | ! exit 2 | exit 3 | exit 4; echo $? | ||
14 | |||
15 | echo Pipefail on: | ||
16 | set -o pipefail | ||
17 | echo "true | true:" | ||
18 | true | true; echo $? | ||
19 | ! true | true; echo $? | ||
20 | echo "true | false:" | ||
21 | true | false; echo $? | ||
22 | ! true | false; echo $? | ||
23 | echo "false | true:" | ||
24 | false | true; echo $? | ||
25 | ! false | true; echo $? | ||
26 | echo "exit 2 | exit 3 | exit 4:" | ||
27 | exit 2 | exit 3 | exit 4; echo $? | ||
28 | ! exit 2 | exit 3 | exit 4; echo $? | ||
29 | |||
30 | echo Pipefail off: | ||
31 | set +o pipefail | ||
32 | echo "true | true:" | ||
33 | true | true; echo $? | ||
34 | ! true | true; echo $? | ||
35 | echo "true | false:" | ||
36 | true | false; echo $? | ||
37 | ! true | false; echo $? | ||
38 | echo "false | true:" | ||
39 | false | true; echo $? | ||
40 | ! false | true; echo $? | ||
41 | echo "exit 2 | exit 3 | exit 4:" | ||
42 | exit 2 | exit 3 | exit 4; echo $? | ||
43 | ! exit 2 | exit 3 | exit 4; echo $? | ||
44 | |||
45 | echo Done | ||
diff --git a/shell/ash_test/ash-misc/read.right b/shell/ash_test/ash-misc/read.right new file mode 100644 index 000000000..0e50e2a23 --- /dev/null +++ b/shell/ash_test/ash-misc/read.right | |||
@@ -0,0 +1,4 @@ | |||
1 | read | ||
2 | cat | ||
3 | echo "REPLY=$REPLY" | ||
4 | REPLY=exec <read.tests | ||
diff --git a/shell/ash_test/ash-misc/read.tests b/shell/ash_test/ash-misc/read.tests new file mode 100755 index 000000000..ff1acbde1 --- /dev/null +++ b/shell/ash_test/ash-misc/read.tests | |||
@@ -0,0 +1,4 @@ | |||
1 | exec <read.tests | ||
2 | read | ||
3 | cat | ||
4 | echo "REPLY=$REPLY" | ||
diff --git a/shell/ash_test/ash-misc/return1.right b/shell/ash_test/ash-misc/return1.right new file mode 100644 index 000000000..7b24a35ff --- /dev/null +++ b/shell/ash_test/ash-misc/return1.right | |||
@@ -0,0 +1 @@ | |||
Ok:0 | |||
diff --git a/shell/ash_test/ash-misc/return1.tests b/shell/ash_test/ash-misc/return1.tests new file mode 100755 index 000000000..eeb92ef3f --- /dev/null +++ b/shell/ash_test/ash-misc/return1.tests | |||
@@ -0,0 +1,4 @@ | |||
1 | echo "true && return; echo Should not be printed" >return_sourced | ||
2 | . ./return_sourced | ||
3 | rm return_sourced | ||
4 | echo Ok:$? | ||
diff --git a/shell/ash_test/ash-misc/shift.right b/shell/ash_test/ash-misc/shift.right new file mode 100644 index 000000000..d281e358c --- /dev/null +++ b/shell/ash_test/ash-misc/shift.right | |||
@@ -0,0 +1,6 @@ | |||
1 | ./shift.tests abc d e | ||
2 | ./shift.tests d e 123 | ||
3 | ./shift.tests d e 123 | ||
4 | ./shift.tests | ||
5 | ./shift.tests | ||
6 | ./shift.tests | ||
diff --git a/shell/ash_test/ash-misc/shift.tests b/shell/ash_test/ash-misc/shift.tests new file mode 100755 index 000000000..53ef249f2 --- /dev/null +++ b/shell/ash_test/ash-misc/shift.tests | |||
@@ -0,0 +1,14 @@ | |||
1 | if test $# = 0; then | ||
2 | exec "$THIS_SH" $0 abc "d e" 123 | ||
3 | fi | ||
4 | echo $0 $1 $2 | ||
5 | shift | ||
6 | echo $0 $1 $2 | ||
7 | shift 999 | ||
8 | echo $0 $1 $2 | ||
9 | shift 2 | ||
10 | echo $0 $1 $2 | ||
11 | shift 2 | ||
12 | echo $0 $1 $2 | ||
13 | shift | ||
14 | echo $0 $1 $2 | ||
diff --git a/shell/ash_test/ash-misc/sigint1.right b/shell/ash_test/ash-misc/sigint1.right new file mode 100644 index 000000000..a9094b056 --- /dev/null +++ b/shell/ash_test/ash-misc/sigint1.right | |||
@@ -0,0 +1 @@ | |||
Sending SIGINT to main shell PID | |||
diff --git a/shell/ash_test/ash-misc/sigint1.tests b/shell/ash_test/ash-misc/sigint1.tests new file mode 100755 index 000000000..3d483d32a --- /dev/null +++ b/shell/ash_test/ash-misc/sigint1.tests | |||
@@ -0,0 +1,41 @@ | |||
1 | # What should happen if non-interactive shell gets SIGINT? | ||
2 | |||
3 | (sleep 1; echo Sending SIGINT to main shell PID; exec kill -INT $$) & | ||
4 | |||
5 | # We create a child which exits with 0 even on SIGINT | ||
6 | # (The complex command is necessary only if SIGINT is generated by ^C, | ||
7 | # in this testcase even bare "sleep 2" would do because | ||
8 | # in the testcase we don't send SIGINT *to the child*...) | ||
9 | $THIS_SH -c 'trap "exit 0" SIGINT; sleep 2' | ||
10 | |||
11 | # In one second, we (main shell) get SIGINT here. | ||
12 | # The question is whether we should, or should not, exit. | ||
13 | |||
14 | # bash will not stop here. It will execute next command(s). | ||
15 | |||
16 | # The rationale for this is described here: | ||
17 | # http://www.cons.org/cracauer/sigint.html | ||
18 | # | ||
19 | # Basically, bash will not exit on SIGINT immediately if it waits | ||
20 | # for a child. It will wait for the child to exit. | ||
21 | # If child exits NOT by dying on SIGINT, then bash will not exit. | ||
22 | # | ||
23 | # The idea is that the following script: | ||
24 | # | emacs file.txt | ||
25 | # | more cmds | ||
26 | # User may use ^C to interrupt editor's ops like search. But then | ||
27 | # emacs exits normally. User expects that script doesn't stop. | ||
28 | # | ||
29 | # This is a nice idea, but detecting "did process really exit | ||
30 | # with SIGINT?" is racy. Consider: | ||
31 | # | bash -c 'while true; do /bin/true; done' | ||
32 | # When ^C is pressed while bash waits for /bin/true to exit, | ||
33 | # it may happen that /bin/true exits with exitcode 0 before | ||
34 | # ^C is delivered to it as SIGINT. bash will see SIGINT, then | ||
35 | # it will see that child exited with 0, and bash will NOT EXIT. | ||
36 | |||
37 | # Therefore we do not implement bash behavior. | ||
38 | # I'd say that emacs need to put itself into a separate pgrp | ||
39 | # to isolate shell from getting stray SIGINTs from ^C. | ||
40 | |||
41 | echo Next command after SIGINT was executed | ||
diff --git a/shell/ash_test/ash-misc/unicode1.right b/shell/ash_test/ash-misc/unicode1.right new file mode 100644 index 000000000..d3bbbf697 --- /dev/null +++ b/shell/ash_test/ash-misc/unicode1.right | |||
@@ -0,0 +1,3 @@ | |||
1 | 1 | ||
2 | 1 | ||
3 | Ok | ||
diff --git a/shell/ash_test/ash-misc/unicode1.tests b/shell/ash_test/ash-misc/unicode1.tests new file mode 100755 index 000000000..8788ba910 --- /dev/null +++ b/shell/ash_test/ash-misc/unicode1.tests | |||
@@ -0,0 +1,13 @@ | |||
1 | LANG=en_US.UTF-8 | ||
2 | |||
3 | # A combining character U+300 | ||
4 | a=`printf "\xcc\x80"` | ||
5 | # Should print 1 | ||
6 | echo ${#a} | ||
7 | |||
8 | # A Japanese katakana charachter U+30a3 | ||
9 | a=`printf "\xe3\x82\xa3"` | ||
10 | # Should print 1 | ||
11 | echo ${#a} | ||
12 | |||
13 | echo Ok | ||
diff --git a/shell/ash_test/ash-misc/until1.right b/shell/ash_test/ash-misc/until1.right new file mode 100644 index 000000000..be2daad95 --- /dev/null +++ b/shell/ash_test/ash-misc/until1.right | |||
@@ -0,0 +1,3 @@ | |||
1 | 1 | ||
2 | 1 | ||
3 | Ok:0 | ||
diff --git a/shell/ash_test/ash-misc/until1.tests b/shell/ash_test/ash-misc/until1.tests new file mode 100755 index 000000000..10ab28381 --- /dev/null +++ b/shell/ash_test/ash-misc/until1.tests | |||
@@ -0,0 +1,11 @@ | |||
1 | x=1 | ||
2 | until test "$x" = 4; do echo $x; x=4; done | ||
3 | |||
4 | # We had a bug in multi-line form | ||
5 | x=1 | ||
6 | until test "$x" = 4; do | ||
7 | echo $x | ||
8 | x=4 | ||
9 | done | ||
10 | |||
11 | echo Ok:$? | ||
diff --git a/shell/ash_test/ash-misc/while1.right b/shell/ash_test/ash-misc/while1.right new file mode 100644 index 000000000..7c4d7beb0 --- /dev/null +++ b/shell/ash_test/ash-misc/while1.right | |||
@@ -0,0 +1 @@ | |||
OK:0 | |||
diff --git a/shell/ash_test/ash-misc/while1.tests b/shell/ash_test/ash-misc/while1.tests new file mode 100755 index 000000000..11e201e6a --- /dev/null +++ b/shell/ash_test/ash-misc/while1.tests | |||
@@ -0,0 +1,2 @@ | |||
1 | while false; do echo NOT SHOWN; done | ||
2 | echo OK:$? | ||
diff --git a/shell/ash_test/ash-misc/while2.right b/shell/ash_test/ash-misc/while2.right new file mode 100644 index 000000000..07207cc84 --- /dev/null +++ b/shell/ash_test/ash-misc/while2.right | |||
@@ -0,0 +1,2 @@ | |||
1 | Hello | ||
2 | OK:0 | ||
diff --git a/shell/ash_test/ash-misc/while2.tests b/shell/ash_test/ash-misc/while2.tests new file mode 100755 index 000000000..2247adc74 --- /dev/null +++ b/shell/ash_test/ash-misc/while2.tests | |||
@@ -0,0 +1,2 @@ | |||
1 | while echo Hello; false; do echo NOT SHOWN; done | ||
2 | echo OK:$? | ||
diff --git a/shell/ash_test/ash-misc/while4.right b/shell/ash_test/ash-misc/while4.right new file mode 100644 index 000000000..7b24a35ff --- /dev/null +++ b/shell/ash_test/ash-misc/while4.right | |||
@@ -0,0 +1 @@ | |||
Ok:0 | |||
diff --git a/shell/ash_test/ash-misc/while4.tests b/shell/ash_test/ash-misc/while4.tests new file mode 100755 index 000000000..ba80e603a --- /dev/null +++ b/shell/ash_test/ash-misc/while4.tests | |||
@@ -0,0 +1,6 @@ | |||
1 | false | ||
2 | while false && echo Not reached; do | ||
3 | echo BUG | ||
4 | break | ||
5 | done | ||
6 | echo Ok:$? | ||
diff --git a/shell/ash_test/ash-misc/while_in_subshell.right b/shell/ash_test/ash-misc/while_in_subshell.right new file mode 100644 index 000000000..290d39b7e --- /dev/null +++ b/shell/ash_test/ash-misc/while_in_subshell.right | |||
@@ -0,0 +1 @@ | |||
OK: 0 | |||
diff --git a/shell/ash_test/ash-misc/while_in_subshell.tests b/shell/ash_test/ash-misc/while_in_subshell.tests new file mode 100755 index 000000000..def8e092b --- /dev/null +++ b/shell/ash_test/ash-misc/while_in_subshell.tests | |||
@@ -0,0 +1,2 @@ | |||
1 | (while true; do exit; done) | ||
2 | echo OK: $? | ||