* Removed all Id tags.
[cacao.git] / tests / regression / jasmin / runtest
old mode 100755 (executable)
new mode 100644 (file)
index fddac20..438d321
@@ -1,19 +1,62 @@
-#!/bin/sh
+#!/bin/bash
 
 VERBOSE=0
 EXITCODE=0
+COLOR=0
+PASSCOLOR=''
+FAILCOLOR=''
+NOCOLOR=''
+ECHOFLAGS=''
 
 if [ -z "$JAVA" ] ; then
        JAVA=../../../src/cacao/cacao
 fi
 
+if [ -z "$TIMEOUT" ] ; then
+       TIMEOUT=20
+fi
+
+if [ -n "$TIMEOUTPROG" ] ; then
+       if [ -x "$TIMEOUTPROG" ] ; then
+               echo "$0: using timeout program: $TIMEOUTPROG"
+               echo "$0: timeout value [s]    : $TIMEOUT"
+               TIMEOUTRUN="$TIMEOUTPROG $TIMEOUT"
+       else
+               echo >&2 "$0: warning: timeout program not executable: $TIMEOUTPROG"
+       fi
+fi
+
+if [ -z "$TIMEOUTRUN" ] ; then
+       echo >&2 "$0: warning: running without timeout"
+fi
+
 if [ "$1" = "--verbose" ] ; then
        shift
        VERBOSE=1
 fi
 
-JASMIN_JAR=/usr/share/java/jasmin-sable.jar
-JASMIN="$JAVA -cp $JASMIN_JAR jasmin.Main"
+if [ "$1" = "--color" ] ; then
+       shift
+       COLOR=1
+       PASSCOLOR='\033[1;32m'
+       FAILCOLOR='\033[1;31m'
+       NOCOLOR='\033[0m'
+       ECHOFLAGS='-e'
+fi
+
+if [ -z "$JASMIN_JAR" ] ; then
+       JASMIN_JAR=/usr/share/java/jasmin-sable.jar
+fi
+
+if [ ! -r "$JASMIN_JAR" ] ; then
+       echo >&2 "$0: warning: jasmin .jar is not available at $JASMIN_JAR"
+       exit 0
+fi
+
+JASMIN="$JAVA $JAVAFLAGS -cp $JASMIN_JAR jasmin.Main"
+
+echo "java command: $JAVA $JAVAFLAGS"
+echo "jasmin command: $JASMIN"
 
 while [ -n "$1" ]
 do
@@ -24,8 +67,10 @@ do
     TESTEXPECT="TESTEXPECT"
     TESTLOG="TESTLOG"
     TESTERR="TESTERR"
+       TESTSIA="TESTSIA"
 
        EXPECTSTATUS=0
+       CHECKICMD=0
 
        # compile the test
 
@@ -33,42 +78,56 @@ do
 
        if grep 'ERROR:' "$TEST" >/dev/null ; then
                EXPECTSTATUS=1
-               EXPECTERROR=$(grep -o 'ERROR:.*' "$TEST" | sed 's,ERROR:\s*,,')
+               EXPECTERROR=$(grep 'ERROR:.*' "$TEST" | sed 's,.*ERROR:[ \t]*,,')
+       fi
+
+       if grep 'ICMD:' "$TEST" >/dev/null ; then
+               CHECKICMD=1
+               EXPECTICMD=$(grep 'ICMD:.*' "$TEST" | sed 's,.*ICMD:[ \t]*,,')
        fi
 
        # run the test
 
-    $JAVA "$TESTBASENAME" >"$TESTOUT" 2>"$TESTERR"
+    $TIMEOUTRUN $JAVA $JAVAFLAGS "$TESTBASENAME" >"$TESTOUT" 2>"$TESTERR"
        TESTSTATUS=$?
 
        if [ $TESTSTATUS -ne $EXPECTSTATUS ] ; then
-               echo "FAIL: $TEST - expected status $EXPECTSTATUS, but got $TESTSTATUS"
+               echo $ECHOFLAGS "${FAILCOLOR}FAIL: $TESTBASENAME - expected status $EXPECTSTATUS, but got $TESTSTATUS${NOCOLOR}"
                EXITCODE=1
        fi
 
        if [ $EXPECTSTATUS -eq 0 ] ; then
-               grep 'OUTPUT:' "$TEST" | sed 's,.*OUTPUT:\s*,,' >"$TESTEXPECT"
+               grep 'OUTPUT:' "$TEST" | sed 's,.*OUTPUT:[ \t]*,,' >"$TESTEXPECT"
 
                if diff -u "$TESTEXPECT" "$TESTOUT" ; then
-                       echo "PASS: $TEST"
+                       if [ $TESTSTATUS -eq 0 ] ; then
+                               echo $ECHOFLAGS "${PASSCOLOR}PASS: $TESTBASENAME${NOCOLOR}"
+                       fi
                else
-                       echo "FAIL: $TEST"
+                       echo $ECHOFLAGS "${FAILCOLOR}FAIL: $TESTBASENAME - wrong output${NOCOLOR}"
                        EXITCODE=1
                fi
 
                if [ "$VERBOSE" -eq "1" ] ; then
-               $JAVA -sia "$TESTBASENAME" >"$TESTLOG" || exit 2
-               ./show "$TESTLOG"
+                       $JAVA $JAVAFLAGS -sia "$TESTBASENAME" >"$TESTLOG" || exit 2
+                       ./show "$TESTLOG"
                fi
        else
                if grep "$EXPECTERROR" "$TESTERR" >/dev/null ; then
-                       echo "PASS: $TEST - got expected error: $EXPECTERROR"
+                       echo $ECHOFLAGS "${PASSCOLOR}PASS: $TESTBASENAME - got expected error: $EXPECTERROR${NOCOLOR}"
                else
-                       echo "FAIL: $TEST - did not get expected error: $EXPECTERROR"
+                       echo $ECHOFLAGS "${FAILCOLOR}FAIL: $TESTBASENAME - did not get expected error: $EXPECTERROR${NOCOLOR}"
                        EXITCODE=1
                fi
        fi
 
+       if [ "$CHECKICMD" -ne 0 ] ; then
+               rm -f "$TESTSIA"
+               touch "$TESTSIA"
+               $JAVA $JAVAFLAGS -sia "$TESTBASENAME" >"$TESTSIA" 2>/dev/null
+               cat "$TESTSIA" | sed -n '/^'"$TESTBASENAME"'\.main/,$p' | sed '/^=====.*flags: -1/,$d' | grep "$EXPECTICMD"
+       fi
+
     shift
 done