1#! /bin/sh 2# Copyright (C) 2011-2021 Free Software Foundation, Inc. 3# 4# This program is free software; you can redistribute it and/or modify 5# it under the terms of the GNU General Public License as published by 6# the Free Software Foundation; either version 2, or (at your option) 7# any later version. 8# 9# This program is distributed in the hope that it will be useful, 10# but WITHOUT ANY WARRANTY; without even the implied warranty of 11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12# GNU General Public License for more details. 13# 14# You should have received a copy of the GNU General Public License 15# along with this program. If not, see <https://www.gnu.org/licenses/>. 16 17# TAP support: 18# - log file creation 19# - log file removal 20# - stdout and stderr of a script go in its log file 21# - TEST_SUITE_LOG redefinition, at either automake or make time 22# - VERBOSE environment variable support 23# Keep in sync with 'test-log.sh'. 24 25. test-init.sh 26 27cat > Makefile.am << 'END' 28TESTS = pass.test skip.test xfail.test fail.test xpass.test error.test 29TEST_SUITE_LOG = global.log 30END 31 32. tap-setup.sh 33 34# Custom markers, for use in grepping checks. 35cmarker=::: # comment marker 36pmarker=%%% # plain maker 37 38cat > pass.test <<END 39#! /bin/sh -e 40echo 1..1 41echo "$pmarker pass $pmarker" >&2 42echo "# $cmarker pass $cmarker" >&2 43echo "ok 1" 44END 45 46cat > skip.test <<END 47#! /bin/sh -e 48echo 1..1 49echo "$pmarker skip $pmarker" 50echo "# $cmarker skip $cmarker" 51echo "ok 1 # SKIP" 52END 53 54cat > xfail.test <<END 55#! /bin/sh -e 56echo 1..1 57echo "$pmarker xfail $pmarker" >&2 58echo "# $cmarker xfail $cmarker" >&2 59echo "not ok 1 # TODO" 60END 61 62cat > fail.test <<END 63#! /bin/sh -e 64echo 1..1 65echo "$pmarker fail $pmarker" 66echo "# $cmarker fail $cmarker" 67echo "not ok 1" 68END 69 70cat > xpass.test <<END 71#! /bin/sh -e 72echo 1..1 73echo "$pmarker xpass $pmarker" >&2 74echo "# $cmarker xpass $cmarker" >&2 75echo "ok 1 # TODO" 76END 77 78cat > error.test <<END 79#! /bin/sh -e 80echo 1..1 81echo "$pmarker error $pmarker" 82echo "# $cmarker error $cmarker" 83echo 'Bail out!' 84END 85 86chmod a+x *.test 87 88run_make -e FAIL TEST_SUITE_LOG=my.log check 89ls -l # For debugging. 90test ! -e test-suite.log 91test ! -e global.log 92test -f my.log 93st=0 94for result in pass fail xfail xpass skip error; do 95 cat $result.log # For debugging. 96 $FGREP "$pmarker $result $pmarker" $result.log || st=1 97 $FGREP "$cmarker $result $cmarker" $result.log || st=1 98done 99test $st -eq 0 || exit 1 100cat my.log # For debugging. 101for result in xfail fail xpass skip error; do 102 cat $result.log # For debugging. 103 $FGREP "$pmarker $result $pmarker" my.log || st=1 104 $FGREP "$cmarker $result $cmarker" my.log || st=1 105done 106test $($FGREP -c "$pmarker" my.log) -eq 5 107test $($FGREP -c "$cmarker" my.log) -eq 5 108 109# Passed test scripts shouldn't be mentioned in the global log. 110$EGREP '(^pass|[^x]pass)\.test' my.log && exit 1 111# But failing (expectedly or not) and skipped ones should. 112$FGREP 'xfail.test' my.log 113$FGREP 'skip.test' my.log 114$FGREP 'fail.test' my.log 115$FGREP 'xpass.test' my.log 116$FGREP 'error.test' my.log 117 118touch error2.log test-suite.log global.log 119run_make TEST_SUITE_LOG=my.log mostlyclean 120ls -l # For debugging. 121test ! -e my.log 122test ! -e pass.log 123test ! -e fail.log 124test ! -e xfail.log 125test ! -e xpass.log 126test ! -e skip.log 127test ! -e error.log 128# "make mostlyclean" shouldn't remove unrelated log files. 129test -f error2.log 130test -f test-suite.log 131test -f global.log 132 133rm -f *.log 134 135run_make -O -e FAIL check VERBOSE=yes 136cat global.log 137test ! -e my.log 138test ! -e test-suite.log 139# Check that VERBOSE causes the global testsuite log to be 140# emitted on stdout. 141out=$(cat stdout) 142log=$(cat global.log) 143case $out in *"$log"*) ;; *) exit 1;; esac 144 145touch error2.log test-suite.log my.log 146$MAKE clean 147ls -l # For debugging. 148test ! -e global.log 149test ! -e pass.log 150test ! -e fail.log 151test ! -e xfail.log 152test ! -e xpass.log 153test ! -e skip.log 154test ! -e error.log 155# "make clean" shouldn't remove unrelated log files. 156test -f error2.log 157test -f test-suite.log 158test -f my.log 159 160rm -f *.log 161 162: 163