#!/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" TESTBASENAME=$(basename "$TEST" .j) 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 # run the test if [ -z "$TIMEOUTRUN" ] ; then eval $JAVACMD $JAVAFLAGS "$TESTBASENAME" >"$TESTOUT" 2>"$TESTERR" else $TIMEOUTRUN $JAVACMD $JAVAFLAGS "$TESTBASENAME" >"$TESTOUT" 2>"$TESTERR" fi TESTSTATUS=$? if [ $TESTSTATUS -ne $EXPECTSTATUS ] ; then 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:[ \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" "$TESTERR" exit $EXITCODE