#!/bin/sh

set -e

trap "rm .testout .diffout 2>/dev/null" \
    EXIT ABRT BUS FPE HUP ILL QUIT SEGV TERM

if [ $# -ge 1 ] ; then
    tests=$@
else
    tests=`ls -1 tests/system/*.alk | sort`
fi

rv=0

for tst in $tests ; do
    tst_base=`basename $tst .alk`
    tst_in=tests/system/$tst_base.in
    tst_out=tests/system/$tst_base.out
    tst_err=tests/system/$tst_base.fails
    if [ ! -r $tst_in ] ; then
        tst_in=/dev/null
    fi
    if [ ! -r $tst_out ] && [ ! -r $tst_err ] ; then
        echo 1>&2 "neither $tst_out nor $tst_err exists"
        exit 1
    fi
    if [ -r $tst_err ]; then
        echo -n "$0: Test case $tst_base (expecting failure)..."
    else
        echo -n "$0: Test case $tst_base (expecting success)..."
    fi
    if $JAVA alkeis.Compiler $tst < $tst_in > .testout ; then
        if diff -au $tst_out .testout > .diffout ; then
            echo "ok."
        else
            echo "FAILED."
            cat .diffout
            rv=1
        fi
    else
        if [ -r $tst_err ] ; then
            echo "ok."
        else
            echo "FAILED."
            rv=1
        fi
    fi
done

exit $rv
