ash: fix arithmetic closing )) split by backslash-newline
[oweals/busybox.git] / shell / hush_test / run-all
1 #!/bin/sh
2
3 unset LANG LANGUAGE
4 unset LC_COLLATE
5 unset LC_CTYPE
6 unset LC_MONETARY
7 unset LC_MESSAGES
8 unset LC_NUMERIC
9 unset LC_TIME
10 unset LC_ALL
11
12 if test ! -x hush; then
13         if test ! -x ../../busybox; then
14                 echo "Can't run tests. Put hush binary into this directory (`pwd`)"
15                 exit 1
16         fi
17         echo "No ./hush - creating a link to ../../busybox"
18         ln -s ../../busybox hush
19 fi
20 if test ! -f .config; then
21         if test ! -f ../../.config; then
22                 echo "Missing .config file"
23                 exit 1
24         fi
25         cp ../../.config . || exit 1
26 fi
27
28 eval $(sed -e '/^#/d' -e '/^$/d' -e 's:^:export :' .config)
29
30 PATH="`pwd`:$PATH" # for hush and recho/zecho/printenv
31 export PATH
32
33 THIS_SH="`pwd`/hush"
34 export THIS_SH
35
36 do_test()
37 {
38         test -d "$1" || return 0
39         d=${d%/}
40 #       echo Running tests in directory "$1"
41         (
42         tret=0
43         cd "$1" || { echo "cannot cd $1!"; exit 1; }
44         for x in run-*; do
45                 test -f "$x" || continue
46                 case "$x" in
47                         "$0"|run-minimal|run-gprof) ;;
48                         *.orig|*~) ;;
49                         #*) echo $x ; sh $x ;;
50                         *)
51                         echo -n "$1/$x:"
52                         sh "$x" >"../$1-$x.fail" 2>&1 && \
53                         { { echo " ok"; rm "../$1-$x.fail"; } || echo " fail"; }
54                         ;;
55                 esac
56         done
57         # Many bash run-XXX scripts just do this,
58         # no point in duplication it all over the place
59         for x in *.tests; do
60         test -x "$x" || continue
61         name="${x%%.tests}"
62         test -f "$name.right" || continue
63 #       echo Running test: "$x"
64         echo -n "$1/$x:"
65         (
66                 "$THIS_SH" "./$x" >"$name.xx" 2>&1
67                 r=$?
68                 # filter C library differences
69                 sed -i \
70                         -e "/: invalid option /s:'::g" \
71                         "$name.xx"
72                 test $r -eq 77 && rm -f "../$1-$x.fail" && exit 77
73                 diff -u "$name.xx" "$name.right" >"../$1-$x.fail" && rm -f "$name.xx" "../$1-$x.fail"
74         )
75         case $? in
76                 0)  echo " ok";;
77                 77) echo " skip (feature disabled)";;
78                 *)  echo " fail"; tret=1;;
79         esac
80         done
81         exit ${tret}
82         )
83 }
84
85 # Main part of this script
86 # Usage: run-all [directories]
87
88 ret=0
89
90 if [ $# -lt 1 ]; then
91         # All sub directories
92         modules=`ls -d hush-*`
93
94         for module in $modules; do
95         do_test $module || ret=1
96         done
97 else
98         while [ $# -ge 1 ]; do
99         if [ -d $1 ]; then
100                 do_test $1 || ret=1
101         fi
102         shift
103         done
104 fi
105
106 exit ${ret}