blob: 83235c5d5b0185a13ade81b4fc51b63c3e338b65 [file] [log] [blame]
#! /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 <https://www.gnu.org/licenses/>.
# Parallel testsuite harness: check APIs for the registering the
# "global test result" in '*.trs' files, as documented in the automake
# manual.
. test-init.sh
cat >> configure.ac << 'END'
AC_OUTPUT
END
cat > Makefile.am << 'END'
TEST_EXTENSIONS = .test .x
TEST_LOG_DRIVER = ./dummy-driver
X_LOG_DRIVER = ./dummy-driver
TESTS = foo.test zar-doz.test
END
cat > dummy-driver <<'END'
#! /bin/sh
set -e; set -u
while test $# -gt 0; do
case $1 in
--log-file) log_file=$2; shift;;
--trs-file) trs_file=$2; shift;;
--test-name) test_name=$2; shift;;
--expect-failure|--color-tests|--enable-hard-errors) shift;;
--) shift; break;;
*) echo "$0: invalid option/argument: '$1'" >&2; exit 2;;
esac
shift
done
echo logloglog > $log_file
cp $1 $trs_file
END
chmod a+x dummy-driver
# Do this in a subroutine to avoid quoting problem in the backticked
# command substitution below.
get_escaped_line()
{
sed -e 's,[$^/\\\.],\\&,g' -e 1q "$@"
}
have_result ()
{
cat > exp; echo >> exp; echo logloglog >> exp
eline=$(get_escaped_line exp)
sed -n -e "/^$eline$/,/^logloglog$/p" test-suite.log > got
cat exp; cat got
diff exp got
}
$ACLOCAL
$AUTOCONF
$AUTOMAKE
./configure
: Basic checks.
echo :global-test-result: PASS > foo.test
echo :global-test-result: ERROR > zar-doz.x
$MAKE check
cat test-suite.log
have_result <<END
PASS: foo
=========
END
have_result <<END
ERROR: zar-doz
==============
END
: Try usage documented in the manual.
echo :global-test-result: PASS/SKIP > foo.test
echo :global-test-result: ALMOST PASSED > zar-doz.x
$MAKE check
cat test-suite.log
have_result <<END
PASS/SKIP: foo
==============
END
have_result <<END
ALMOST PASSED: zar-doz
======================
END
: Fields ':test-result:' does not interfere with the global test result.
cat > foo.test << 'END'
:test-result: FAIL
:global-test-result: PASS
:test-result: ERROR
END
cat > zar-doz.x << 'END'
:global-test-result: FAIL
:test-result: SKIP
:test-result: XFAIL
END
$MAKE check && exit 1
cat test-suite.log
have_result <<END
PASS: foo
=========
END
have_result <<END
FAIL: zar-doz
=============
END
: What happens when ':global-test-result:' is absent.
cat > foo.test << 'END'
:test-result: PASS
:test-result: ERROR
END
: > zar-doz.x
$MAKE check && exit 1
cat test-suite.log
have_result <<END
RUN: foo
========
END
have_result <<END
RUN: zar-doz
============
END
# Leading and trailing whitespace gets eaten/normalized.
echo ":global-test-result:SKIP${tab} ${tab}${tab}" > foo.test
echo ":global-test-result:${tab} ${tab}XFAIL ${tab} " > zar-doz.x
$MAKE check
cat test-suite.log
have_result <<END
SKIP: foo
=========
END
have_result <<END
XFAIL: zar-doz
==============
END
# Whitespaces before and after ':global-test-result:' are handled OK.
echo " $tab:global-test-result:PASS" > foo.test
echo "${tab}${tab}:global-test-result:${tab} ${tab}SKIP" > zar-doz.x
$MAKE check
cat test-suite.log
have_result <<END
PASS: foo
=========
END
have_result <<END
SKIP: zar-doz
=============
END
: