From: Jonathan Nieder <jrnieder@gmail.com>
To: Elijah Newren <newren@gmail.com>
Cc: git@vger.kernel.org, gitster@pobox.com, avarab@gmail.com
Subject: Re: [PATCHv5 01/16] test-lib: make test_expect_code a test command
Date: Sun, 3 Oct 2010 09:13:39 -0500 [thread overview]
Message-ID: <20101003141339.GB17084@burratino> (raw)
In-Reply-To: <1286082644-31595-2-git-send-email-newren@gmail.com>
Elijah Newren wrote:
> --- a/t/README
> +++ b/t/README
> @@ -482,6 +475,15 @@ library for your script to use.
> 'Perl API' \
> "$PERL_PATH" "$TEST_DIRECTORY"/t9700/test.pl
>
> + - test_expect_code <exit-code> <git-command>
> +
> + Run a git command and ensure that it exits with the given exit
> + code. For example:
> +
> + test_expect_success 'Merge with d/f conflicts' '
> + test_expect_code 1 git merge "merge msg" B master
> + '
Side note: this helper should be safe to use even for non-git
commands. "Huh?" you might ask. "But test_must_fail and
test_might_fail..." Well, the distinction is this: test_must_fail and
test_might_fail rely on details of git's funny exit code conventions
--- e.g., that 130 is not a controlled failure and 129 is one ---
while test_expect_code has simpler, more generally valid semantics.
But maybe in practice this helper would only be used for git commands
anyway.
> --- a/t/t0000-basic.sh
> +++ b/t/t0000-basic.sh
> @@ -130,22 +130,57 @@ test_expect_success 'tests clean up after themselves' '
[...]
> +test_expect_success 'tests clean up even on failures' "
> + mkdir failing-cleanup &&
> + (cd failing-cleanup &&
> + cat >failing-cleanup.sh <<EOF &&
> +#!$SHELL_PATH
Is $SHELL_PATH allowed to contain a shell metacharacter? (just
curious).
> +
> +test_description='Failing tests with cleanup commands'
> +
> +# Point to the t/test-lib.sh, which isn't in ../ as usual
> +TEST_DIRECTORY=\"$TEST_DIRECTORY\"
> +. \"\$TEST_DIRECTORY\"/test-lib.sh
Quoting issues? I suspect the first $TEST_DIRECTORY here would
be twice expanded and the second would be once expanded before
failing-cleanup.sh is written.
On the other hand, a $TEST_DIRECTORY with backslashes in it is
asking for trouble for other reasons already.
> +
> +test_expect_success 'tests clean up even after a failure' '
> + touch clean-after-failure &&
> + test_when_finished rm clean-after-failure &&
> + (exit 1)
> '
>
> +test_expect_success 'failure to clean up causes the test to fail' '
> + test_when_finished \"(exit 2)\"
This changes the semantics of the test: before, it checked that
the exit code was propagated out in these failure cases, but now
it just checks that the test fails.
The new semantics are probably more appropriate --- who relies on
the exact exit status from a test script, anyway?
> --- a/t/t1504-ceiling-dirs.sh
> +++ b/t/t1504-ceiling-dirs.sh
[...]
> --- a/t/t6020-merge-df.sh
> +++ b/t/t6020-merge-df.sh
[...]
Nice. :)
> --- a/t/test-lib.sh
> +++ b/t/test-lib.sh
> @@ -658,6 +640,28 @@ test_might_fail () {
> return 0
> }
>
> +# Similar to test_must_fail and test_might_fail, but check that a
> +# given command exited with a given exit code. Meant to be used as:
> +#
> +# test_expect_success 'Merge with d/f conflicts' '
> +# test_expect_code 1 git merge "merge msg" B master
> +# '
> +
> +test_expect_code () {
> + want_code=$1
> + shift
> + "$@"
> + exit_code=$?
> + if test $exit_code = $want_code
> + then
> + echo >&2 "test_expect_code: command exited with $exit_code: $*"
> + return 0
This makes the tests noisier on success. I have no strong feelings
either way about that, but it's probably worth mentioning in the commit
message.
Anyway, for what it's worth,
Acked-by: Jonathan Nieder <jrnieder@gmail.com>
Thanks.
next prev parent reply other threads:[~2010-10-03 14:17 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-10-03 5:10 [PATCHv5 00/16] Add missing &&'s in the testsuite Elijah Newren
2010-10-03 5:10 ` [PATCHv5 01/16] test-lib: make test_expect_code a test command Elijah Newren
2010-10-03 14:13 ` Jonathan Nieder [this message]
2010-10-03 19:29 ` Elijah Newren
2010-10-03 5:10 ` [PATCHv5 02/16] t3020 (ls-files-error-unmatch): remove stray '1' from end of file Elijah Newren
2010-10-03 5:10 ` [PATCHv5 03/16] t4017 (diff-retval): replace manual exit code check with test_expect_code Elijah Newren
2010-10-03 13:47 ` Jonathan Nieder
2010-10-03 19:33 ` Elijah Newren
2010-10-03 5:10 ` [PATCHv5 04/16] t100[12] (read-tree-m-2way, read_tree_m_u_2way): add missing && Elijah Newren
2010-10-03 5:10 ` [PATCHv5 05/16] t4002 (diff-basic): use test_might_fail for commands that might fail Elijah Newren
2010-10-03 5:10 ` [PATCHv5 06/16] t4202 (log): Replace '<git-command> || :' with test_might_fail Elijah Newren
2010-10-03 5:10 ` [PATCHv5 07/16] t3600 (rm): add lots of missing && Elijah Newren
2010-10-03 14:28 ` Jonathan Nieder
2010-10-03 19:37 ` Elijah Newren
2010-10-03 5:10 ` [PATCHv5 08/16] t4019 (diff-wserror): " Elijah Newren
2010-10-03 14:32 ` Jonathan Nieder
2010-10-04 2:52 ` Ævar Arnfjörð Bjarmason
2010-10-03 5:10 ` [PATCHv5 09/16] t4026 (color): remove unneeded and unchained command Elijah Newren
2010-10-03 5:10 ` [PATCHv5 10/16] t5602 (clone-remote-exec): add missing && Elijah Newren
2010-10-03 5:10 ` [PATCHv5 11/16] t6016 (rev-list-graph-simplify-history): " Elijah Newren
2010-10-03 5:10 ` [PATCHv5 12/16] t7001 (mv): " Elijah Newren
2010-10-03 5:10 ` [PATCHv5 13/16] t7601 (merge-pull-config): " Elijah Newren
2010-10-03 5:10 ` [PATCHv5 14/16] t7800 (difftool): " Elijah Newren
2010-10-03 5:10 ` [PATCHv5 15/16] Add missing &&'s throughout the testsuite Elijah Newren
2010-10-03 14:46 ` Jonathan Nieder
2010-10-03 19:39 ` Elijah Newren
2010-10-03 23:34 ` Junio C Hamano
2010-10-03 5:10 ` [PATCHv5 16/16] Introduce portable_unset and use it to ensure proper && chaining Elijah Newren
2010-10-03 14:51 ` Jonathan Nieder
2010-10-03 19:41 ` Elijah Newren
2010-10-03 23:34 ` Junio C Hamano
2010-10-03 14:54 ` [PATCHv5 00/16] Add missing &&'s in the testsuite Jonathan Nieder
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20101003141339.GB17084@burratino \
--to=jrnieder@gmail.com \
--cc=avarab@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=newren@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).