1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201
|
#! /bin/sh
# Copyright (C) 2007-2021 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 <https://www.gnu.org/licenses/>.
# Test Automake TESTS color output, using the expect(1) program.
# Keep this in sync with the sister test 'color-tests.sh'.
required='grep-nonprint'
# For gen-testsuite-part: ==> try-with-serial-tests <==
. test-init.sh
# Escape '[' for grep, below.
red="$esc\[0;31m"
grn="$esc\[0;32m"
lgn="$esc\[1;32m"
blu="$esc\[1;34m"
mgn="$esc\[0;35m"
std="$esc\[m"
# This test requires a working a working 'expect' program.
(set +e; expect -c 'exit 77'; test $? -eq 77) \
|| skip_ "requires a working expect program"
# Also, if the $MAKE program fails to consider the standard output as a
# tty (this happens with e.g., BSD make and Solaris dmake when they're
# run in parallel mode; see the autoconf manual), there is little point
# in proceeding.
cat > Makefile <<'END'
all:
## Creative quoting in the 'echo' below to avoid risk of spurious output
## matches by 'expect', below.
@test -t 1 && echo "stdout" "is" "a" "tty"
END
cat > expect-check <<'END'
eval spawn $env(MAKE)
expect {
"stdout is a tty" { exit 0 }
default { exit 1 }
}
exit 1
END
MAKE=$MAKE expect -f expect-check \
|| skip_ "make spawned by expect should have a tty stdout"
rm -f expect-check Makefile
# Do the tests.
cat >>configure.ac << 'END'
if $testsuite_colorized; then :; else
AC_SUBST([AM_COLOR_TESTS], [no])
fi
AC_OUTPUT
END
cat >Makefile.am <<'END'
TESTS = $(check_SCRIPTS)
check_SCRIPTS = pass fail skip xpass xfail error
XFAIL_TESTS = xpass xfail
END
cat >pass <<END
#! /bin/sh
exit 0
END
cat >fail <<END
#! /bin/sh
exit 1
END
cat >skip <<END
#! /bin/sh
exit 77
END
cat >error <<END
#! /bin/sh
exit 99
END
cp fail xfail
cp pass xpass
chmod +x pass fail skip xpass xfail error
$ACLOCAL
$AUTOCONF
$AUTOMAKE --add-missing
test_color ()
{
# Not a useless use of cat; see above comments "grep-nonprinting"
# requirement in 'test-init.sh'.
cat stdout | grep "^${grn}PASS${std}: .*pass"
cat stdout | grep "^${red}FAIL${std}: .*fail"
cat stdout | grep "^${blu}SKIP${std}: .*skip"
cat stdout | grep "^${lgn}XFAIL${std}: .*xfail"
cat stdout | grep "^${red}XPASS${std}: .*xpass"
# The old serial testsuite driver doesn't distinguish between failures
# and hard errors.
if test x"$am_serial_tests" = x"yes"; then
cat stdout | grep "^${red}FAIL${std}: .*error"
else
cat stdout | grep "^${mgn}ERROR${std}: .*error"
fi
:
}
test_no_color ()
{
# With make implementations that, like Solaris make, in case of errors
# print the whole failing recipe on standard output, we should content
# ourselves with a laxer check, to avoid false positives.
# Keep this in sync with lib/am/check.am:$(am__color_tests).
if $FGREP '= Xalways; then' stdout; then
# Extra verbose make, resort to laxer checks.
# Note that we also want to check that the testsuite summary is
# not unduly colorized.
(
set +e # In case some grepped regex below isn't matched.
# Not a useless use of cat; see above comments "grep-nonprinting"
# requirement in 'test-init.sh'.
cat stdout | grep "TOTAL.*:"
cat stdout | grep "PASS.*:"
cat stdout | grep "FAIL.*:"
cat stdout | grep "SKIP.*:"
cat stdout | grep "XFAIL.*:"
cat stdout | grep "XPASS.*:"
cat stdout | grep "ERROR.*:"
cat stdout | grep 'test.*expected'
cat stdout | grep 'test.*not run'
cat stdout | grep '===='
cat stdout | grep '[Ss]ee .*test-suite\.log'
cat stdout | grep '[Tt]estsuite summary'
) | grep "$esc" && exit 1
: For shells with broken 'set -e'
else
cat stdout | grep "$esc" && exit 1
: For shells with broken 'set -e'
fi
}
our_make ()
{
set "MAKE=$MAKE" ${1+"$@"}
env "$@" expect -f $srcdir/expect-make >stdout || { cat stdout; exit 1; }
cat stdout
}
cat >expect-make <<'END'
eval spawn $env(MAKE) -e check
expect eof
END
for vpath in false :; do
if $vpath; then
mkdir build
cd build
srcdir=..
else
srcdir=.
fi
$srcdir/configure
our_make TERM=ansi
test_color
our_make TERM=dumb
test_no_color
our_make AM_COLOR_TESTS=no
test_no_color
$srcdir/configure testsuite_colorized=false
our_make TERM=ansi
test_no_color
our_make TERM=ansi MAKE="env AM_COLOR_TESTS=always $MAKE"
test_color
$MAKE distclean
cd $srcdir
done
:
|