#! /bin/sh # Copyright (C) 2011-2023 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 . # Custom test drivers and parallel test harness: check the documented # semantics for deciding when the content of a test log file should be # copied in the global test-suite.log file. Currently, this is done # with the use of the reStructuredText field ':copy-in-global-log:' in # the associated '.trs' files. . test-init.sh cat >> configure.ac << 'END' AC_OUTPUT END cat > Makefile.am << 'END' TEST_LOG_DRIVER = ./passthrough-driver TEST_LOG_COMPILER = $(SHELL) -e END cat > passthrough-driver <<'END' #!/bin/sh set -e; set -u; while test $# -gt 0; do case $1 in --log-file) log_file=$2; shift;; --trs-file) trs_file=$2; shift;; --test-name) test_name=$2; shift;; --expect-failure|--color-tests|--enable-hard-errors) shift;; --) shift; break;; *) echo "$0: invalid option/argument: '$1'" >&2; exit 2;; esac shift done echo "$test_name: RUN" "$@" >$log_file 2>&1 5>$trs_file END chmod a+x passthrough-driver # The ':test-result:' and ':recheck:' fields and the first line of the # log file should be be irrelevant for the decision of whether a test # output is to be copied in the 'test-suite.log'. cat > no-1.test <&5 echo :copy-in-global-log: no >&5 echo :test-result: FAIL >&5 echo :test-result: XPASS >&5 echo not seen 1 END # In the last line, with leading and trailing whitespace in the value. cat > no-2.test <&5 echo "not seen 2" echo ":recheck: yes" >&5 echo ":copy-in-global-log:$tab $tab no $tab" >&5 END for RES in XPASS FAIL XFAIL SKIP ERROR UNKNOWN; do unindent > $RES.test <&5 echo :copy-in-global-log: no >&5 echo not seen $RES END done # In the first line, with no whitespace. cat > no-3.test <&5 echo ":test-result: FAIL" >&5 echo "not seen 3" END # Leading whitespace before the field. cat > no-4.test <&5 echo " $tab $tab$tab :copy-in-global-log: no" >&5 echo "not seen 4" END cat > yes-1.test <&5 echo :copy-in-global-log: yes >&5 echo seen yes 1 END # A lacking ':copy-in-global-log:' implies that the content of # the log file should be copied. cat > yes-2.test <&5 echo seen yes 2 END # Three corner cases. cat > corn-1.test <&5 END cat > corn-2.test <&5 END cat > corn-3.test <<'END' echo seen corn 31 echo ':copy-in-global-log:#@%!' >&5 echo seen corn 32 END echo TESTS = *.test >> Makefile.am $ACLOCAL $AUTOCONF $AUTOMAKE ./configure # We don't care about the exit status of "make check" here, that # should be checked in other tests. $MAKE check || : cat test-suite.log grep '^seen yes 1$' test-suite.log grep '^seen yes 2$' test-suite.log grep '^seen corn 1$' test-suite.log grep '^seen corn 2$' test-suite.log grep '^seen corn 31$' test-suite.log grep '^seen corn 32$' test-suite.log $FGREP 'not seen' test-suite.log && exit 1 :