Thread (8 messages) 8 messages, 2 authors, 2026-04-14

Re: [PATCH 2/2] test-lib-functions: use BUG() in 'test_must_fail'

From: Jeff King <hidden>
Date: 2021-02-22 19:21:30
Subsystem: the rest · Maintainer: Linus Torvalds

On Mon, Feb 22, 2021 at 02:11:02PM -0500, Jeff King wrote:
It also adds "test_done" to the sub-test snippets, which my earlier
patch did not include. That's not strictly necessary (we should error
out before we even get there), but it makes the test more robust (we are
sure that the BUG is what caused us to exit non-zero, not the missing
test_done).
I'm quite tempted to do this, as well (this is on top of what I just
sent, but could easily be done independently by removing the hunks
touching the instances I just added):

-- >8 --
Subject: [PATCH] t0000: automatically add test_done to sub-test snippets

Our sub-test helper already handles setting up test_description,
including test-lib.sh, etc. Let's also automatically a test_done at the
end, since it is easy to forget and essentially every test snippet will
want it.

The only test which _wouldn't_ want this is one that was specifically
trying to check the behavior when test_done is not run. We don't have
such a test, but if we wanted one, it could just as easily run "exit 0"
as part of its snippet (which is arguably more obvious and readable than
leaving out the test_done, anyway).

Signed-off-by: Jeff King <redacted>
---
 t/t0000-basic.sh | 46 +---------------------------------------------
 1 file changed, 1 insertion(+), 45 deletions(-)
diff --git a/t/t0000-basic.sh b/t/t0000-basic.sh
index e5c06d055b..5a9592dd10 100755
--- a/t/t0000-basic.sh
+++ b/t/t0000-basic.sh
@@ -92,6 +92,7 @@ _run_sub_test_lib_test_common () {
 		. "\$TEST_DIRECTORY"/test-lib.sh
 		EOF
 		cat >>"$name.sh" &&
+		echo "test_done" >>"$name.sh" &&
 		export TEST_DIRECTORY &&
 		TEST_OUTPUT_DIRECTORY=$(pwd) &&
 		export TEST_OUTPUT_DIRECTORY &&
@@ -141,7 +142,6 @@ test_expect_success 'pretend we have a fully passing test suite' '
 	do
 		test_expect_success "passing test #$i" "true"
 	done
-	test_done
 	EOF
 	check_sub_test_lib_test full-pass <<-\EOF
 	> ok 1 - passing test #1
@@ -158,7 +158,6 @@ test_expect_success 'pretend we have a partially passing test suite' '
 	test_expect_success "passing test #1" "true"
 	test_expect_success "failing test #2" "false"
 	test_expect_success "passing test #3" "true"
-	test_done
 	EOF
 	check_sub_test_lib_test partial-pass <<-\EOF
 	> ok 1 - passing test #1
@@ -174,7 +173,6 @@ test_expect_success 'pretend we have a known breakage' '
 	run_sub_test_lib_test failing-todo "A failing TODO test" <<-\EOF &&
 	test_expect_success "passing test" "true"
 	test_expect_failure "pretend we have a known breakage" "false"
-	test_done
 	EOF
 	check_sub_test_lib_test failing-todo <<-\EOF
 	> ok 1 - passing test
@@ -188,7 +186,6 @@ test_expect_success 'pretend we have a known breakage' '
 test_expect_success 'pretend we have fixed a known breakage' '
 	run_sub_test_lib_test passing-todo "A passing TODO test" <<-\EOF &&
 	test_expect_failure "pretend we have fixed a known breakage" "true"
-	test_done
 	EOF
 	check_sub_test_lib_test passing-todo <<-\EOF
 	> ok 1 - pretend we have fixed a known breakage # TODO known breakage vanished
@@ -203,7 +200,6 @@ test_expect_success 'pretend we have fixed one of two known breakages (run in su
 	test_expect_failure "pretend we have a known breakage" "false"
 	test_expect_success "pretend we have a passing test" "true"
 	test_expect_failure "pretend we have fixed another known breakage" "true"
-	test_done
 	EOF
 	check_sub_test_lib_test partially-passing-todos <<-\EOF
 	> not ok 1 - pretend we have a known breakage # TODO known breakage
@@ -222,7 +218,6 @@ test_expect_success 'pretend we have a pass, fail, and known breakage' '
 	test_expect_success "passing test" "true"
 	test_expect_success "failing test" "false"
 	test_expect_failure "pretend we have a known breakage" "false"
-	test_done
 	EOF
 	check_sub_test_lib_test mixed-results1 <<-\EOF
 	> ok 1 - passing test
@@ -248,7 +243,6 @@ test_expect_success 'pretend we have a mix of all possible results' '
 	test_expect_failure "pretend we have a known breakage" "false"
 	test_expect_failure "pretend we have a known breakage" "false"
 	test_expect_failure "pretend we have fixed a known breakage" "true"
-	test_done
 	EOF
 	check_sub_test_lib_test mixed-results2 <<-\EOF
 	> ok 1 - passing test
@@ -277,7 +271,6 @@ test_expect_success C_LOCALE_OUTPUT 'test --verbose' '
 	test_expect_success "passing test" true
 	test_expect_success "test with output" "echo foo"
 	test_expect_success "failing test" false
-	test_done
 	EOF
 	mv t1234-verbose/out t1234-verbose/out+ &&
 	grep -v "^Initialized empty" t1234-verbose/out+ >t1234-verbose/out &&
@@ -305,7 +298,6 @@ test_expect_success 'test --verbose-only' '
 	test_expect_success "passing test" true
 	test_expect_success "test with output" "echo foo"
 	test_expect_success "failing test" false
-	test_done
 	EOF
 	check_sub_test_lib_test t2345-verbose-only-2 <<-\EOF
 	> ok 1 - passing test
@@ -330,7 +322,6 @@ test_expect_success 'GIT_SKIP_TESTS' '
 		do
 			test_expect_success "passing test #$i" "true"
 		done
-		test_done
 		EOF
 		check_sub_test_lib_test git-skip-tests-basic <<-\EOF
 		> ok 1 - passing test #1
@@ -351,7 +342,6 @@ test_expect_success 'GIT_SKIP_TESTS several tests' '
 		do
 			test_expect_success "passing test #$i" "true"
 		done
-		test_done
 		EOF
 		check_sub_test_lib_test git-skip-tests-several <<-\EOF
 		> ok 1 - passing test #1
@@ -375,7 +365,6 @@ test_expect_success 'GIT_SKIP_TESTS sh pattern' '
 		do
 			test_expect_success "passing test #$i" "true"
 		done
-		test_done
 		EOF
 		check_sub_test_lib_test git-skip-tests-sh-pattern <<-\EOF
 		> ok 1 - passing test #1
@@ -399,7 +388,6 @@ test_expect_success 'GIT_SKIP_TESTS entire suite' '
 		do
 			test_expect_success "passing test #$i" "true"
 		done
-		test_done
 		EOF
 		check_sub_test_lib_test git-skip-tests-entire-suite <<-\EOF
 		> 1..0 # SKIP skip all tests in git
@@ -416,7 +404,6 @@ test_expect_success 'GIT_SKIP_TESTS does not skip unmatched suite' '
 		do
 			test_expect_success "passing test #$i" "true"
 		done
-		test_done
 		EOF
 		check_sub_test_lib_test git-skip-tests-unmatched-suite <<-\EOF
 		> ok 1 - passing test #1
@@ -435,7 +422,6 @@ test_expect_success '--run basic' '
 	do
 		test_expect_success "passing test #$i" "true"
 	done
-	test_done
 	EOF
 	check_sub_test_lib_test run-basic <<-\EOF
 	> ok 1 - passing test #1
@@ -456,7 +442,6 @@ test_expect_success '--run with a range' '
 	do
 		test_expect_success "passing test #$i" "true"
 	done
-	test_done
 	EOF
 	check_sub_test_lib_test run-range <<-\EOF
 	> ok 1 - passing test #1
@@ -477,7 +462,6 @@ test_expect_success '--run with two ranges' '
 	do
 		test_expect_success "passing test #$i" "true"
 	done
-	test_done
 	EOF
 	check_sub_test_lib_test run-two-ranges <<-\EOF
 	> ok 1 - passing test #1
@@ -498,7 +482,6 @@ test_expect_success '--run with a left open range' '
 	do
 		test_expect_success "passing test #$i" "true"
 	done
-	test_done
 	EOF
 	check_sub_test_lib_test run-left-open-range <<-\EOF
 	> ok 1 - passing test #1
@@ -519,7 +502,6 @@ test_expect_success '--run with a right open range' '
 	do
 		test_expect_success "passing test #$i" "true"
 	done
-	test_done
 	EOF
 	check_sub_test_lib_test run-right-open-range <<-\EOF
 	> ok 1 # skip passing test #1 (--run)
@@ -540,7 +522,6 @@ test_expect_success '--run with basic negation' '
 	do
 		test_expect_success "passing test #$i" "true"
 	done
-	test_done
 	EOF
 	check_sub_test_lib_test run-basic-neg <<-\EOF
 	> ok 1 - passing test #1
@@ -561,7 +542,6 @@ test_expect_success '--run with two negations' '
 	do
 		test_expect_success "passing test #$i" "true"
 	done
-	test_done
 	EOF
 	check_sub_test_lib_test run-two-neg <<-\EOF
 	> ok 1 - passing test #1
@@ -582,7 +562,6 @@ test_expect_success '--run a range and negation' '
 	do
 		test_expect_success "passing test #$i" "true"
 	done
-	test_done
 	EOF
 	check_sub_test_lib_test run-range-and-neg <<-\EOF
 	> ok 1 - passing test #1
@@ -603,7 +582,6 @@ test_expect_success '--run range negation' '
 	do
 		test_expect_success "passing test #$i" "true"
 	done
-	test_done
 	EOF
 	check_sub_test_lib_test run-range-neg <<-\EOF
 	> ok 1 # skip passing test #1 (--run)
@@ -625,7 +603,6 @@ test_expect_success '--run include, exclude and include' '
 	do
 		test_expect_success "passing test #$i" "true"
 	done
-	test_done
 	EOF
 	check_sub_test_lib_test run-inc-neg-inc <<-\EOF
 	> ok 1 # skip passing test #1 (--run)
@@ -647,7 +624,6 @@ test_expect_success '--run include, exclude and include, comma separated' '
 	do
 		test_expect_success "passing test #$i" "true"
 	done
-	test_done
 	EOF
 	check_sub_test_lib_test run-inc-neg-inc-comma <<-\EOF
 	> ok 1 # skip passing test #1 (--run)
@@ -669,7 +645,6 @@ test_expect_success '--run exclude and include' '
 	do
 		test_expect_success "passing test #$i" "true"
 	done
-	test_done
 	EOF
 	check_sub_test_lib_test run-neg-inc <<-\EOF
 	> ok 1 - passing test #1
@@ -691,7 +666,6 @@ test_expect_success '--run empty selectors' '
 	do
 		test_expect_success "passing test #$i" "true"
 	done
-	test_done
 	EOF
 	check_sub_test_lib_test run-empty-sel <<-\EOF
 	> ok 1 - passing test #1
@@ -714,7 +688,6 @@ test_expect_success '--run substring selector' '
 	do
 		test_expect_success "other test #$i" "true"
 	done
-	test_done
 	EOF
 	check_sub_test_lib_test run-substring-selector <<-\EOF
 	> ok 1 - relevant test
@@ -734,7 +707,6 @@ test_expect_success '--run keyword selection' '
 		"--run invalid range start" \
 		--run="a-5" <<-\EOF &&
 	test_expect_success "passing test #1" "true"
-	test_done
 	EOF
 	check_sub_test_lib_test_err run-inv-range-start \
 		<<-\EOF_OUT 3<<-EOF_ERR
@@ -749,7 +721,6 @@ test_expect_success '--run invalid range end' '
 		"--run invalid range end" \
 		--run="1-z" <<-\EOF &&
 	test_expect_success "passing test #1" "true"
-	test_done
 	EOF
 	check_sub_test_lib_test_err run-inv-range-end \
 		<<-\EOF_OUT 3<<-EOF_ERR
@@ -773,8 +744,6 @@ test_expect_success 'tests respect prerequisites' '
 	test_expect_success HAVETHIS,HAVEIT "multiple prereqs" "true"
 	test_expect_success HAVEIT,DONTHAVEIT "mixed prereqs (yes,no)" "false"
 	test_expect_success DONTHAVEIT,HAVEIT "mixed prereqs (no,yes)" "false"
-
-	test_done
 	EOF
 
 	check_sub_test_lib_test prereqs <<-\EOF
@@ -799,8 +768,6 @@ test_expect_success 'tests respect lazy prerequisites' '
 	test_lazy_prereq LAZY_FALSE false
 	test_expect_success LAZY_FALSE "lazy prereq not satisfied" "false"
 	test_expect_success !LAZY_FALSE "negative false prereq" "true"
-
-	test_done
 	EOF
 
 	check_sub_test_lib_test lazy-prereqs <<-\EOF
@@ -828,8 +795,6 @@ test_expect_success 'nested lazy prerequisites' '
 		test_path_is_missing inner
 	"
 	test_expect_success NESTED_PREREQ "evaluate nested prereq" "true"
-
-	test_done
 	EOF
 
 	check_sub_test_lib_test nested-lazy <<-\EOF
@@ -845,8 +810,6 @@ test_expect_success 'lazy prereqs do not turn off tracing' '
 	test_lazy_prereq LAZY true
 
 	test_expect_success lazy "test_have_prereq LAZY && echo trace"
-
-	test_done
 	EOF
 
 	grep "echo trace" lazy-prereq-and-tracing/err
@@ -861,7 +824,6 @@ test_expect_success 'tests clean up after themselves' '
 	test_expect_success "cleanup happened" "
 		test $clean = yes
 	"
-	test_done
 	EOF
 
 	check_sub_test_lib_test cleanup <<-\EOF
@@ -883,7 +845,6 @@ test_expect_success 'tests clean up even on failures' '
 	test_expect_success "failure to clean up causes the test to fail" "
 		test_when_finished \"(exit 2)\"
 	"
-	test_done
 	EOF
 	check_sub_test_lib_test failing-cleanup <<-\EOF
 	> not ok 1 - tests clean up even after a failure
@@ -912,7 +873,6 @@ test_expect_success 'test_atexit is run' '
 		> ../../dont-clean-atexit &&
 		(exit 1)
 	"
-	test_done
 	EOF
 	test_path_is_file dont-clean-atexit &&
 	test_path_is_missing clean-atexit &&
@@ -992,7 +952,6 @@ test_expect_success 'test_bool_env invalid value' '
 		export envvar &&
 		test_bool_env envvar true
 	"
-	test_done
 	EOF
 	grep "error: test_bool_env requires bool values" invalid-bool-value/err
 '
@@ -1004,7 +963,6 @@ test_expect_success 'test_bool_env invalid default' '
 		export envvar &&
 		test_bool_env envvar default
 	"
-	test_done
 	EOF
 	grep "error: test_bool_env requires bool values" invalid-bool-default/err
 '
@@ -1331,7 +1289,6 @@ test_expect_success 'test_must_fail rejects a non-git command' '
 	test_expect_success "non-git command" "
 		test_must_fail grep ^$ notafile
 	"
-	test_done
 	EOF
 	grep "bug.*test_must_fail: only .git. is allowed" bug-fail-nongit/err
 '
@@ -1341,7 +1298,6 @@ test_expect_success 'test_must_fail rejects a non-git command with env' '
 	test_expect_success "non-git command with env" "
 		test_must_fail env var1=a var2=b grep ^$ notafile
 	"
-	test_done
 	EOF
 	grep "bug.*test_must_fail: only .git. is allowed" bug-fail-env/err
 '
-- 
2.30.1.1033.gd525307ce1
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help