ash: add all hush parsing tests to ast tests
All pass. Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
0675b03de4
commit
e34dbc4fdc
1
shell/ash_test/ash-parsing/argv0.right
Normal file
1
shell/ash_test/ash-parsing/argv0.right
Normal file
@ -0,0 +1 @@
|
||||
OK
|
4
shell/ash_test/ash-parsing/argv0.tests
Executable file
4
shell/ash_test/ash-parsing/argv0.tests
Executable file
@ -0,0 +1,4 @@
|
||||
if test $# = 0; then
|
||||
exec "$THIS_SH" "$0" arg
|
||||
fi
|
||||
echo OK
|
7
shell/ash_test/ash-parsing/brace1.right
Normal file
7
shell/ash_test/ash-parsing/brace1.right
Normal file
@ -0,0 +1,7 @@
|
||||
{abc}
|
||||
{
|
||||
}
|
||||
./brace1.tests: line 4: {cmd: not found
|
||||
./brace1.tests: line 5: {: not found
|
||||
./brace1.tests: line 6: {: not found
|
||||
Done: 127
|
7
shell/ash_test/ash-parsing/brace1.tests
Executable file
7
shell/ash_test/ash-parsing/brace1.tests
Executable file
@ -0,0 +1,7 @@
|
||||
echo {abc}
|
||||
echo {
|
||||
echo }
|
||||
{cmd
|
||||
""{
|
||||
{""
|
||||
echo Done: $?
|
3
shell/ash_test/ash-parsing/brace2.right
Normal file
3
shell/ash_test/ash-parsing/brace2.right
Normal file
@ -0,0 +1,3 @@
|
||||
{q,w}
|
||||
{q,w}
|
||||
Done
|
5
shell/ash_test/ash-parsing/brace2.tests
Executable file
5
shell/ash_test/ash-parsing/brace2.tests
Executable file
@ -0,0 +1,5 @@
|
||||
v='{q,w}'
|
||||
# Should not brace-expand v value
|
||||
echo $v
|
||||
echo "$v"
|
||||
echo Done
|
2
shell/ash_test/ash-parsing/comment1.right
Normal file
2
shell/ash_test/ash-parsing/comment1.right
Normal file
@ -0,0 +1,2 @@
|
||||
Nothing:
|
||||
String: #should-be-echoed
|
2
shell/ash_test/ash-parsing/comment1.tests
Executable file
2
shell/ash_test/ash-parsing/comment1.tests
Executable file
@ -0,0 +1,2 @@
|
||||
echo Nothing: #should-not-be-echoed
|
||||
echo String: ""#should-be-echoed
|
1
shell/ash_test/ash-parsing/eol1.right
Normal file
1
shell/ash_test/ash-parsing/eol1.right
Normal file
@ -0,0 +1 @@
|
||||
Done:0
|
18
shell/ash_test/ash-parsing/eol1.tests
Executable file
18
shell/ash_test/ash-parsing/eol1.tests
Executable file
@ -0,0 +1,18 @@
|
||||
# bug was that we treated <newline> as ';' in this line:
|
||||
true || echo foo |
|
||||
echo BAD1 | cat
|
||||
|
||||
# variation on the same theme
|
||||
true || echo foo |
|
||||
# comment
|
||||
echo BAD2 | cat
|
||||
|
||||
# variation on the same theme
|
||||
true || echo foo |
|
||||
|
||||
echo BAD3 | cat
|
||||
|
||||
# this should error out, but currently works in hush:
|
||||
#true || echo foo |;
|
||||
|
||||
echo Done:$?
|
4
shell/ash_test/ash-parsing/escape1.right
Normal file
4
shell/ash_test/ash-parsing/escape1.right
Normal file
@ -0,0 +1,4 @@
|
||||
\
|
||||
a\b
|
||||
\\
|
||||
c\\d
|
6
shell/ash_test/ash-parsing/escape1.tests
Executable file
6
shell/ash_test/ash-parsing/escape1.tests
Executable file
@ -0,0 +1,6 @@
|
||||
test "$CONFIG_FEATURE_FANCY_ECHO" = "y" || exit 77
|
||||
|
||||
echo "\\"
|
||||
echo a"\\"b
|
||||
echo '\\'
|
||||
echo c'\\'d
|
4
shell/ash_test/ash-parsing/escape2.right
Normal file
4
shell/ash_test/ash-parsing/escape2.right
Normal file
@ -0,0 +1,4 @@
|
||||
*?[a]*
|
||||
a*?[a]*b
|
||||
*?[a]*
|
||||
c*?[a]*d
|
4
shell/ash_test/ash-parsing/escape2.tests
Executable file
4
shell/ash_test/ash-parsing/escape2.tests
Executable file
@ -0,0 +1,4 @@
|
||||
echo "*?[a]*"
|
||||
echo a"*?[a]*"b
|
||||
echo '*?[a]*'
|
||||
echo c'*?[a]*'d
|
23
shell/ash_test/ash-parsing/escape3.right
Normal file
23
shell/ash_test/ash-parsing/escape3.right
Normal file
@ -0,0 +1,23 @@
|
||||
v: a \ b \\ c \\\ d \\\\ e
|
||||
v: a \ b \\ c \\\ d \\\\ e
|
||||
Unquoted:
|
||||
.a.
|
||||
.\.
|
||||
.b.
|
||||
.\\.
|
||||
.c.
|
||||
.\\\.
|
||||
.d.
|
||||
.\\\\.
|
||||
.e.
|
||||
Quoted:
|
||||
.a.
|
||||
.\.
|
||||
.b.
|
||||
.\\.
|
||||
.c.
|
||||
.\\\.
|
||||
.d.
|
||||
.\\\\.
|
||||
.e.
|
||||
done
|
10
shell/ash_test/ash-parsing/escape3.tests
Executable file
10
shell/ash_test/ash-parsing/escape3.tests
Executable file
@ -0,0 +1,10 @@
|
||||
test "$CONFIG_FEATURE_FANCY_ECHO" = "y" || exit 77
|
||||
|
||||
v='a \ b \\ c \\\ d \\\\ e'
|
||||
echo v: $v
|
||||
echo v: "$v"
|
||||
echo Unquoted:
|
||||
for a in $v; do echo .$a.; done
|
||||
echo Quoted:
|
||||
for a in $v; do echo ".$a."; done
|
||||
echo done
|
2
shell/ash_test/ash-parsing/escape4.right
Normal file
2
shell/ash_test/ash-parsing/escape4.right
Normal file
@ -0,0 +1,2 @@
|
||||
Ok
|
||||
End
|
6
shell/ash_test/ash-parsing/escape4.tests
Executable file
6
shell/ash_test/ash-parsing/escape4.tests
Executable file
@ -0,0 +1,6 @@
|
||||
i\
|
||||
f tr\
|
||||
ue; th\
|
||||
en echo "O\
|
||||
k"; fi; echo "\
|
||||
End"
|
9
shell/ash_test/ash-parsing/escape5.right
Normal file
9
shell/ash_test/ash-parsing/escape5.right
Normal file
@ -0,0 +1,9 @@
|
||||
a\nb\nc\n
|
||||
a
|
||||
b
|
||||
c
|
||||
a\nb\nc\n
|
||||
a
|
||||
b
|
||||
c
|
||||
Done
|
7
shell/ash_test/ash-parsing/escape5.tests
Executable file
7
shell/ash_test/ash-parsing/escape5.tests
Executable file
@ -0,0 +1,7 @@
|
||||
v="a\nb\nc\n"
|
||||
echo "$v"
|
||||
printf "$v"
|
||||
v='a\nb\nc\n'
|
||||
echo "$v"
|
||||
printf "$v"
|
||||
echo Done
|
1
shell/ash_test/ash-parsing/group1.right
Normal file
1
shell/ash_test/ash-parsing/group1.right
Normal file
@ -0,0 +1 @@
|
||||
word} }
|
1
shell/ash_test/ash-parsing/group1.tests
Executable file
1
shell/ash_test/ash-parsing/group1.tests
Executable file
@ -0,0 +1 @@
|
||||
{ echo word} }; }
|
2
shell/ash_test/ash-parsing/group2.right
Normal file
2
shell/ash_test/ash-parsing/group2.right
Normal file
@ -0,0 +1,2 @@
|
||||
got TERM
|
||||
Done: 0
|
3
shell/ash_test/ash-parsing/group2.tests
Executable file
3
shell/ash_test/ash-parsing/group2.tests
Executable file
@ -0,0 +1,3 @@
|
||||
# Bug was in handling of "}&" without space
|
||||
{ trap "echo got TERM" TERM; sleep 2; }& sleep 1; kill $!; wait
|
||||
echo Done: $?
|
11
shell/ash_test/ash-parsing/groups_and_keywords1.right
Normal file
11
shell/ash_test/ash-parsing/groups_and_keywords1.right
Normal file
@ -0,0 +1,11 @@
|
||||
Semicolons after } can be omitted 1:
|
||||
foo
|
||||
bar
|
||||
Semicolons after } can be omitted 2:
|
||||
foo
|
||||
bar
|
||||
Semicolons after fi can be omitted:
|
||||
foo
|
||||
bar
|
||||
baz
|
||||
Done:0
|
10
shell/ash_test/ash-parsing/groups_and_keywords1.tests
Executable file
10
shell/ash_test/ash-parsing/groups_and_keywords1.tests
Executable file
@ -0,0 +1,10 @@
|
||||
echo "Semicolons after } can be omitted 1:"
|
||||
if { echo foo; } then { echo bar; } fi
|
||||
|
||||
echo "Semicolons after } can be omitted 2:"
|
||||
while { echo foo; } do { echo bar; break; } done
|
||||
|
||||
echo "Semicolons after fi can be omitted:"
|
||||
while if echo foo; then echo bar; fi do echo baz; break; done
|
||||
|
||||
echo Done:$?
|
36
shell/ash_test/ash-parsing/negate.right
Normal file
36
shell/ash_test/ash-parsing/negate.right
Normal file
@ -0,0 +1,36 @@
|
||||
! printing !
|
||||
0
|
||||
1
|
||||
1
|
||||
0
|
||||
0
|
||||
0
|
||||
!
|
||||
a
|
||||
b
|
||||
c
|
||||
! 1
|
||||
a 1
|
||||
b 1
|
||||
c 1
|
||||
! 1
|
||||
a 1
|
||||
b 1
|
||||
c 1
|
||||
0
|
||||
0
|
||||
0
|
||||
0
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
0
|
||||
0
|
||||
0
|
||||
0
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
Done
|
19
shell/ash_test/ash-parsing/negate.tests
Executable file
19
shell/ash_test/ash-parsing/negate.tests
Executable file
@ -0,0 +1,19 @@
|
||||
echo ! printing !
|
||||
! false
|
||||
echo $?
|
||||
! true
|
||||
echo $?
|
||||
if ! false; then false; echo $?; fi
|
||||
echo $?
|
||||
if ! false; then ! false; echo $?; fi
|
||||
echo $?
|
||||
PRINTF=`which printf`
|
||||
for a in ! a b c; do echo $a; done
|
||||
for a in ! a b c; do ! printf "$a "; echo $?; done
|
||||
test x"$PRINTF" = x"" && exit 1
|
||||
for a in ! a b c; do ! "$PRINTF" "$a "; echo $?; done
|
||||
for a in ! a b c; do ! printf "$a " | false; echo $?; done
|
||||
for a in ! a b c; do ! printf "$a " | true; echo $?; done
|
||||
for a in ! a b c; do ! { printf "$a " | false; }; echo $?; done
|
||||
for a in ! a b c; do ! { printf "$a " | true; }; echo $?; done
|
||||
echo Done
|
1
shell/ash_test/ash-parsing/noeol.right
Normal file
1
shell/ash_test/ash-parsing/noeol.right
Normal file
@ -0,0 +1 @@
|
||||
HELLO
|
2
shell/ash_test/ash-parsing/noeol.tests
Executable file
2
shell/ash_test/ash-parsing/noeol.tests
Executable file
@ -0,0 +1,2 @@
|
||||
# next line has no EOL!
|
||||
echo HELLO
|
1
shell/ash_test/ash-parsing/noeol2.right
Normal file
1
shell/ash_test/ash-parsing/noeol2.right
Normal file
@ -0,0 +1 @@
|
||||
1
|
7
shell/ash_test/ash-parsing/noeol2.tests
Executable file
7
shell/ash_test/ash-parsing/noeol2.tests
Executable file
@ -0,0 +1,7 @@
|
||||
# last line has no EOL!
|
||||
if true
|
||||
then
|
||||
echo 1
|
||||
else
|
||||
echo 2
|
||||
fi
|
1
shell/ash_test/ash-parsing/noeol3.right
Normal file
1
shell/ash_test/ash-parsing/noeol3.right
Normal file
@ -0,0 +1 @@
|
||||
./noeol3.tests: line 2: syntax error: unterminated quoted string
|
2
shell/ash_test/ash-parsing/noeol3.tests
Executable file
2
shell/ash_test/ash-parsing/noeol3.tests
Executable file
@ -0,0 +1,2 @@
|
||||
# last line has no EOL!
|
||||
echo "unterminated
|
3
shell/ash_test/ash-parsing/process_subst.right
Normal file
3
shell/ash_test/ash-parsing/process_subst.right
Normal file
@ -0,0 +1,3 @@
|
||||
TESTzzBEST
|
||||
TEST$(echo zz)BEST
|
||||
TEST'BEST
|
3
shell/ash_test/ash-parsing/process_subst.tests
Executable file
3
shell/ash_test/ash-parsing/process_subst.tests
Executable file
@ -0,0 +1,3 @@
|
||||
echo "TEST`echo zz;echo;echo`BEST"
|
||||
echo "TEST`echo '$(echo zz)'`BEST"
|
||||
echo "TEST`echo "'"`BEST"
|
1
shell/ash_test/ash-parsing/quote1.right
Normal file
1
shell/ash_test/ash-parsing/quote1.right
Normal file
@ -0,0 +1 @@
|
||||
'1'
|
2
shell/ash_test/ash-parsing/quote1.tests
Executable file
2
shell/ash_test/ash-parsing/quote1.tests
Executable file
@ -0,0 +1,2 @@
|
||||
a=1
|
||||
echo "'$a'"
|
1
shell/ash_test/ash-parsing/quote2.right
Normal file
1
shell/ash_test/ash-parsing/quote2.right
Normal file
@ -0,0 +1 @@
|
||||
>1
|
2
shell/ash_test/ash-parsing/quote2.tests
Executable file
2
shell/ash_test/ash-parsing/quote2.tests
Executable file
@ -0,0 +1,2 @@
|
||||
a=1
|
||||
echo ">$a"
|
12
shell/ash_test/ash-parsing/quote3.right
Normal file
12
shell/ash_test/ash-parsing/quote3.right
Normal file
@ -0,0 +1,12 @@
|
||||
Testing: in ""
|
||||
..
|
||||
Testing: in ''
|
||||
..
|
||||
Testing: in $empty
|
||||
Testing: in $empty""
|
||||
..
|
||||
Testing: in $empty''
|
||||
..
|
||||
Testing: in "$empty"
|
||||
..
|
||||
Finished
|
21
shell/ash_test/ash-parsing/quote3.tests
Executable file
21
shell/ash_test/ash-parsing/quote3.tests
Executable file
@ -0,0 +1,21 @@
|
||||
empty=''
|
||||
|
||||
echo 'Testing: in ""'
|
||||
for a in ""; do echo ".$a."; done
|
||||
|
||||
echo 'Testing: in '"''"
|
||||
for a in ''; do echo ".$a."; done
|
||||
|
||||
echo 'Testing: in $empty'
|
||||
for a in $empty; do echo ".$a."; done
|
||||
|
||||
echo 'Testing: in $empty""'
|
||||
for a in $empty""; do echo ".$a."; done
|
||||
|
||||
echo 'Testing: in $empty'"''"
|
||||
for a in $empty''; do echo ".$a."; done
|
||||
|
||||
echo 'Testing: in "$empty"'
|
||||
for a in "$empty"; do echo ".$a."; done
|
||||
|
||||
echo Finished
|
1
shell/ash_test/ash-parsing/quote4.right
Normal file
1
shell/ash_test/ash-parsing/quote4.right
Normal file
@ -0,0 +1 @@
|
||||
a b
|
2
shell/ash_test/ash-parsing/quote4.tests
Executable file
2
shell/ash_test/ash-parsing/quote4.tests
Executable file
@ -0,0 +1,2 @@
|
||||
a_b='a b'
|
||||
echo "$a_b"
|
8
shell/ash_test/ash-parsing/starquoted.right
Normal file
8
shell/ash_test/ash-parsing/starquoted.right
Normal file
@ -0,0 +1,8 @@
|
||||
.1 abc d e f.
|
||||
.1.
|
||||
.abc.
|
||||
.d e f.
|
||||
.-1 abc d e f-.
|
||||
.-1.
|
||||
.abc.
|
||||
.d e f-.
|
8
shell/ash_test/ash-parsing/starquoted.tests
Executable file
8
shell/ash_test/ash-parsing/starquoted.tests
Executable file
@ -0,0 +1,8 @@
|
||||
if test $# = 0; then
|
||||
exec "$THIS_SH" "$0" 1 abc 'd e f'
|
||||
fi
|
||||
|
||||
for a in "$*"; do echo ".$a."; done
|
||||
for a in "$@"; do echo ".$a."; done
|
||||
for a in "-$*-"; do echo ".$a."; done
|
||||
for a in "-$@-"; do echo ".$a."; done
|
8
shell/ash_test/ash-parsing/starquoted2.right
Normal file
8
shell/ash_test/ash-parsing/starquoted2.right
Normal file
@ -0,0 +1,8 @@
|
||||
Should be printed
|
||||
Would not be printed by bash
|
||||
Would not be printed by bash
|
||||
Would not be printed by bash
|
||||
Should be printed
|
||||
Empty:
|
||||
Empty:
|
||||
Empty:
|
19
shell/ash_test/ash-parsing/starquoted2.tests
Executable file
19
shell/ash_test/ash-parsing/starquoted2.tests
Executable file
@ -0,0 +1,19 @@
|
||||
if test $# != 0; then
|
||||
exec "$THIS_SH" "$0"
|
||||
fi
|
||||
|
||||
# No params!
|
||||
for a in "$*"; do echo Should be printed; done
|
||||
for a in "$@"; do echo Should not be printed; done
|
||||
# Yes, believe it or not, bash is mesmerized by "$@" and stops
|
||||
# treating "" as "this word cannot be expanded to nothing,
|
||||
# but must be at least null string". Now it can be expanded to nothing.
|
||||
for a in "$@"""; do echo Would not be printed by bash; done
|
||||
for a in """$@"; do echo Would not be printed by bash; done
|
||||
for a in """$@"''"$@"''; do echo Would not be printed by bash; done
|
||||
for a in ""; do echo Should be printed; done
|
||||
|
||||
# Bug 207: "$@" expands to nothing, and we erroneously glob "%s\n" twice:
|
||||
printf 'Empty:%s\n' "$@"
|
||||
printf "Empty:%s\n" "$@"
|
||||
printf "Empty:%s\\n" "$@"
|
@ -2,10 +2,24 @@
|
||||
|
||||
TOPDIR=`pwd`
|
||||
|
||||
test -x ash || {
|
||||
echo "No ./ash - creating a link to ../../busybox"
|
||||
ln -s ../../busybox ash
|
||||
}
|
||||
if test ! -x ash; then
|
||||
if test ! -x ../../busybox; then
|
||||
echo "Can't run tests. Put ash binary into this directory (`pwd`)"
|
||||
exit 1
|
||||
fi
|
||||
echo "No ./ash - creating a link to ../../busybox"
|
||||
ln -s ../../busybox ash
|
||||
fi
|
||||
if test ! -f .config; then
|
||||
if test ! -f ../../.config; then
|
||||
echo "Missing .config file"
|
||||
exit 1
|
||||
fi
|
||||
cp ../../.config . || exit 1
|
||||
fi
|
||||
|
||||
eval $(sed -e '/^#/d' -e '/^$/d' -e 's:^:export :' .config)
|
||||
|
||||
test -x printenv || gcc -O2 -o printenv printenv.c || exit $?
|
||||
test -x recho || gcc -O2 -o recho recho.c || exit $?
|
||||
test -x zecho || gcc -O2 -o zecho zecho.c || exit $?
|
||||
|
Loading…
Reference in New Issue
Block a user