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:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user