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

[RFC PATCH 1/4] t0080: turn t-basic unit test into a helper

From
Josh Steadmon <steadmon@google.com>
Date
Jan 16, 2024, 22:22 UTC
Message-ID
<a9f67ed703c8314f0f0507ffb83b503717b846b3.1705443632.git.steadmon@google.com>
In-Reply-To
<cover.1705443632.git.steadmon@google.com>

While t/unit-tests/t-basic.c uses the unit-test framework added in e137fe3b29 (unit tests: add TAP unit test framework, 2023-11-09), it is not a true unit test in that it intentionally fails in order to exercise various codepaths in the unit-test framework. Thus, we intentionally exclude it when running unit tests through the various t/Makefile targets. Instead, it is executed by t0080-unit-test-output.sh, which verifies its output follows the TAP format expected for the various pass, skip, or fail cases.

As such, it makes more sense for t-basic to be a helper item for t0080-unit-test-output.sh, so let's move it to t/t0080/t-basic.c and adjust Makefiles and .gitignores as necessary.

This has the additional benefit that test harnesses seeking to run all unit tests can find them with a simple glob of "t/unit-tests/bin/t-*", with no exceptions needed. This will be important in a later patch where we add support for running the unit tests via a test-tool subcommand.

Signed-off-by: Josh Steadmon <steadmon@google.com>
---
 Makefile                          | 17 +++++++++++++----
 t/Makefile                        |  2 +-
 t/t0080-unit-test-output.sh       | 24 ++++++++++++------------
 t/t0080/.gitignore                |  1 +
 t/{unit-tests => t0080}/t-basic.c |  2 +-
 5 files changed, 28 insertions(+), 18 deletions(-)
 create mode 100644 t/t0080/.gitignore
 rename t/{unit-tests => t0080}/t-basic.c (98%)
diff --git a/Makefile b/Makefile
index 88ba7a3c51..ab32ec1101 100644
--- a/Makefile
+++ b/Makefile
@@ -683,6 +683,7 @@ TEST_OBJS =
 TEST_PROGRAMS_NEED_X =
 THIRD_PARTY_SOURCES =
 UNIT_TEST_PROGRAMS =
+UNIT_TEST_HELPERS =
 UNIT_TEST_DIR = t/unit-tests
 UNIT_TEST_BIN = $(UNIT_TEST_DIR)/bin
 
@@ -1339,10 +1340,12 @@ THIRD_PARTY_SOURCES += compat/regex/%
 THIRD_PARTY_SOURCES += sha1collisiondetection/%
 THIRD_PARTY_SOURCES += sha1dc/%
 
-UNIT_TEST_PROGRAMS += t-basic
 UNIT_TEST_PROGRAMS += t-strbuf
 UNIT_TEST_PROGS = $(patsubst %,$(UNIT_TEST_BIN)/%$X,$(UNIT_TEST_PROGRAMS))
+UNIT_TEST_HELPERS += t/t0080/t-basic
+UNIT_TEST_HELPER_PROGS = $(patsubst %,%$X,$(UNIT_TEST_HELPERS))
 UNIT_TEST_OBJS = $(patsubst %,$(UNIT_TEST_DIR)/%.o,$(UNIT_TEST_PROGRAMS))
+UNIT_TEST_OBJS += $(patsubst %,%.o,$(UNIT_TEST_HELPERS))
 UNIT_TEST_OBJS += $(UNIT_TEST_DIR)/test-lib.o
 
 # xdiff and reftable libs may in turn depend on what is in libgit.a
@@ -3189,7 +3192,9 @@ endif
 
 test_bindir_programs := $(patsubst %,bin-wrappers/%,$(BINDIR_PROGRAMS_NEED_X) $(BINDIR_PROGRAMS_NO_X) $(TEST_PROGRAMS_NEED_X))
 
-all:: $(TEST_PROGRAMS) $(test_bindir_programs) $(UNIT_TEST_PROGS)
+all:: $(TEST_PROGRAMS) $(test_bindir_programs)
+
+all:: $(UNIT_TEST_PROGS) $(UNIT_TEST_HELPER_PROGS)
 
 bin-wrappers/%: wrap-for-bin.sh
 	$(call mkdir_p_parent_template)
@@ -3620,7 +3625,7 @@ endif
 
 artifacts-tar:: $(ALL_COMMANDS_TO_INSTALL) $(SCRIPT_LIB) $(OTHER_PROGRAMS) \
 		GIT-BUILD-OPTIONS $(TEST_PROGRAMS) $(test_bindir_programs) \
-		$(UNIT_TEST_PROGS) $(MOFILES)
+		$(UNIT_TEST_PROGS) $(UNIT_TEST_HELPER_PROGS) $(MOFILES)
 	$(QUIET_SUBDIR0)templates $(QUIET_SUBDIR1) \
 		SHELL_PATH='$(SHELL_PATH_SQ)' PERL_PATH='$(PERL_PATH_SQ)'
 	test -n "$(ARTIFACTS_DIRECTORY)"
@@ -3682,7 +3687,7 @@ clean: profile-clean coverage-clean cocciclean
 	$(RM) headless-git.o
 	$(RM) $(LIB_FILE) $(XDIFF_LIB) $(REFTABLE_LIB) $(REFTABLE_TEST_LIB)
 	$(RM) $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) $(OTHER_PROGRAMS)
-	$(RM) $(TEST_PROGRAMS) $(UNIT_TEST_PROGS)
+	$(RM) $(TEST_PROGRAMS) $(UNIT_TEST_PROGS) $(UNIT_TEST_HELPER_PROGS)
 	$(RM) $(FUZZ_PROGRAMS)
 	$(RM) $(SP_OBJ)
 	$(RM) $(HCC)
@@ -3869,6 +3874,10 @@ $(UNIT_TEST_PROGS): $(UNIT_TEST_BIN)/%$X: $(UNIT_TEST_DIR)/%.o $(UNIT_TEST_DIR)/
 	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) \
 		$(filter %.o,$^) $(filter %.a,$^) $(LIBS)
 
+$(UNIT_TEST_HELPER_PROGS): %$X: %.o $(UNIT_TEST_DIR)/test-lib.o $(GITLIBS) GIT-LDFLAGS
+	$(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) \
+		$(filter %.o,$^) $(filter %.a,$^) $(LIBS)
+
 .PHONY: build-unit-tests unit-tests
 build-unit-tests: $(UNIT_TEST_PROGS)
 unit-tests: $(UNIT_TEST_PROGS)
diff --git a/t/Makefile b/t/Makefile
index b7a6fefe28..0bee7bc6ea 100644
--- a/t/Makefile
+++ b/t/Makefile
@@ -42,7 +42,7 @@ TPERF = $(sort $(wildcard perf/p[0-9][0-9][0-9][0-9]-*.sh))
 TINTEROP = $(sort $(wildcard interop/i[0-9][0-9][0-9][0-9]-*.sh))
 CHAINLINTTESTS = $(sort $(patsubst chainlint/%.test,%,$(wildcard chainlint/*.test)))
 CHAINLINT = '$(PERL_PATH_SQ)' chainlint.pl
-UNIT_TESTS = $(sort $(filter-out %.pdb unit-tests/bin/t-basic%,$(wildcard unit-tests/bin/t-*)))
+UNIT_TESTS = $(sort $(filter-out %.pdb,$(wildcard unit-tests/bin/t-*)))
 
 # `test-chainlint` (which is a dependency of `test-lint`, `test` and `prove`)
 # checks all tests in all scripts via a single invocation, so tell individual
diff --git a/t/t0080-unit-test-output.sh b/t/t0080-unit-test-output.sh
index 961b54b06c..7431023d97 100755
--- a/t/t0080-unit-test-output.sh
+++ b/t/t0080-unit-test-output.sh
@@ -8,50 +8,50 @@ test_expect_success 'TAP output from unit tests' '
 	cat >expect <<-EOF &&
 	ok 1 - passing test
 	ok 2 - passing test and assertion return 1
-	# check "1 == 2" failed at t/unit-tests/t-basic.c:76
+	# check "1 == 2" failed at t/t0080/t-basic.c:76
 	#    left: 1
 	#   right: 2
 	not ok 3 - failing test
 	ok 4 - failing test and assertion return 0
 	not ok 5 - passing TEST_TODO() # TODO
 	ok 6 - passing TEST_TODO() returns 1
-	# todo check ${SQ}check(x)${SQ} succeeded at t/unit-tests/t-basic.c:25
+	# todo check ${SQ}check(x)${SQ} succeeded at t/t0080/t-basic.c:25
 	not ok 7 - failing TEST_TODO()
 	ok 8 - failing TEST_TODO() returns 0
-	# check "0" failed at t/unit-tests/t-basic.c:30
+	# check "0" failed at t/t0080/t-basic.c:30
 	# skipping test - missing prerequisite
-	# skipping check ${SQ}1${SQ} at t/unit-tests/t-basic.c:32
+	# skipping check ${SQ}1${SQ} at t/t0080/t-basic.c:32
 	ok 9 - test_skip() # SKIP
 	ok 10 - skipped test returns 1
 	# skipping test - missing prerequisite
 	ok 11 - test_skip() inside TEST_TODO() # SKIP
 	ok 12 - test_skip() inside TEST_TODO() returns 1
-	# check "0" failed at t/unit-tests/t-basic.c:48
+	# check "0" failed at t/t0080/t-basic.c:48
 	not ok 13 - TEST_TODO() after failing check
 	ok 14 - TEST_TODO() after failing check returns 0
-	# check "0" failed at t/unit-tests/t-basic.c:56
+	# check "0" failed at t/t0080/t-basic.c:56
 	not ok 15 - failing check after TEST_TODO()
 	ok 16 - failing check after TEST_TODO() returns 0
-	# check "!strcmp("\thello\\\\", "there\"\n")" failed at t/unit-tests/t-basic.c:61
+	# check "!strcmp("\thello\\\\", "there\"\n")" failed at t/t0080/t-basic.c:61
 	#    left: "\011hello\\\\"
 	#   right: "there\"\012"
-	# check "!strcmp("NULL", NULL)" failed at t/unit-tests/t-basic.c:62
+	# check "!strcmp("NULL", NULL)" failed at t/t0080/t-basic.c:62
 	#    left: "NULL"
 	#   right: NULL
-	# check "${SQ}a${SQ} == ${SQ}\n${SQ}" failed at t/unit-tests/t-basic.c:63
+	# check "${SQ}a${SQ} == ${SQ}\n${SQ}" failed at t/t0080/t-basic.c:63
 	#    left: ${SQ}a${SQ}
 	#   right: ${SQ}\012${SQ}
-	# check "${SQ}\\\\${SQ} == ${SQ}\\${SQ}${SQ}" failed at t/unit-tests/t-basic.c:64
+	# check "${SQ}\\\\${SQ} == ${SQ}\\${SQ}${SQ}" failed at t/t0080/t-basic.c:64
 	#    left: ${SQ}\\\\${SQ}
 	#   right: ${SQ}\\${SQ}${SQ}
 	not ok 17 - messages from failing string and char comparison
-	# BUG: test has no checks at t/unit-tests/t-basic.c:91
+	# BUG: test has no checks at t/t0080/t-basic.c:91
 	not ok 18 - test with no checks
 	ok 19 - test with no checks returns 0
 	1..19
 	EOF
 
-	! "$GIT_BUILD_DIR"/t/unit-tests/bin/t-basic >actual &&
+	! "$GIT_BUILD_DIR"/t/t0080/t-basic >actual &&
 	test_cmp expect actual
 '
 
diff --git a/t/t0080/.gitignore b/t/t0080/.gitignore
new file mode 100644
index 0000000000..1903542827
--- /dev/null
+++ b/t/t0080/.gitignore
@@ -0,0 +1 @@
+/t-basic
diff --git a/t/unit-tests/t-basic.c b/t/t0080/t-basic.c
similarity index 98%
rename from t/unit-tests/t-basic.c
rename to t/t0080/t-basic.c
index fda1ae59a6..83727221b1 100644
--- a/t/unit-tests/t-basic.c
+++ b/t/t0080/t-basic.c
@@ -1,4 +1,4 @@
-#include "test-lib.h"
+#include "../unit-tests/test-lib.h"
 
 /*
  * The purpose of this "unit test" is to verify a few invariants of the unit
-- 
2.43.0.381.gb435a96ce8-goog
Previous: Josh SteadmonNext: Junio C Hamano
Message 2 of 99 in “test-tool: add unit test suite runner”
  1. 0/4 test-tool: add unit test suite runnerJosh Steadmon, Jan 16, 2024
  2. 1/4 t0080: turn t-basic unit test into a helperJosh Steadmon, Jan 16, 2024
  3. Junio C HamanoJan 16, 2024
  4. Jeff KingJan 23, 2024
  5. Josh SteadmonFeb 1, 2024
  6. 2/4 test-tool run-command testsuite: support unit testsJosh Steadmon, Jan 16, 2024
  7. Junio C HamanoJan 16, 2024
  8. Junio C HamanoJan 16, 2024
  9. Jeff KingJan 23, 2024
  10. Josh SteadmonFeb 1, 2024
  11. Junio C HamanoFeb 1, 2024
  12. Josh SteadmonFeb 1, 2024
  13. Josh SteadmonFeb 1, 2024
  14. 3/4 unit tests: add rule for running with test-toolJosh Steadmon, Jan 16, 2024
  15. 4/4 t/Makefile: run unit tests alongside shell testsJosh Steadmon, Jan 16, 2024
  16. Junio C HamanoJan 16, 2024
  17. 0/6 test-tool: add unit test suite runnerJosh Steadmon, Feb 3, 2024
  18. 1/6 t0080: turn t-basic unit test into a helperJosh Steadmon, Feb 3, 2024
  19. Junio C HamanoFeb 7, 2024
  20. Josh SteadmonFeb 12, 2024
  21. Jeff KingFeb 7, 2024
  22. Junio C HamanoFeb 8, 2024
  23. Josh SteadmonFeb 12, 2024
  24. Junio C HamanoFeb 12, 2024
  25. Jeff KingFeb 13, 2024
  26. rsbecker@nexbridge.comFeb 13, 2024
  27. Josh SteadmonFeb 22, 2024
  28. rsbecker@nexbridge.comFeb 23, 2024
  29. Junio C HamanoFeb 13, 2024
  30. Josh SteadmonFeb 22, 2024
  31. 2/6 test-tool run-command testsuite: get shell from envJosh Steadmon, Feb 3, 2024
  32. Junio C HamanoFeb 7, 2024
  33. Josh SteadmonFeb 12, 2024
  34. 3/6 test-tool run-command testsuite: remove hardcoded filterJosh Steadmon, Feb 3, 2024
  35. Junio C HamanoFeb 7, 2024
  36. Josh SteadmonFeb 12, 2024
  37. Junio C HamanoFeb 12, 2024
  38. 4/6 test-tool run-command testsuite: support unit testsJosh Steadmon, Feb 3, 2024
  39. phillip.wood123@gmail.comFeb 5, 2024
  40. Josh SteadmonFeb 12, 2024
  41. Junio C HamanoFeb 7, 2024
  42. Josh SteadmonFeb 23, 2024
  43. 5/6 unit tests: add rule for running with test-toolJosh Steadmon, Feb 3, 2024
  44. Junio C HamanoFeb 7, 2024
  45. 6/6 t/Makefile: run unit tests alongside shell testsJosh Steadmon, Feb 3, 2024
  46. Junio C HamanoFeb 7, 2024
  47. Jeff KingFeb 7, 2024
  48. Junio C HamanoFeb 7, 2024
  49. Junio C HamanoFeb 3, 2024
  50. Josh SteadmonFeb 12, 2024
  51. Junio C HamanoFeb 7, 2024
  52. 0/7 test-tool: add unit test suite runnerJosh Steadmon, Feb 23, 2024
  53. 1/7 t0080: turn t-basic unit test into a helperJosh Steadmon, Feb 23, 2024
  54. 2/7 test-tool run-command testsuite: get shell from envJosh Steadmon, Feb 23, 2024
  55. 3/7 test-tool run-command testsuite: remove hardcoded filterJosh Steadmon, Feb 23, 2024
  56. 4/7 test-tool run-command testsuite: support unit testsJosh Steadmon, Feb 23, 2024
  57. 5/7 unit tests: add rule for running with test-toolJosh Steadmon, Feb 23, 2024
  58. 6/7 t/Makefile: run unit tests alongside shell testsJosh Steadmon, Feb 23, 2024
  59. Jeff KingMar 27, 2024
  60. Josh SteadmonApr 11, 2024
  61. Jeff KingApr 12, 2024
  62. Josh SteadmonApr 24, 2024
  63. 7/7 ci: use test-tool as unit test runner on WindowsJosh Steadmon, Feb 23, 2024
  64. Junio C HamanoMar 26, 2024
  65. Jeff KingMar 27, 2024
  66. 0/7 test-tool: add unit test suite runnerJosh Steadmon, Apr 24, 2024
  67. 1/7 t0080: turn t-basic unit test into a helperJosh Steadmon, Apr 24, 2024
  68. 2/7 test-tool run-command testsuite: get shell from envJosh Steadmon, Apr 24, 2024
  69. 3/7 test-tool run-command testsuite: remove hardcoded filterJosh Steadmon, Apr 24, 2024
  70. 4/7 test-tool run-command testsuite: support unit testsJosh Steadmon, Apr 24, 2024
  71. 5/7 unit tests: add rule for running with test-toolJosh Steadmon, Apr 24, 2024
  72. 6/7 t/Makefile: run unit tests alongside shell testsJosh Steadmon, Apr 24, 2024
  73. Junio C HamanoApr 24, 2024
  74. Josh SteadmonApr 30, 2024
  75. Jeff KingMay 3, 2024
  76. Junio C HamanoMay 3, 2024
  77. Josh SteadmonMay 6, 2024
  78. 7/7 ci: use test-tool as unit test runner on WindowsJosh Steadmon, Apr 24, 2024
  79. 0/7 test-tool: add unit test suite runnerJosh Steadmon, Apr 30, 2024
  80. 1/7 t0080: turn t-basic unit test into a helperJosh Steadmon, Apr 30, 2024
  81. 2/7 test-tool run-command testsuite: get shell from envJosh Steadmon, Apr 30, 2024
  82. 3/7 test-tool run-command testsuite: remove hardcoded filterJosh Steadmon, Apr 30, 2024
  83. 4/7 test-tool run-command testsuite: support unit testsJosh Steadmon, Apr 30, 2024
  84. 5/7 unit tests: add rule for running with test-toolJosh Steadmon, Apr 30, 2024
  85. 6/7 t/Makefile: run unit tests alongside shell testsJosh Steadmon, Apr 30, 2024
  86. Junio C HamanoApr 30, 2024
  87. Josh SteadmonMay 6, 2024
  88. 7/7 ci: use test-tool as unit test runner on WindowsJosh Steadmon, Apr 30, 2024
  89. Junio C HamanoApr 30, 2024
  90. Josh SteadmonMay 6, 2024
  91. 0/7 test-tool: add unit test suite runnerJosh Steadmon, May 6, 2024
  92. 1/7 t0080: turn t-basic unit test into a helperJosh Steadmon, May 6, 2024
  93. 2/7 test-tool run-command testsuite: get shell from envJosh Steadmon, May 6, 2024
  94. 3/7 test-tool run-command testsuite: remove hardcoded filterJosh Steadmon, May 6, 2024
  95. 4/7 test-tool run-command testsuite: support unit testsJosh Steadmon, May 6, 2024
  96. 5/7 unit tests: add rule for running with test-toolJosh Steadmon, May 6, 2024
  97. 6/7 t/Makefile: run unit tests alongside shell testsJosh Steadmon, May 6, 2024
  98. 7/7 ci: use test-tool as unit test runner on WindowsJosh Steadmon, May 6, 2024
  99. Junio C HamanoMay 6, 2024

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.