@matheusbsbs / matheus-bagliano / commits / 90d0ed96b7
Fork 0

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>

Junio C Hamano committed Feb 28, 2008 at 13:09 UTC 90d0ed96b76ee51f8ae6f32923b92e7b20ba73c0
2 files changed +25 -8
t/t2008-checkout-subdir.sh
+8 -8
@@ -67,16 +67,16 @@ test_expect_success 'checkout with simple prefix' '
67
68 '
69
70 -test_expect_failure 'relative path outside tree should fail' \
71 - 'git checkout HEAD -- ../../Makefile'
70 +test_expect_success 'relative path outside tree should fail' \
71 + 'test_must_fail git checkout HEAD -- ../../Makefile'
72
73 -test_expect_failure 'incorrect relative path to file should fail (1)' \
74 - 'git checkout HEAD -- ../file0'
73 +test_expect_success 'incorrect relative path to file should fail (1)' \
74 + 'test_must_fail git checkout HEAD -- ../file0'
75
76 -test_expect_failure 'incorrect relative path should fail (2)' \
77 - '( cd dir1 && git checkout HEAD -- ./file0 )'
76 +test_expect_success 'incorrect relative path should fail (2)' \
77 + '( cd dir1 && test_must_fail git checkout HEAD -- ./file0 )'
78
79 -test_expect_failure 'incorrect relative path should fail (3)' \
80 - '( cd dir1 && git checkout HEAD -- ../../file0 )'
79 +test_expect_success 'incorrect relative path should fail (3)' \
80 + '( cd dir1 && test_must_fail git checkout HEAD -- ../../file0 )'
81
82 test_done
t/test-lib.sh
+17
@@ -257,6 +257,23 @@ test_expect_code () {
257 echo >&3 ""
258 }
259
260 +# This is not among top-level (test_expect_success | test_expect_failure)
261 +# but is a prefix that can be used in the test script, like:
262 +#
263 +# test_expect_success 'complain and die' '
264 +# do something &&
265 +# do something else &&
266 +# test_must_fail git checkout ../outerspace
267 +# '
268 +#
269 +# Writing this as "! git checkout ../outerspace" is wrong, because
270 +# the failure could be due to a segv. We want a controlled failure.
271 +
272 +test_must_fail () {
273 + "$@"
274 + test $? -gt 0 -a $? -le 128
275 +}
276 +
277 # Most tests can use the created repository, but some may need to create more.
278 # Usage: test_create_repo <directory>
279 test_create_repo () {