git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 3/4] t0000: run cleaning test inside sub-test

From
Jeff King <peff@peff.net>
Date
Nov 20, 2020, 00:22 UTC
Message-ID
<20201120002247.GC307112@coredump.intra.peff.net>
In-Reply-To
<20201120001458.GA274082@coredump.intra.peff.net>

Our check of test_when_finished is done directly in the main script, and if we failed to clean, we complain and exit immediately. It's nicer to signal a test failure here, for a few reasons:

  - this gives better output to the user when run under a TAP harness
    like "prove"
  - constency; it's the only test left in the file that behaves this way
  - half of its "if" conditional is nonsense anyway; it picked up a
    reference to GIT_TEST_FAIL_PREREQS internal in dfe1a17df9 (tests:
    add a special setup where prerequisites fail, 2019-05-13) along with
    its neighbors, even though it has nothing to do with that flag

We could actually do this without a sub-test at all, and just put our two tests (one to do cleanup, and one to check that it happened) in the main script. But doing it in a subtest is conceptually cleaner (from the perspective of the main test script, we are checking only one thing), and it remains consistent with the "cleanup when failing" test directly after it, which has to happen in a sub-test (to avoid the main script complaining of the failed test).

Signed-off-by: Jeff King <peff@peff.net>
---
 t/t0000-basic.sh | 25 +++++++++++++++++--------
 1 file changed, 17 insertions(+), 8 deletions(-)
diff --git a/t/t0000-basic.sh b/t/t0000-basic.sh
index 3d36a87610..502375bdf6 100755
--- a/t/t0000-basic.sh
+++ b/t/t0000-basic.sh
@@ -852,16 +852,25 @@ test_expect_success 'lazy prereqs do not turn off tracing' "
 	grep 'echo trace' lazy-prereq-and-tracing/err
 "
 
-clean=no
 test_expect_success 'tests clean up after themselves' '
-	test_when_finished clean=yes
-'
+	run_sub_test_lib_test cleanup "test with cleanup" <<-\EOF &&
+	clean=no
+	test_expect_success "do cleanup" "
+		test_when_finished clean=yes
+	"
+	test_expect_success "cleanup happened" "
+		test $clean = yes
+	"
+	test_done
+	EOF
 
-if test -z "$GIT_TEST_FAIL_PREREQS_INTERNAL" -a $clean != yes
-then
-	say "bug in test framework: basic cleanup command does not work reliably"
-	exit 1
-fi
+	check_sub_test_lib_test cleanup <<-\EOF
+	ok 1 - do cleanup
+	ok 2 - cleanup happened
+	# passed all 2 test(s)
+	1..2
+	EOF
+'
 
 test_expect_success 'tests clean up even on failures' "
 	run_sub_test_lib_test_err \
-- 
2.29.2.730.g3e418f96ba
Previous: Jeff KingNext: Jeff King
Message 10 of 13 in “tests: make sure nested lazy prereqs work reliably”
  1. 1/2 tests: make sure nested lazy prereqs work reliablySZEDER Gábor, Nov 18, 2020
  2. 2/2 tests: fix description of 'test_set_prereq'SZEDER Gábor, Nov 18, 2020
  3. Junio C HamanoNov 18, 2020
  4. Jeff KingNov 19, 2020
  5. Jeff KingNov 19, 2020
  6. Junio C HamanoNov 19, 2020
  7. Jeff KingNov 20, 2020
  8. 1/4 t0000: keep clean-up tests togetherJeff King, Nov 20, 2020
  9. 2/4 t0000: run prereq tests inside sub-testJeff King, Nov 20, 2020
  10. 3/4 t0000: run cleaning test inside sub-testJeff King, Nov 20, 2020
  11. 4/4 t0000: consistently use single quotes for outer testsJeff King, Nov 20, 2020
  12. Junio C HamanoNov 20, 2020
  13. Junio C HamanoNov 20, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.