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

[PATCH] test-lib: add the test_pause convenience function

From
Jens Lehmann <jens.lehmann@web.de>
Date
Jan 17, 2012, 08:21 UTC
Message-ID
<4F152F7C.9020902@web.de>
In-Reply-To
<7vk44ruupe.fsf@alter.siamese.dyndns.org>

Since 781f76b15 (test-lib: redirect stdin of tests) you can't simply put a "bash &&" into a test for debugging purposes anymore. Instead you'll have to use "bash <&6 >&3 2>&4".

As that invocation is not that easy to remember add the test_pause convenience function. This function also checks if the -v flag is given and will error out if that is not the case instead of letting the test hang until ^D is pressed.

Signed-off-by: Jens Lehmann <Jens.Lehmann@web.de>
---
Am 16.01.2012 23:51, schrieb Junio C Hamano:
Show 24 quoted lines
> Jeff King <peff@peff.net> writes:
> 
>> Nice. Many times I have added such a "bash" or "gdb" invocation then
>> forgotten "-v", only to scratch my head at why the test seemed to be
>> hanging.
>>
>> Two minor nits on the patch itself:
>> ...
>> 1. It may be worth putting a warning in the comment that this is never
>>    to be used in a real test, but only temporarily inserted.
>>
>> 2. I do this not just with bash, but with "gdb". I wonder if it is worth
>>    making this "test_foo bash", for some value of "foo" (the ones that
>>    occur to me are "debug" and "run", but of course they are taken).
>>
>>    Actually, I wonder if the existing test_debug could handle this
>>    already (though you do have to remember to add "--debug" to your
>>    command line, then).
> 
> I wondered the same thing from a different angle. My first reaction was
> "Why is this called 'bash' not 'sh'?" which naturally led to the same
> direction as yours "why not an arbitrary command 'test_debug xxx'?"
> 
> test_pause perhaps?

I really don't care deeply about the name, so test_pause is absolutely ok for me. I added some documentation in t/README too and made it an error when --verbose is not used.

Is it ok to invoke bash here or should sh be used?
 t/README      |   13 +++++++++++++
 t/test-lib.sh |   13 +++++++++++++
 2 files changed, 26 insertions(+), 0 deletions(-)
diff --git a/t/README b/t/README
index c85abaf..c09c582 100644
--- a/t/README
+++ b/t/README
@@ -548,6 +548,19 @@ library for your script to use.
 		...
 	'

+ - test_pause
+
+	This command is useful for writing and debugging tests and must be
+	removed before submitting. It halts the execution of the test and
+	spawns a shell in the trash directory. Exit the shell to continue
+	the test. Example:
+
+	test_expect_success 'test' '
+		git do-something >actual &&
+		test_pause &&
+		test_cmp expected actual
+	'
+
 Prerequisites
 -------------

diff --git a/t/test-lib.sh b/t/test-lib.sh
index a65dfc7..85084c4 100644
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
@@ -329,6 +329,19 @@ test_tick () {
 	export GIT_COMMITTER_DATE GIT_AUTHOR_DATE
 }

+# Stop execution and start a shell. This is useful for debugging tests and
+# only makes sense together with "-v".
+#
+# Be sure to remove all invocations of this command before submitting.
+
+test_pause () {
+	if test "$verbose" = t; then
+		bash <&6 >&3 2>&4
+	else
+		error >&5 "test_pause requires --verbose"
+	fi
+}
+
 # Call test_commit with the arguments "<message> [<file> [<contents>]]"
 #
 # This will commit a file with the given contents and the given commit
-- 
1.7.9.rc1.2.g0b847.dirty
Previous: Junio C HamanoNext: Junio C Hamano
Message 10 of 12 in “test-lib: add the test_bash convenience function”
  1. test-lib: add the test_bash convenience functionJens Lehmann, Jan 15, 2012
  2. Jeff KingJan 15, 2012
  3. test_interactive: interactive debugging in test scriptsPete Wyckoff, Jan 16, 2012
  4. Jens LehmannJan 16, 2012
  5. Jeff KingJan 16, 2012
  6. Jens LehmannJan 16, 2012
  7. Pete WyckoffJan 16, 2012
  8. Jeff KingJan 16, 2012
  9. Junio C HamanoJan 16, 2012
  10. test-lib: add the test_pause convenience functionJens Lehmann, Jan 17, 2012
  11. Junio C HamanoJan 17, 2012
  12. test-lib: add the test_pause convenience functionJens Lehmann, Jan 17, 2012

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.