Format output with printf, allow test scripts to write output to be displayed, and allow test scripts to be skipped.

This commit is contained in:
Andrew Wood
2023-07-22 20:46:35 +01:00
parent 5f6f418cfd
commit 264e3a5879
+34 -6
View File
@@ -4,6 +4,13 @@
# 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"
@@ -18,27 +25,48 @@ 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
echo $(basename "$SCRIPT"): " " | cut -b1-20 | sed 's/-/ - /' | tr "\n" ' '
printf "%-${MAXNAMESIZE}.${MAXNAMESIZE}s " "$(echo "${SCRIPT}" | sed 's,^.*/,,;s/-/ - /')"
STATUS=0
sh -e "$SCRIPT" || STATUS=1
test $STATUS -eq 1 && FAIL=1
TESTEXITSTATUS=0
TESTOUTPUT=""
TESTOUTPUT=$(sh -e "$SCRIPT" 2>&1)
TESTEXITSTATUS=$?
test $STATUS -eq 1 && echo "FAILED" || echo "OK"
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
rm -f "$TMP1" "$TMP2" "$TMP3" "$TMP4"
trap "" EXIT
exit $FAIL