#! /bin/sh # Copyright (C) 2005-2015, 2018 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 . me=$(basename "$1" .test) medir=$(basename "$(dirname "$1")") # Number of the current test. number=1 # Exit status of this script. exit=true # top_builddir. cwd=$(pwd) # The exercised program. for p in "$cwd/examples/$medir/$me" "$cwd/examples/$me" do if test -x "$p"; then prog=$p break elif test -f "$p.class"; then pwd prog="$SHELL $cwd/javaexec.sh -cp $(dirname $p) $(basename $p)" break fi done if test x"$prog" = x; then echo "$me: ERROR: cannot find program to exercise" 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 (expected output: $out_exp, effective: $out_eff)" cat err_eff 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