| #! /bin/sh |
| |
| # Copyright (C) 2005-2015, 2018-2019 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 <http://www.gnu.org/licenses/>. |
| |
| 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. |
| for p in "$cwd/examples/$medir/$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 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 "$@" - <input >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 |