#! /bin/sh # Copyright (C) 2007-2012 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 . # Test Automake TESTS color output, using the expect(1) program. # Keep this in sync with the sister test 'color.test'. . ./defs || Exit 1 esc='' # 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" # Check that grep can parse nonprinting characters. # BSD 'grep' works from a pipe, but not a seekable file. # GNU or BSD 'grep -a' works on files, but is not portable. case `echo "$std" | grep .` in "$std") ;; *) skip_ "grep can't parse nonprinting characters";; esac # This test requires a working a working 'expect' program. # Creative quoting required to avoid spurious maintainer-check failure. (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 <Makefile.am <<'END' AUTOMAKE_OPTIONS = color-tests TESTS = $(check_SCRIPTS) check_SCRIPTS = pass fail skip xpass xfail error XFAIL_TESTS = xpass xfail END cat >pass <fail <skip <error <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 TERM=ansi MAKE=$MAKE expect -f $srcdir/expect-make >stdout \ || { cat stdout; Exit 1; } cat stdout test_color TERM=dumb MAKE=$MAKE expect -f $srcdir/expect-make >stdout \ || { cat stdout; Exit 1; } cat stdout test_no_color AM_COLOR_TESTS=no MAKE=$MAKE expect -f $srcdir/expect-make >stdout \ || { cat stdout; Exit 1; } cat stdout test_no_color $MAKE distclean cd $srcdir done :