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`
|
TOPDIR=`pwd`
|
||||||
|
|
||||||
test -x 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"
|
echo "No ./ash - creating a link to ../../busybox"
|
||||||
ln -s ../../busybox ash
|
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 printenv || gcc -O2 -o printenv printenv.c || exit $?
|
||||||
test -x recho || gcc -O2 -o recho recho.c || exit $?
|
test -x recho || gcc -O2 -o recho recho.c || exit $?
|
||||||
test -x zecho || gcc -O2 -o zecho zecho.c || exit $?
|
test -x zecho || gcc -O2 -o zecho zecho.c || exit $?
|
||||||
|
Loading…
Reference in New Issue
Block a user