* tests/regression/jasmin/runtest: Added timeout capability.
[cacao.git] / tests / regression / jasmin / runtest
1 #!/bin/bash
2
3 VERBOSE=0
4 EXITCODE=0
5 COLOR=0
6 PASSCOLOR=''
7 FAILCOLOR=''
8 NOCOLOR=''
9 ECHOFLAGS=''
10
11 if [ -z "$JAVA" ] ; then
12         JAVA=../../../src/cacao/cacao
13 fi
14
15 if [ -z "$TIMEOUT" ] ; then
16         TIMEOUT=20
17 fi
18
19 if [ -n "$TIMEOUTPROG" ] ; then
20         if [ -x "$TIMEOUTPROG" ] ; then
21                 echo "$0: using timeout program: $TIMEOUTPROG"
22                 echo "$0: timeout value [s]    : $TIMEOUT"
23                 TIMEOUTRUN="$TIMEOUTPROG $TIMEOUT"
24         else
25                 echo >&2 "$0: warning: timeout program not executable: $TIMEOUTPROG"
26         fi
27 fi
28
29 if [ -z "$TIMEOUTRUN" ] ; then
30         echo >&2 "$0: warning: running without timeout"
31 fi
32
33 if [ "$1" = "--verbose" ] ; then
34         shift
35         VERBOSE=1
36 fi
37
38 if [ "$1" = "--color" ] ; then
39         shift
40         COLOR=1
41         PASSCOLOR='\033[1;32m'
42         FAILCOLOR='\033[1;31m'
43         NOCOLOR='\033[0m'
44         ECHOFLAGS='-e'
45 fi
46
47 if [ -z "$JASMIN_JAR" ] ; then
48         JASMIN_JAR=/usr/share/java/jasmin-sable.jar
49 fi
50
51 if [ ! -r "$JASMIN_JAR" ] ; then
52         echo >&2 "$0: warning: jasmin .jar is not available at $JASMIN_JAR"
53         exit 0
54 fi
55
56 JASMIN="$JAVA $JAVAFLAGS -cp $JASMIN_JAR jasmin.Main"
57
58 echo "java command: $JAVA $JAVAFLAGS"
59 echo "jasmin command: $JASMIN"
60
61 while [ -n "$1" ]
62 do
63     TEST="$1"
64     TESTBASENAME=$(basename "$TEST" .j)
65
66     TESTOUT="TESTOUT"
67     TESTEXPECT="TESTEXPECT"
68     TESTLOG="TESTLOG"
69     TESTERR="TESTERR"
70
71         EXPECTSTATUS=0
72
73         # compile the test
74
75     $JASMIN "$TEST" || exit 2
76
77         if grep 'ERROR:' "$TEST" >/dev/null ; then
78                 EXPECTSTATUS=1
79                 EXPECTERROR=$(grep 'ERROR:.*' "$TEST" | sed 's,.*ERROR:[ \t]*,,')
80         fi
81
82         # run the test
83
84     $TIMEOUTRUN $JAVA $JAVAFLAGS "$TESTBASENAME" >"$TESTOUT" 2>"$TESTERR"
85         TESTSTATUS=$?
86
87         if [ $TESTSTATUS -ne $EXPECTSTATUS ] ; then
88                 echo $ECHOFLAGS "${FAILCOLOR}FAIL: $TESTBASENAME - expected status $EXPECTSTATUS, but got $TESTSTATUS${NOCOLOR}"
89                 EXITCODE=1
90         fi
91
92         if [ $EXPECTSTATUS -eq 0 ] ; then
93                 grep 'OUTPUT:' "$TEST" | sed 's,.*OUTPUT:[ \t]*,,' >"$TESTEXPECT"
94
95                 if diff -u "$TESTEXPECT" "$TESTOUT" ; then
96                         if [ $TESTSTATUS -eq 0 ] ; then
97                                 echo $ECHOFLAGS "${PASSCOLOR}PASS: $TESTBASENAME${NOCOLOR}"
98                         fi
99                 else
100                         echo $ECHOFLAGS "${FAILCOLOR}FAIL: $TESTBASENAME - wrong output${NOCOLOR}"
101                         EXITCODE=1
102                 fi
103
104                 if [ "$VERBOSE" -eq "1" ] ; then
105                         $JAVA $JAVAFLAGS -sia "$TESTBASENAME" >"$TESTLOG" || exit 2
106                         ./show "$TESTLOG"
107                 fi
108         else
109                 if grep "$EXPECTERROR" "$TESTERR" >/dev/null ; then
110                         echo $ECHOFLAGS "${PASSCOLOR}PASS: $TESTBASENAME - got expected error: $EXPECTERROR${NOCOLOR}"
111                 else
112                         echo $ECHOFLAGS "${FAILCOLOR}FAIL: $TESTBASENAME - did not get expected error: $EXPECTERROR${NOCOLOR}"
113                         EXITCODE=1
114                 fi
115         fi
116
117     shift
118 done
119
120 rm -f "$TESTOUT" "$TESTEXPECT" "$TESTLOG" "$TESTERR"
121
122 exit $EXITCODE
123