[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