Skip to content

Commit

Permalink
tests: introduce test_must_fail
Browse files Browse the repository at this point in the history
When we expect a git command to notice and signal errors, we
carelessly wrote in our tests:

    test_expect_success 'reject bogus request' '
        do something &&
        do something else &&
        ! git command
    '

but a non-zero exit could come from the "git command" segfaulting.

A new helper function "tset_must_fail" is introduced and it is
meant to be used to make sure the command gracefully fails (iow,
dying and exiting with non zero status is counted as a failure
to "gracefully fail").  The above example should be written as:

    test_expect_success 'reject bogus request' '
        do something &&
        do something else &&
        test_must_fail git command
    '

Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Junio C Hamano committed Feb 29, 2008
1 parent 301e42e commit 7435982
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 4 deletions.
8 changes: 4 additions & 4 deletions t/t2008-checkout-subdir.sh
Original file line number Diff line number Diff line change
Expand Up @@ -68,15 +68,15 @@ test_expect_success 'checkout with simple prefix' '
'

test_expect_success 'relative path outside tree should fail' \
'! git checkout HEAD -- ../../Makefile'
'test_must_fail git checkout HEAD -- ../../Makefile'

test_expect_success 'incorrect relative path to file should fail (1)' \
'! git checkout HEAD -- ../file0'
'test_must_fail git checkout HEAD -- ../file0'

test_expect_success 'incorrect relative path should fail (2)' \
'( cd dir1 && ! git checkout HEAD -- ./file0 )'
'( cd dir1 && test_must_fail git checkout HEAD -- ./file0 )'

test_expect_success 'incorrect relative path should fail (3)' \
'( cd dir1 && ! git checkout HEAD -- ../../file0 )'
'( cd dir1 && test_must_fail git checkout HEAD -- ../../file0 )'

test_done
17 changes: 17 additions & 0 deletions t/test-lib.sh
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,23 @@ test_expect_code () {
echo >&3 ""
}

# This is not among top-level (test_expect_success | test_expect_failure)
# but is a prefix that can be used in the test script, like:
#
# test_expect_success 'complain and die' '
# do something &&
# do something else &&
# test_must_fail git checkout ../outerspace
# '
#
# Writing this as "! git checkout ../outerspace" is wrong, because
# the failure could be due to a segv. We want a controlled failure.

test_must_fail () {
"$@"
test $? -gt 0 -a $? -le 128
}

# Most tests can use the created repository, but some may need to create more.
# Usage: test_create_repo <directory>
test_create_repo () {
Expand Down

0 comments on commit 7435982

Please sign in to comment.