Skip to content

Commit a7c58f2

Browse files
jrngitster
authored andcommitted
test: cope better with use of return for errors
In olden times, tests would quietly exit the script when they failed at an inconvenient moment, which was a little disconcerting. Therefore v0.99.5~24^2~4 (Trapping exit in tests, using return for errors, 2005-08-10) switched to an idiom of using "return" instead, wrapping evaluation of test code in a function to make that safe: test_run_ () { eval >&3 2>&4 "$1" eval_ret="$?" return 0 } Years later, the implementation of test_when_finished (v1.7.1.1~95, 2010-05-02) and v1.7.2-rc2~1^2~13 (test-lib: output a newline before "ok" under a TAP harness, 2010-06-24) took advantage of test_run_ as a place to put code shared by all test assertion functions, without paying attention to the function's former purpose: test_run_ () { ... eval >&3 2>&4 "$1" eval_ret=$? if should run cleanup then eval >&3 2>&4 "$test_cleanup" fi if TAP format requires a newline here then echo fi return 0 } That means cleanup commands and the newline to put TAP output at column 0 are skipped when tests use "return" to fail early. Fix it by introducing a test_eval_ function to catch the "return", with a comment explaining the new function's purpose for the next person who might touch this code. Signed-off-by: Jonathan Nieder <[email protected]> Acked-by: Jeff King <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent aa0bcf9 commit a7c58f2

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

t/test-lib.sh

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -444,15 +444,21 @@ test_debug () {
444444
test "$debug" = "" || eval "$1"
445445
}
446446

447+
test_eval_ () {
448+
# This is a separate function because some tests use
449+
# "return" to end a test_expect_success block early.
450+
eval >&3 2>&4 "$*"
451+
}
452+
447453
test_run_ () {
448454
test_cleanup=:
449455
expecting_failure=$2
450-
eval >&3 2>&4 "$1"
456+
test_eval_ "$1"
451457
eval_ret=$?
452458

453459
if test -z "$immediate" || test $eval_ret = 0 || test -n "$expecting_failure"
454460
then
455-
eval >&3 2>&4 "$test_cleanup"
461+
test_eval_ "$test_cleanup"
456462
fi
457463
if test "$verbose" = "t" && test -n "$HARNESS_ACTIVE"; then
458464
echo ""

0 commit comments

Comments
 (0)