]> git.draconx.ca Git - dxcommon.git/blobdiff - snippet/test-tap.at
Move TAP testsuite macros into snippets.
[dxcommon.git] / snippet / test-tap.at
diff --git a/snippet/test-tap.at b/snippet/test-tap.at
new file mode 100644 (file)
index 0000000..7941cb7
--- /dev/null
@@ -0,0 +1,52 @@
+# Copyright © 2015, 2022-2023 Nick Bowler
+#
+# Helper macros for executing the TAP-like applications in an autotest
+# test suite.
+#
+# License WTFPL2: Do What The Fuck You Want To Public License, version 2.
+# This is free software: you are free to do what the fuck you want to.
+# There is NO WARRANTY, to the extent permitted by law.
+
+m4_divert_push([PREPARE_TESTS])dnl
+{
+  echo "% prove --version"
+  prove --version </dev/null
+  echo
+} >&AS_MESSAGE_LOG_FD 2>&1
+
+# Run a test program, and, if prove is installed, use it to interpret the
+# TAP-formatted output.
+test_run_tap () {
+  program=$1; shift
+
+  "$builddir/t/$program" "$@" >"$program.tap"
+  status=$?
+  cat "$program.tap"
+  # Older versions of prove do not support the -e option so the
+  # "test" must be a perl script.
+  :; { echo 'print <<EOF'; cat "$program.tap"; echo 'EOF'; } >"$program.pl"
+  prove "$program.pl" 2>&1
+  return $status
+}
+m4_divert_pop([PREPARE_TESTS])
+
+dnl TEST_TAP([application])
+dnl
+dnl Run the given TAP application.  The exit status indicates the overall
+dnl success/failure of the test, while the application's TAP-formatted
+dnl output is logged with details of individual test results.
+m4_define([TEST_TAP], [AT_CHECK([test_run_tap $1], [0], [ignore])])
+
+dnl TEST_TAP_SIMPLE([name], [application], [setup], [keywords])
+dnl
+dnl Convenience macro to define a complete test group based around one
+dnl application.  The test group is created with the given name and
+dnl (optionally) keywords.  The optional setup defines additional code
+dnl to run before the actual test, and finally the application is
+dnl run using TEST_TAP.
+m4_define([TEST_TAP_SIMPLE], [dnl
+AT_SETUP([$1])
+AT_KEYWORDS([$4])dnl
+m4_n([$3])dnl
+TEST_TAP([$2])
+AT_CLEANUP])