From 264e3a5879145926b43dd80f373062f956b712cb Mon Sep 17 00:00:00 2001 From: Andrew Wood Date: Sat, 22 Jul 2023 20:46:35 +0100 Subject: [PATCH] Format output with printf, allow test scripts to write output to be displayed, and allow test scripts to be skipped. --- autoconf/scripts/run-test.sh | 40 ++++++++++++++++++++++++++++++------ 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/autoconf/scripts/run-test.sh b/autoconf/scripts/run-test.sh index 5baa66c..580fda2 100755 --- a/autoconf/scripts/run-test.sh +++ b/autoconf/scripts/run-test.sh @@ -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