]> git.ipfire.org Git - thirdparty/automake.git/commitdiff
parallel-tests: 'recheck' must depend on 'all'
authorStefano Lattarini <stefano.lattarini@gmail.com>
Wed, 18 Apr 2012 09:40:15 +0000 (11:40 +0200)
committerStefano Lattarini <stefano.lattarini@gmail.com>
Wed, 18 Apr 2012 09:40:15 +0000 (11:40 +0200)
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 <stefano.lattarini@gmail.com>
NEWS
lib/am/check.am
t/list-of-tests.mk
t/parallel-tests-recheck-depends-on-all.sh [new file with mode: 0755]

diff --git a/NEWS b/NEWS
index 142f805f67c03b8ee4752a560f0dd6835ebecaef..bb2480feaf49aa6afc07a917a231528408a484ec 100644 (file)
--- 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
index 0ce064d3742fea3127e03ee803fa451d652116ca..78665708d03f5ce6738405437de986241cba3968 100644 (file)
@@ -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
 
index ea77bc1bc1812a58c5069f5c6cc08c2dcda8c2f9..4562828ff50ef11f195a9a88cf6bbd6a3ea2d211 100644 (file)
@@ -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 (executable)
index 0000000..cec66ae
--- /dev/null
@@ -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 <http://www.gnu.org/licenses/>.
+
+# 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 <stdio.h>
+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 <stdio.h>
+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
+
+: