tests: introduce test_must_fail
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>
This commit is contained in:
parent
fcbcfe707a
commit
90d0ed96b7
@ -67,16 +67,16 @@ test_expect_success 'checkout with simple prefix' '
|
|||||||
|
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_failure 'relative path outside tree should fail' \
|
test_expect_success 'relative path outside tree should fail' \
|
||||||
'git checkout HEAD -- ../../Makefile'
|
'test_must_fail git checkout HEAD -- ../../Makefile'
|
||||||
|
|
||||||
test_expect_failure 'incorrect relative path to file should fail (1)' \
|
test_expect_success 'incorrect relative path to file should fail (1)' \
|
||||||
'git checkout HEAD -- ../file0'
|
'test_must_fail git checkout HEAD -- ../file0'
|
||||||
|
|
||||||
test_expect_failure 'incorrect relative path should fail (2)' \
|
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_failure 'incorrect relative path should fail (3)' \
|
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
|
test_done
|
||||||
|
@ -257,6 +257,23 @@ test_expect_code () {
|
|||||||
echo >&3 ""
|
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.
|
# Most tests can use the created repository, but some may need to create more.
|
||||||
# Usage: test_create_repo <directory>
|
# Usage: test_create_repo <directory>
|
||||||
test_create_repo () {
|
test_create_repo () {
|
||||||
|
Loading…
Reference in New Issue
Block a user