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

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

From
Jens Lehmann <jens.lehmann@web.de>
Date
Jan 17, 2012, 21:04 UTC
Message-ID
<4F15E25F.2000002@web.de>
In-Reply-To
<7vboq2rvhl.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. It invokes "$SHELL_PATH" to provide a sane shell for the user.

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 17.01.2012 20:15, schrieb Junio C Hamano:
Show 5 quoted lines
> Jens Lehmann <Jens.Lehmann@web.de> writes:
> What I cared was more about the hardcoded "bash". Believe it or not, there
> are boxes that lack it, and there are people who prefer other shells for
> their interactive work. At the very least, invoke "$SHELL_PATH" instead of
> bash there, perhaps?

Sure, I changed that in this version and explained it in the commit message.

Show 15 quoted lines
> If we wanted to allow an ad-hoc debugging of test scripts to sprinkle
> "test_pause $cmd", we might need to do something like:
> 
>> +test_pause () {
>> +	if test "$verbose" = t; then
>> +		bash <&6 >&3 2>&4
> 		${1-"$SHELL_PATH"} <&6 >&3 2>&4
>> +	else
>> +		error >&5 "test_pause requires --verbose"
>> +	fi
>> +}
> 
> but I do not think that is worth it. The debugging developer should easily
> be able to run gdb or whatever from the interactive shell you are giving
> here.

That's what I always do, so I'm fine with what this patch provides. And now the fact that you can temporarily pause a test and explore the trash directory is documented too ;-)

 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..709a300 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
+		"$SHELL_PATH" <&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.1.g8dae2
Previous: Junio C Hamano
Message 12 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.