xref: /freebsd/usr.bin/tests/regress.m4 (revision 2e3f49888ec8851bafb22011533217487764fdb0)
1
2dnl A library of routines for doing regression tests for userland utilities.
3
4dnl Start up.  We initialise the exit status to 0 (no failure) and change
5dnl into the directory specified by our first argument, which is the
6dnl directory to run the tests inside.
7define(`REGRESSION_START',
8TESTDIR=$1
9if [ -z "$TESTDIR" ]; then
10  TESTDIR=.
11fi
12cd $TESTDIR
13
14STATUS=0)
15
16dnl Check $? to see if we passed or failed.  The first parameter is the test
17dnl which passed or failed.  It may be nil.
18define(`REGRESSION_PASSFAIL',
19if [ $? -eq 0 ]; then
20  echo "ok - $1 # Test detected no regression. (in $TESTDIR)"
21else
22  STATUS=$?
23  echo "not ok - $1 # Test failed: regression detected.  See above. (in $TESTDIR)"
24fi)
25
26dnl An actual test.  The first parameter is the test name.  The second is the
27dnl command/commands to execute for the actual test.  Their exit status is
28dnl checked.  It is assumed that the test will output to stdout, and that the
29dnl output to be used to check for regression will be in regress.TESTNAME.out.
30define(`REGRESSION_TEST',
31$2 | diff -u ${SRCDIR:-.}/regress.$1.out -
32REGRESSION_PASSFAIL($1))
33
34dnl A freeform regression test.  Only exit status is checked.
35define(`REGRESSION_TEST_FREEFORM',
36$2
37REGRESSION_PASSFAIL($1))
38
39dnl A regression test like REGRESSION_TEST, except only regress.out is used
40dnl for checking output differences.  The first argument is the command, the
41dnl second argument (which may be empty) is the test name.
42define(`REGRESSION_TEST_ONE',
43$1 | diff -u ${SRCDIR:-.}/regress.out -
44REGRESSION_PASSFAIL($2))
45
46dnl A fatal error.  This will exit with the given status (first argument) and
47dnl print the message (second argument) prefixed with the string "FATAL :" to
48dnl the error stream.
49define(`REGRESSION_FATAL',
50echo "Bail out! $2 (in $TESTDIR)" > /dev/stderr
51exit $1)
52
53dnl Cleanup.  Exit with the status code of the last failure.  Should probably
54dnl be the number of failed tests, but hey presto, this is what it does.  This
55dnl could also clean up potential droppings, if some forms of regression tests
56dnl end up using mktemp(1) or such.
57define(`REGRESSION_END',
58exit $STATUS)
59