Files
pv/autoconf/scripts/run-test.sh
T

74 lines
1.8 KiB
Bash
Executable File

#!/bin/sh
#
# Run a test. Parameters are program name and source directory; if
# additional parameters are given, they are the tests to run, otherwise all
# tests are run.
#
# Test scripts should exit 0 if the test passed.
#
# If a test exits with status 2, it is listed as being skipped.
#
# Anything output by a test script on stdout or stderr is captured and shown
# after the "OK"/"FAILED"/"skipped" status.
#
PROG="$1"
SRCDIR="$2"
shift
shift
TESTS="$*"
# Temporary working files
#
TMP1=$(mktemp 2>/dev/null) || TMP1=.tmp1
TMP2=$(mktemp 2>/dev/null) || TMP2=.tmp2
TMP3=$(mktemp 2>/dev/null) || TMP3=.tmp3
TMP4=$(mktemp 2>/dev/null) || TMP4=.tmp4
trap "rm -f ${TMP1} ${TMP2} ${TMP3} ${TMP4}" EXIT
export PROG TMP1 TMP2 TMP3 TMP4 # variables used by test scripts
FAIL=0
test -n "$TESTS" || TESTS=$(ls "$SRCDIR/tests" | sort -n)
MAXNAMESIZE=$(echo "$TESTS" | tr ' ' '\n' | sed 's,^.*/,,;s/-/ - /' | awk 'BEGIN{m=0} {n=length($0);if (n>m) m=n} END{print m}')
test -n "$MAXNAMESIZE" || MAXNAMESIZE=1
test "$MAXNAMESIZE" -lt 10 && MAXNAMESIZE=10
test "$MAXNAMESIZE" -gt 60 && MAXNAMESIZE=60
for SCRIPT in $TESTS; do
test -f "$SCRIPT" || SCRIPT="$SRCDIR/tests/$SCRIPT"
test -f "$SCRIPT" || SCRIPT=$(ls "$SRCDIR/tests/$SCRIPT"*)
test -f "$SCRIPT" || continue
printf "%-${MAXNAMESIZE}.${MAXNAMESIZE}s " "$(echo "${SCRIPT}" | sed 's,^.*/,,;s/-/ - /')"
TESTEXITSTATUS=0
TESTOUTPUT=""
TESTOUTPUT=$(sh -e "$SCRIPT" 2>&1)
TESTEXITSTATUS=$?
TESTRESULT=""
if test $TESTEXITSTATUS -eq 0; then
TESTRESULT="OK"
elif test $TESTEXITSTATUS -eq 2; then
TESTRESULT="skipped"
else
TESTRESULT="FAILED"
FAIL=1
fi
test -n "${TESTOUTPUT}" && TESTOUTPUT=" - ${TESTOUTPUT}"
printf "%s%s\n" "${TESTRESULT}" "${TESTOUTPUT}"
done
rm -f "$TMP1" "$TMP2" "$TMP3" "$TMP4"
trap "" EXIT
exit $FAIL
# EOF