mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 20:33:03 +00:00
macOS' version of readline does not repeat stdin on stdout in non-interactive mode, contrary to the current version of GNU readline. * examples/test: Add support for strip_prompt. * examples/c/bistromathic/bistromathic.test (strip_prompt): Set it when needed. Early exit when needed.
129 lines
2.9 KiB
Bash
Executable File
129 lines
2.9 KiB
Bash
Executable File
#! /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 <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)
|
|
|
|
# Whether to strip '> ...' lines from the expected output.
|
|
# See bistromathic.test.
|
|
strip_prompt=false
|
|
|
|
# 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.
|
|
if $strip_prompt; then
|
|
out_exp=$(echo "$1" | sed -e 's/^> err:/err:/;/^> /d')
|
|
else
|
|
out_exp=$1
|
|
fi
|
|
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"
|
|
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
|