#! /bin/sh # Copyright (C) 2005-2015, 2018-2020 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . SHELL=/bin/sh export SHELL me=$(basename "$1" .test) medir=$(dirname "$1" | sed -e 's,.*examples/,,') # Number of the current test. number=1 # Exit status of this script. exit=true # top_builddir. cwd=$(pwd) # The exercised program. abs_medir=$cwd/examples/$medir if test -x "$abs_medir/$me"; then prog () { "$abs_medir/$me" "$@" } elif test -f "$abs_medir/$me.class"; then prog () { "$SHELL" "$cwd/javaexec.sh" -cp "$abs_medir" "$me" "$@" } else echo "$me: ERROR: cannot find program to exercise in:" echo "$me: ERROR: $cwd/examples/$medir/$me" exit 1 fi # cleanup # ------- cleanup () { status=$? if test -z "$DEBUG"; then cd "$cwd" rm -rf $$.dir fi exit $status } trap cleanup 0 1 2 13 15 mkdir $$.dir cd $$.dir # run [-noerr] EXPECTED-EXIT-STATUS EXPECTED-OUTPUT [PARSER-OPTIONS] # ------------------------------------------------------------------ # -noerr: ignore stderr, otherwise merge it into effective output. run () { noerr=false case $1 in (-noerr) noerr=true; shift;; esac # Expected exit status. sta_exp=$1 shift # Expected output. out_exp=$1 shift # Effective exit status. sta_eff=0 prog "$@" - out_eff 2>err_eff || sta_eff=$? # Combine effective output and error streams. out_eff=$(cat out_eff && $noerr || sed -e 's/^/err: /g' err_eff) if test $sta_eff -eq $sta_exp; then if test "$out_eff" = "$out_exp"; then echo "$me: PASS: $number" else echo "$me: FAIL: $number" echo "$me: input:" sed -e 's/^/ /' input echo "$me: expected output:" echo "$out_exp" | sed -e 's/^/ /' echo "$me: effective output:" echo "$out_eff" | sed -e 's/^/ /' exit=false fi else echo "$me: FAIL: $number (expected status: $sta_exp, effective: $sta_eff)" cat err_eff exit=false fi number=$(expr $number + 1) } # We have cd'd one level deeper. case $1 in /*) . "$1";; *) . "../$1";; esac $exit