# Copyright © 2015, 2022-2024 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_defun([_TEST_TAP_PREPARE], [m4_divert_push([PREPARE_TESTS])dnl { echo "% prove --version" prove --version &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] AS_CASE([$program], [*/*], [program=`expr "$program" : '[.*/\([^.]*\)]'`], [*.*], [program=`expr "$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 <"$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_defun([TEST_TAP], [m4_require([_TEST_TAP_PREPARE])dnl 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])