147 lines
3.6 KiB
Bash
147 lines
3.6 KiB
Bash
#! /bin/sh
|
|
# Copyright (C) 2011-2017 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 <http://www.gnu.org/licenses/>.
|
|
|
|
# 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 <<END
|
|
echo :test-result: SKIP >&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 <<END
|
|
echo ":test-result: FAIL" >&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 <<END
|
|
echo :test-result: $RES >&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 <<END
|
|
echo :copy-in-global-log:no >&5
|
|
echo ":test-result: FAIL" >&5
|
|
echo "not seen 3"
|
|
END
|
|
|
|
# Leading whitespace before the field.
|
|
cat > no-4.test <<END
|
|
echo ":test-result: FAIL" >&5
|
|
echo " $tab $tab$tab :copy-in-global-log: no" >&5
|
|
echo "not seen 4"
|
|
END
|
|
|
|
cat > yes-1.test <<END
|
|
echo :test-result: PASS >&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 <<END
|
|
echo :test-result: PASS >&5
|
|
echo seen yes 2
|
|
END
|
|
|
|
# Three corner cases.
|
|
|
|
cat > corn-1.test <<END
|
|
echo seen corn 1
|
|
echo ':copy-in-global-log:' >&5
|
|
END
|
|
|
|
cat > corn-2.test <<END
|
|
echo seen corn 2
|
|
echo '$tab $tab$tab' >&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
|
|
|
|
:
|