>From f46359b42790945e42e78a620e651ce66c2b8833 Mon Sep 17 00:00:00 2001 Message-Id: From: Stefano Lattarini Date: Wed, 18 Apr 2012 11:40:15 +0200 Subject: [PATCH] parallel-tests: 'recheck' must depend on 'all' Fixes automake bug#11252. When a developer experience one or more failures in the testsuite, a good workflow is for him to modify its program's sources to fix the bug thus revealed, run "make recheck" to verify that the change has indeed solved the testsuite failures previously experienced, and then run "make check" to verify that the change has not introduced any new failure or regression. Unfortunately, this apparently natural workflow couldn't have worked until now, since the Automake-provided 'recheck' target (which didn't depend on 'all') wouldn't have causes the program to be recompiled, and the failed tests would have thus been run with the older, buggy version of the program, failing the same way as before. * lib/am/check.am (recheck): Depend on 'all'. * t/parallel-tests-recheck-depends-on-all.sh: New test. * t/list-of-tests.mk: Add it. * NEWS: Update. Signed-off-by: Stefano Lattarini --- NEWS | 4 ++ lib/am/check.am | 3 +- t/list-of-tests.mk | 1 + t/parallel-tests-recheck-depends-on-all.sh | 93 ++++++++++++++++++++++++++++ 4 files changed, 100 insertions(+), 1 deletion(-) create mode 100755 t/parallel-tests-recheck-depends-on-all.sh diff --git a/NEWS b/NEWS index 142f805..bb2480f 100644 --- a/NEWS +++ b/NEWS @@ -92,6 +92,10 @@ New in 1.11c: testsuite harness. This is still the default at the moment, but it might change in future versions. + - The 'recheck' target (provided by the parallel testsuite harness) now + depends on the 'all' target. This allows for a better user-experience + in test-driven development. See automake bug#11252. + - Test scripts that exit with status 99 to signal an "hard error" (e.g., and unexpected or internal error, or a failure to set up the test case scenario) have their outcome reported as an 'ERROR' now. Previous diff --git a/lib/am/check.am b/lib/am/check.am index 0ce064d..7866570 100644 --- a/lib/am/check.am +++ b/lib/am/check.am @@ -367,7 +367,8 @@ check-TESTS recheck: $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list" ## Recheck must depend on $(check_SCRIPTS), $(check_PROGRAMS), etc. -recheck: %CHECK_DEPS% +## It must also depend on the 'all' target. See automake bug#11252. +recheck: all %CHECK_DEPS% AM_RECURSIVE_TARGETS += check recheck diff --git a/t/list-of-tests.mk b/t/list-of-tests.mk index ea77bc1..4562828 100644 --- a/t/list-of-tests.mk +++ b/t/list-of-tests.mk @@ -737,6 +737,7 @@ t/parallel-tests6.sh \ t/parallel-tests8.sh \ t/parallel-tests9.sh \ t/parallel-tests10.sh \ +t/parallel-tests-recheck-depends-on-all.sh \ t/parallel-tests-exeext.sh \ t/parallel-tests-suffix.sh \ t/parallel-tests-suffix-prog.sh \ diff --git a/t/parallel-tests-recheck-depends-on-all.sh b/t/parallel-tests-recheck-depends-on-all.sh new file mode 100755 index 0000000..cec66ae --- /dev/null +++ b/t/parallel-tests-recheck-depends-on-all.sh @@ -0,0 +1,93 @@ +#! /bin/sh +# Copyright (C) 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 . + +# The parallel-tests 'recheck' target must depend on the 'all' target. +# See automake bug#11252. + +am_parallel_tests=yes +required=cc +. ./defs || Exit 1 + +cat >> configure.ac << 'END' +AC_PROG_CC +AC_OUTPUT +END + +cat > Makefile.am << 'END' +all-local: + test ! -f status || echo okokok > status +bin_PROGRAMS = foo +TESTS = a.test b.test c.test +END + +cat > foo.c << 'END' +#include +int main (void) +{ + printf ("failure :-(" "\n"); + return 1; +} +END + +cat > a.test << 'END' +#!/bin/sh +exit 0 +END + +cat > b.test << 'END' +#!/bin/sh +grep okokok status +END + +cat > c.test << 'END' +#!/bin/sh +./foo +END + +chmod a+x *.test + +$ACLOCAL +$AUTOCONF +$AUTOMAKE -a +./configure + +$MAKE check >stdout && { cat stdout; Exit 1; } +cat stdout +count_test_results total=3 pass=1 fail=2 skip=0 xfail=0 xpass=0 error=0 +test ! -f status + +$sleep +: > status +cat > foo.c << 'END' +#include +int main (void) +{ + printf ("success :-)" "\n"); + return 0; +} +END + +$MAKE recheck >stdout || { cat stdout; Exit 1; } +cat stdout +count_test_results total=2 pass=2 fail=0 skip=0 xfail=0 xpass=0 error=0 +grep '^PASS: b\.test$' stdout +grep '^PASS: c\.test$' stdout + +$MAKE recheck >stdout || { cat stdout; Exit 1; } +cat stdout +count_test_results total=0 pass=0 fail=0 skip=0 xfail=0 xpass=0 error=0 + +: -- 1.7.9.5