123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- #! /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: "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 <<END
- empty =
- TEST_LOG_DRIVER = \$(top_srcdir)/td
- # XFAIL_TESTS should gracefully handle TAB characters, and multiple
- # whitespaces.
- XFAIL_TESTS =\$(empty)${tab}x1.test x2.test${tab}x3.test${tab}\
- x4.test ${tab} x5.test x6.test${tab}\$(empty)
- TESTS = pass.test x1.test x2.test x3.test x4.test x5.test x6.test
- END
- cat > 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
- :
|