74 lines
1.8 KiB
Bash
Executable File
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
|