729632210901e918933d292e7d007dfda7020d16
[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 echo "java command: $JAVA $JAVAFLAGS"
48
49 while [ -n "$1" ]
50 do
51     TEST="$1"
52     TESTBASENAME=$(basename "$TEST" .j)
53
54     TESTOUT="TESTOUT"
55     TESTEXPECT="TESTEXPECT"
56     TESTLOG="TESTLOG"
57     TESTERR="TESTERR"
58         TESTSIA="TESTSIA"
59
60         EXPECTSTATUS=0
61         CHECKICMD=0
62
63         if grep 'ERROR:' "$TEST" >/dev/null ; then
64                 EXPECTSTATUS=1
65                 EXPECTERROR=$(grep 'ERROR:.*' "$TEST" | sed 's,.*ERROR:[ \t]*,,')
66         fi
67
68         if grep 'ICMD:' "$TEST" >/dev/null ; then
69                 CHECKICMD=1
70                 EXPECTICMD=$(grep 'ICMD:.*' "$TEST" | sed 's,.*ICMD:[ \t]*,,')
71         fi
72
73         # run the test
74
75         $TIMEOUTRUN $JAVA $JAVAFLAGS "$TESTBASENAME" >"$TESTOUT" 2>"$TESTERR"
76         TESTSTATUS=$?
77
78         if [ $TESTSTATUS -ne $EXPECTSTATUS ] ; then
79                 echo $ECHOFLAGS "${FAILCOLOR}FAIL: $TESTBASENAME - expected status $EXPECTSTATUS, but got $TESTSTATUS${NOCOLOR}"
80                 EXITCODE=1
81         fi
82
83         if [ $EXPECTSTATUS -eq 0 ] ; then
84                 grep 'OUTPUT:' "$TEST" | sed 's,.*OUTPUT:[ \t]*,,' >"$TESTEXPECT"
85
86                 if diff -u "$TESTEXPECT" "$TESTOUT" ; then
87                         if [ $TESTSTATUS -eq 0 ] ; then
88                                 echo $ECHOFLAGS "${PASSCOLOR}PASS: $TESTBASENAME${NOCOLOR}"
89                         fi
90                 else
91                         echo $ECHOFLAGS "${FAILCOLOR}FAIL: $TESTBASENAME - wrong output${NOCOLOR}"
92                         EXITCODE=1
93                 fi
94
95                 if [ "$VERBOSE" -eq "1" ] ; then
96                         $JAVA $JAVAFLAGS -sia "$TESTBASENAME" >"$TESTLOG" || exit 2
97                         ./show "$TESTLOG"
98                 fi
99         else
100                 if grep "$EXPECTERROR" "$TESTERR" >/dev/null ; then
101                         echo $ECHOFLAGS "${PASSCOLOR}PASS: $TESTBASENAME - got expected error: $EXPECTERROR${NOCOLOR}"
102                 else
103                         echo $ECHOFLAGS "${FAILCOLOR}FAIL: $TESTBASENAME - did not get expected error: $EXPECTERROR${NOCOLOR}"
104                         EXITCODE=1
105                 fi
106         fi
107
108         if [ "$CHECKICMD" -ne 0 ] ; then
109                 rm -f "$TESTSIA"
110                 touch "$TESTSIA"
111                 $JAVA $JAVAFLAGS -sia "$TESTBASENAME" >"$TESTSIA" 2>/dev/null
112                 cat "$TESTSIA" | sed -n '/^'"$TESTBASENAME"'\.main/,$p' | sed '/^=====.*flags: -1/,$d' | grep "$EXPECTICMD"
113         fi
114
115     shift
116 done
117
118 rm -f "$TESTOUT" "$TESTEXPECT" "$TESTLOG" "$TESTERR"
119
120 exit $EXITCODE
121