test: Detect unfinished subsets

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.
This commit is contained in:
Michal Sojka 2010-11-14 22:54:31 +01:00 committed by Carl Worth
parent f22a7ec1e2
commit 556986511c

View file

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