#! /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 . # Custom test drivers: "abstract" XFAIL_TESTS support. . test-init.sh cat >> configure.ac <<'END' AC_SUBST([nihil], []) AC_SUBST([ac_xfail_tests], ['x5.test x6$(test_suffix)']) AC_CONFIG_FILES([sub1/Makefile sub2/Makefile]) AC_OUTPUT END cat > Makefile.am <<'END' SUBDIRS = . sub1 sub2 TEST_LOG_DRIVER = $(srcdir)/td TESTS = pass.test xfail.test XFAIL_TESTS = xfail.test END mkdir sub1 sub2 cat > sub1/Makefile.am < sub2/Makefile.am <<'END' AUTOMAKE_OPTIONS = -Wno-portability-recursive TEST_LOG_DRIVER = $(srcdir)/../td # XFAIL_TESTS should gracefully AC_SUBST @substitution@ and # make variables indirections. an_xfail_test = x1.test test_suffix = .test v0 = x3.test v1 = v v2 = 0 XFAIL_TESTS = $(an_xfail_test) x2.test @nihil@ x3${test_suffix} XFAIL_TESTS += $($(v1)$(v2)) x4.test @ac_xfail_tests@ TESTS = pass.test x1.test x2.test x3.test x4.test x5.test x6.test END cat > pass.test <<'END' #!/bin/sh exit 0 END cat > xfail.test <<'END' #!/bin/sh exit 1 END chmod a+x pass.test xfail.test cp pass.test sub1/pass.test cp pass.test sub2/pass.test for i in 1 2 3 4 5 6; do cp xfail.test sub1/x$i.test cp xfail.test sub2/x$i.test done cat > td <<'END' #! /bin/sh set -e; set -u test_name=INVALID log_file=/dev/null trs_file=/dev/null expect_failure=no while test $# -gt 0; do case $1 in --test-name) test_name=$2; shift;; --expect-failure) expect_failure=$2; shift;; --log-file) log_file=$2; shift;; --trs-file) trs_file=$2; shift;; # Ignored. --color-tests) shift;; --enable-hard-errors) shift;; # Explicitly terminate option list. --) shift; break;; # Shouldn't happen *) echo "$0: invalid option/argument: '$1'" >&2; exit 2;; esac shift done st=0 "$@" || st=$? case $st,$expect_failure in 0,no) echo "PASS: $test_name" | tee "$log_file" echo ":test-result: PASS" > "$trs_file" ;; 1,no) echo "FAIL: $test_name" | tee "$log_file" echo ":test-result: FAIL" > "$trs_file" ;; 0,yes) echo "XPASS: $test_name" | tee "$log_file" echo ":test-result: XPASS" > "$trs_file" ;; 1,yes) echo "XFAIL: $test_name" | tee "$log_file" echo ":test-result: XFAIL" > "$trs_file" ;; *) echo "INTERNAL ERROR" >&2 exit 99 ;; esac END chmod a+x td $ACLOCAL $AUTOCONF $AUTOMAKE ./configure run_make -O check test $(grep -c '^PASS:' stdout) -eq 3 test $(grep -c '^XFAIL:' stdout) -eq 13 for dir in sub1 sub2; do cd $dir cp pass.test x1.test cp x2.test pass.test run_make -O -e FAIL check test "$(cat pass.trs)" = ":test-result: FAIL" test "$(cat x1.trs)" = ":test-result: XPASS" test "$(cat x2.trs)" = ":test-result: XFAIL" grep '^FAIL: pass\.test$' stdout grep '^XPASS: x1\.test$' stdout grep '^XFAIL: x2\.test$' stdout count_test_results total=7 pass=0 xpass=1 fail=1 xfail=5 skip=0 error=0 cd .. done :