-#!/bin/sh
+#!/bin/bash
VERBOSE=0
EXITCODE=0
+COLOR=0
+PASSCOLOR=''
+FAILCOLOR=''
+NOCOLOR=''
+ECHOFLAGS=''
+
+if [ -z "$JAVACMD" ] ; then
+ JAVACMD=../../../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
+if [ "$1" = "--color" ] ; then
+ shift
+ COLOR=1
+ PASSCOLOR='\033[1;32m'
+ FAILCOLOR='\033[1;31m'
+ NOCOLOR='\033[0m'
+ ECHOFLAGS='-e'
+fi
+
+echo "java command: $JAVACMD $JAVAFLAGS"
+
while [ -n "$1" ]
do
TEST="$1"
TESTOUT="TESTOUT"
TESTEXPECT="TESTEXPECT"
TESTLOG="TESTLOG"
+ TESTERR="TESTERR"
+ TESTSIA="TESTSIA"
+
+ EXPECTSTATUS=0
+ CHECKICMD=0
+
+ if grep 'ERROR:' "$TEST" >/dev/null ; then
+ EXPECTSTATUS=1
+ 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
- jasmin "$TEST" || exit 2
- cacao "$TESTBASENAME" >"$TESTOUT" || exit 2
+ # run the test
- grep 'OUTPUT:' "$TEST" | sed 's,.*OUTPUT:\s*,,' >"$TESTEXPECT"
+ if [ -z "$TIMEOUTRUN" ] ; then
+ eval $JAVACMD $JAVAFLAGS "$TESTBASENAME" >"$TESTOUT" 2>"$TESTERR"
+ else
+ $TIMEOUTRUN $JAVACMD $JAVAFLAGS "$TESTBASENAME" >"$TESTOUT" 2>"$TESTERR"
+ fi
+ TESTSTATUS=$?
- if diff -u "$TESTEXPECT" "$TESTOUT" ; then
- echo "PASS: $TEST"
- else
- echo "FAIL: $TEST"
- EXITCODE=1
- fi
+ if [ $TESTSTATUS -ne $EXPECTSTATUS ] ; then
+ echo $ECHOFLAGS "${FAILCOLOR}FAIL: $TESTBASENAME - expected status $EXPECTSTATUS, but got $TESTSTATUS${NOCOLOR}"
+ EXITCODE=1
+ fi
- if [ "$VERBOSE" -eq "1" ] ; then
- cacao -sia "$TESTBASENAME" >"$TESTLOG" || exit 2
- ./show "$TESTLOG"
- fi
+ if [ $EXPECTSTATUS -eq 0 ] ; then
+ grep 'OUTPUT:' "$TEST" | sed 's,.*OUTPUT:[ \t]*,,' >"$TESTEXPECT"
+
+ if diff -u "$TESTEXPECT" "$TESTOUT" ; then
+ if [ $TESTSTATUS -eq 0 ] ; then
+ echo $ECHOFLAGS "${PASSCOLOR}PASS: $TESTBASENAME${NOCOLOR}"
+ fi
+ else
+ echo $ECHOFLAGS "${FAILCOLOR}FAIL: $TESTBASENAME - wrong output${NOCOLOR}"
+ EXITCODE=1
+ fi
+
+ if [ "$VERBOSE" -eq "1" ] ; then
+ eval $JAVACMD $JAVAFLAGS -sia "$TESTBASENAME" >"$TESTLOG" || exit 2
+ ./show "$TESTLOG"
+ fi
+ else
+ if grep "$EXPECTERROR" "$TESTERR" >/dev/null ; then
+ echo $ECHOFLAGS "${PASSCOLOR}PASS: $TESTBASENAME - got expected error: $EXPECTERROR${NOCOLOR}"
+ else
+ 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"
+ eval $JAVACMD $JAVAFLAGS -sia "$TESTBASENAME" >"$TESTSIA" 2>/dev/null
+ cat "$TESTSIA" | sed -n '/^'"$TESTBASENAME"'\.main/,$p' | sed '/^=====.*flags: -1/,$d' | grep "$EXPECTICMD"
+ fi
shift
done
-#rm -f "$TESTOUT" "$TESTEXPECT" "$TESTLOG"
+rm -f "$TESTOUT" "$TESTEXPECT" "$TESTLOG" "$TESTERR"
exit $EXITCODE
+