test: Detect unfinished subsets
authorMichal Sojka <sojkam1@fel.cvut.cz>
Sun, 14 Nov 2010 21:54:31 +0000 (22:54 +0100)
committerCarl Worth <cworth@cworth.org>
Tue, 16 Nov 2010 19:28:06 +0000 (11:28 -0800)
When test_begin_subtest is not followed by corresponding test_expect_equal,
the output of the rest of the test script is errornously suppressed. Add
code to detect these bugs in test scripts.

test/test-lib.sh

index dce9077d44fad37ef7d10be2ddc231500bedb3fc..04a4c144d091d88cfea2680107bea4d143473c37 100644 (file)
@@ -396,12 +396,17 @@ add_email_corpus ()
 
 test_begin_subtest ()
 {
+    if [ -n "$inside_subtest" ]; then
+       exec 1>&6 2>&7          # Restore stdout and stderr
+       error "bug in test script: Missing test_expect_equal in ${BASH_SOURCE[1]}:${BASH_LINENO[0]}"
+    fi
     test_subtest_name="$1"
     # Remember stdout and stderr file descriptios and redirect test
     # output to the previously prepared file descriptors 3 and 4 (see
     # bellow)
     if test "$verbose" != "t"; then exec 4>test.output 3>&4; fi
     exec 6>&1 7>&2 >&3 2>&4
+    inside_subtest=t
 }
 
 # Pass test if two arguments match
@@ -413,6 +418,7 @@ test_begin_subtest ()
 test_expect_equal ()
 {
        exec 1>&6 2>&7          # Restore stdout and stderr
+       inside_subtest=
        test "$#" = 3 && { prereq=$1; shift; } || prereq=
        test "$#" = 2 ||
        error "bug in the test script: not 2 or 3 parameters to test_expect_equal"