--- /dev/null
+# TODO: hush doesn't know ':' null command
+
+while :; do exit; done
+++ /dev/null
-#!/bin/sh
-# For future msh testsuite:
-# Testcase for http://bugs.busybox.net/view.php?id=846
-
-n=0
-while :
-do
- echo A
- while :
- do
- echo B
- break
- done
- echo iteration
- [ $n = 1 ] && break
- echo C
- n=`expr $n + 1`
-done
-echo D
-
-# output should be:
-# A
-# B
-# iteration
-# C
-# A
-# B
-# iteration
-# D
--- /dev/null
+hush: syntax error: unterminated "
--- /dev/null
+# last line has no EOL!
+echo "unterminated
\ No newline at end of file
--- /dev/null
+TESTzzBEST
+TEST$(echo zz)BEST
+TEST'BEST
--- /dev/null
+echo "TEST`echo zz;echo;echo`BEST"
+echo "TEST`echo '$(echo zz)'`BEST"
+echo "TEST`echo "'"`BEST"
--- /dev/null
+read
+cat
+echo "REPLY=$REPLY"
+REPLY=exec <read.tests
--- /dev/null
+exec <read.tests
+read
+cat
+echo "REPLY=$REPLY"
--- /dev/null
+./shift.tests abc d e
+./shift.tests d e 123
+./shift.tests d e 123
+./shift.tests
+./shift.tests
+./shift.tests
--- /dev/null
+if test $# = 0; then
+ exec "$THIS_SH" $0 abc "d e" 123
+fi
+echo $0 $1 $2
+shift
+echo $0 $1 $2
+shift 999
+echo $0 $1 $2
+shift 2
+echo $0 $1 $2
+shift 2
+echo $0 $1 $2
+shift
+echo $0 $1 $2
--- /dev/null
+.1 abc d e f.
+.1.
+.abc.
+.d e f.
+.-1 abc d e f-.
+.-1.
+.abc.
+.d e f-.
--- /dev/null
+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
--- /dev/null
+shown
+hush: syntax error: unterminated '
--- /dev/null
+echo shown
+echo test `echo 'aa`
+echo not shown
--- /dev/null
+. .
+.abc d e.
+.abc d e.
+.abc d e.
+.abc d e.
--- /dev/null
+if test $# = 0; then
+ exec "$THIS_SH" "$0" abc "d e"
+fi
+
+space=' '
+echo .$space.
+
+a=$*
+echo .$a.
+a=$@
+echo .$a.
+a="$*"
+echo .$a.
+a="$@"
+echo .$a.
--- /dev/null
+TEST1
+TEST2
+TEST3
--- /dev/null
+if test $# = 0; then
+ exec "$THIS_SH" "$0" abc "d e"
+fi
+
+echo TEST1 >"$1.out"
+echo TEST2 >"$2.out"
+# bash says: "$@.out": ambiguous redirect
+# ash handles it as if it is '$*' - we do the same
+echo TEST3 >"$@.out"
+
+cat abc.out "d e.out" "abc d e.out"
+
+rm abc.out "d e.out" "abc d e.out"
--- /dev/null
+A
+B
+iteration
+C
+A
+B
+iteration
+D
--- /dev/null
+# Testcase for http://bugs.busybox.net/view.php?id=846
+
+n=0
+while :
+do
+ echo A
+ while :
+ do
+ echo B
+ break
+ done
+ echo iteration
+ [ $n = 1 ] && break
+ echo C
+ n=`expr $n + 1`
+done
+echo D
--- /dev/null
+true
+false; echo `echo $?`
+true
+{ false; echo `echo $?`; }
--- /dev/null
+if test $# = 0; then
+ exec "$THIS_SH" "$0" arg
+fi
+echo OK
--- /dev/null
+# next line has no EOL!
+echo HELLO
\ No newline at end of file
--- /dev/null
+# last line has no EOL!
+if true
+then
+ echo 1
+else
+ echo 2
+fi
\ No newline at end of file
--- /dev/null
+a=1
+echo "'$a'"
--- /dev/null
+a=1
+echo ">$a"
--- /dev/null
+Testing: in $empty""
+..
+Finished
--- /dev/null
+if test $# = 0; then
+ exec "$THIS_SH" quote3.tests abc "d e"
+fi
+
+echo 'Testing: in $empty""'
+empty=''
+for a in $empty""; do echo ".$a."; done
+echo Finished
--- /dev/null
+a_b='a b'
+echo "$a_b"
--- /dev/null
+.1.
+.abc.
+.d.
+.e.
+.f.
+.1 abc d e f.
--- /dev/null
+if test $# = 0; then
+ exec "$THIS_SH" star.tests 1 abc 'd e f'
+fi
+# 'd e f' should be split into 3 separate args:
+for a in $*; do echo ".$a."; done
+
+# must produce .1 abc d e f.
+for a in "$*"; do echo ".$a."; done
--- /dev/null
+http://busybox.net
+http://busybox.net_abc
+1
+1
--- /dev/null
+URL=http://busybox.net
+
+echo $URL
+echo ${URL}_abc
+
+true
+false; echo $?
+true
+{ false; echo $?; }
--- /dev/null
+Testing: in x y z
+.x.
+.y.
+.z.
+Testing: in u $empty v
+.u.
+.v.
+Testing: in u " $empty" v
+.u.
+. .
+.v.
+Testing: in u $empty $empty$a v
+.u.
+.a.
+.v.
+Testing: in $a_b
+.a.
+.b.
+Testing: in $*
+.abc.
+.d.
+.e.
+Testing: in $@
+.abc.
+.d.
+.e.
+Testing: in -$*-
+.-abc.
+.d.
+.e-.
+Testing: in -$@-
+.-abc.
+.d.
+.e-.
+Testing: in $a_b -$a_b-
+.a.
+.b.
+.-a.
+.b-.
+Finished
--- /dev/null
+if test $# = 0; then
+ exec "$THIS_SH" var_subst_in_for.tests abc "d e"
+fi
+
+echo 'Testing: in x y z'
+for a in x y z; do echo ".$a."; done
+
+echo 'Testing: in u $empty v'
+empty=''
+for a in u $empty v; do echo ".$a."; done
+
+echo 'Testing: in u " $empty" v'
+empty=''
+for a in u " $empty" v; do echo ".$a."; done
+
+echo 'Testing: in u $empty $empty$a v'
+a='a'
+for a in u $empty $empty$a v; do echo ".$a."; done
+
+echo 'Testing: in $a_b'
+a_b='a b'
+for a in $a_b; do echo ".$a."; done
+
+echo 'Testing: in $*'
+for a in $*; do echo ".$a."; done
+
+echo 'Testing: in $@'
+for a in $@; do echo ".$a."; done
+
+echo 'Testing: in -$*-'
+for a in -$*-; do echo ".$a."; done
+
+echo 'Testing: in -$@-'
+for a in -$@-; do echo ".$a."; done
+
+echo 'Testing: in $a_b -$a_b-'
+a_b='a b'
+for a in $a_b -$a_b-; do echo ".$a."; done
+
+echo Finished
--- /dev/null
+#!/bin/sh
+
+test -x msh || {
+ echo "No ./msh?! Perhaps you want to run 'ln -s ../../busybox msh'"
+ exit
+}
+
+PATH="$PWD:$PATH" # for msh
+export PATH
+
+THIS_SH="$PWD/msh"
+export THIS_SH
+
+do_test()
+{
+ test -d "$1" || return 0
+# echo Running tests in directory "$1"
+ (
+ cd "$1" || { echo "cannot cd $1!"; exit 1; }
+ for x in run-*; do
+ test -f "$x" || continue
+ case "$x" in
+ "$0"|run-minimal|run-gprof) ;;
+ *.orig|*~) ;;
+ #*) echo $x ; sh $x ;;
+ *)
+ sh "$x" >"../$1-$x.fail" 2>&1 && \
+ { echo "$1/$x: ok"; rm "../$1-$x.fail"; } || echo "$1/$x: fail";
+ ;;
+ esac
+ done
+ # Many bash run-XXX scripts just do this,
+ # no point in duplication it all over the place
+ for x in *.tests; do
+ test -x "$x" || continue
+ name="${x%%.tests}"
+ test -f "$name.right" || continue
+# echo Running test: "$name.right"
+ {
+ "$THIS_SH" "./$x" >"$name.xx" 2>&1
+ diff -u "$name.xx" "$name.right" >"../$1-$x.fail" && rm -f "$name.xx" "../$1-$x.fail"
+ } && echo "$1/$x: ok" || echo "$1/$x: fail"
+ done
+ )
+}
+
+# Main part of this script
+# Usage: run-all [directories]
+
+if [ $# -lt 1 ]; then
+ # All sub directories
+ modules=`ls -d msh-*`
+
+ for module in $modules; do
+ do_test $module
+ done
+else
+ while [ $# -ge 1 ]; do
+ if [ -d $1 ]; then
+ do_test $1
+ fi
+ shift
+ done
+fi