| #! /bin/sh | |
| # Copyright (C) 2011-2026 Free Software Foundation, Inc. | |
| # | |
| # This program is free software; you can redistribute it and/or modify | |
| # it under the terms of the GNU General Public License as published by | |
| # the Free Software Foundation; either version 2, or (at your option) | |
| # any later version. | |
| # | |
| # This program is distributed in the hope that it will be useful, | |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| # GNU General Public License for more details. | |
| # | |
| # You should have received a copy of the GNU General Public License | |
| # along with this program. If not, see <https://www.gnu.org/licenses/>. | |
| # Basic TAP support: | |
| # - LOG_COMPILER support; | |
| # - basic support for TODO and SKIP directives, and "Bail out!" magic; | |
| # - testsuite progress output on console; | |
| # - runtime overriding of TESTS and TEST_LOGS; | |
| # - correct counts of test results (both in summary and in progress | |
| # output on console). | |
| # Note that some of the features checked here are checked in other | |
| # test cases too, usually in a more thorough and detailed way. | |
| . test-init.sh | |
| fetch_tap_driver | |
| cat >> configure.ac <<END | |
| AC_OUTPUT | |
| END | |
| cat > Makefile.am << 'END' | |
| TEST_LOG_DRIVER = $(srcdir)/tap-driver | |
| ## Defining LOG_COMPILER should work and not interfere with the | |
| ## tap-driver script. | |
| TEST_LOG_COMPILER = cat | |
| TESTS = success.test | |
| ok.test: | |
| echo '1..3' > $@-t | |
| echo 'ok 1' >> $@-t | |
| echo 'not ok 2 # TODO' >>$@-t | |
| echo 'ok 3 # SKIP' >>$@-t | |
| cat $@-t ;: For debugging. | |
| mv -f $@-t $@ | |
| END | |
| cat > success.test << 'END' | |
| 1..20 | |
| ok 1 | |
| ok 2 two | |
| ok 3 - three | |
| ok 4 four four | |
| not ok 5 | |
| not ok 6 six | |
| not ok 7 - seven | |
| not ok 8 eight eight | |
| ok 9 # TODO | |
| ok 10 ten # TODO | |
| ok 11 - eleven # TODO | |
| ok 12 twelve twelve # TODO | |
| not ok 13 # TODO | |
| not ok 14 fourteen # TODO | |
| not ok 15 - fifteen # TODO | |
| not ok 16 sixteen sixteen # TODO | |
| ok 17 # SKIP | |
| ok 18 eighteen # SKIP | |
| ok 19 - nineteen # SKIP | |
| ok 20 twenty twenty # SKIP | |
| END | |
| $ACLOCAL | |
| $AUTOCONF | |
| $AUTOMAKE | |
| ./configure | |
| # Basilar usage and testsuite progress output. | |
| run_make -O -e FAIL check | |
| count_test_results total=20 pass=4 fail=4 xpass=4 xfail=4 skip=4 error=0 | |
| test -f success.log | |
| test -f test-suite.log | |
| cat > exp << 'END' | |
| PASS: success.test 1 | |
| PASS: success.test 2 two | |
| PASS: success.test 3 - three | |
| PASS: success.test 4 four four | |
| FAIL: success.test 5 | |
| FAIL: success.test 6 six | |
| FAIL: success.test 7 - seven | |
| FAIL: success.test 8 eight eight | |
| XPASS: success.test 9 # TODO | |
| XPASS: success.test 10 ten # TODO | |
| XPASS: success.test 11 - eleven # TODO | |
| XPASS: success.test 12 twelve twelve # TODO | |
| XFAIL: success.test 13 # TODO | |
| XFAIL: success.test 14 fourteen # TODO | |
| XFAIL: success.test 15 - fifteen # TODO | |
| XFAIL: success.test 16 sixteen sixteen # TODO | |
| SKIP: success.test 17 # SKIP | |
| SKIP: success.test 18 eighteen # SKIP | |
| SKIP: success.test 19 - nineteen # SKIP | |
| SKIP: success.test 20 twenty twenty # SKIP | |
| END | |
| $FGREP ': success.test' stdout > got | |
| cat exp | |
| cat got | |
| diff exp got | |
| # Override TESTS from the command line. | |
| rm -f *.log *.test | |
| cat > bail.test <<'END' | |
| 1..1 | |
| Bail out! | |
| ok 1 | |
| END | |
| run_make -O -e FAIL check TESTS=bail.test | |
| count_test_results total=1 pass=0 fail=0 xpass=0 xfail=0 skip=0 error=1 | |
| test ! -e success.log | |
| test -f bail.log | |
| test -f test-suite.log | |
| grep '^ERROR: bail\.test - Bail out!' stdout | |
| grep '^PASS:' stdout && exit 1 | |
| test $($FGREP -c ': bail.test' stdout) -eq 1 | |
| $FGREP 'success.test' stdout && exit 1 | |
| # Override TEST_LOGS from the command line, making it point to a test | |
| # (ok.test) that has to be generated at make time. | |
| rm -f *.log *.test | |
| run_make -O check TEST_LOGS=ok.log | |
| count_test_results total=3 pass=1 fail=0 xpass=0 xfail=1 skip=1 error=0 | |
| test -f ok.test | |
| test -f ok.log | |
| test ! -e success.log | |
| test ! -e bail.log | |
| test -f test-suite.log | |
| $EGREP '(bail|success)\.test' stdout && exit 1 | |
| cat > exp << 'END' | |
| PASS: ok.test 1 | |
| XFAIL: ok.test 2 # TODO | |
| SKIP: ok.test 3 # SKIP | |
| END | |
| $FGREP ': ok.test' stdout > got | |
| cat exp | |
| cat got | |
| diff exp got | |
| : |