test-lib: make test_expect_code a test command
Change test_expect_code to be a normal test command instead of a
top-level command.
As a top-level command it would fail in cases like:
test_expect_code 1 'phoney' '
foo && bar && (exit 1)
'
Here the test might incorrectly succeed if "foo" or "bar" happened to
fail with exit status 1. Instead we now do:
test_expect_success 'phoney' '
foo && bar && test_expect_code 1 "(exit 1)"
'
Which will only succeed if "foo" and "bar" return status 0, and "(exit
1)" returns status 1. Note that test_expect_code has been made slightly
noisier, as it reports the exit code it receives even upon success.
Some test code in t0000-basic.sh relied on the old semantics of
test_expect_code to test the test_when_finished command. I've
converted that code to use an external test similar to the TODO test I
added in v1.7.3-rc0~2^2~3.
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Acked-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
6db2103f92
commit
892e6f7ea6
@ -130,22 +130,57 @@ test_expect_success 'tests clean up after themselves' '
|
||||
test_when_finished clean=yes
|
||||
'
|
||||
|
||||
cleaner=no
|
||||
test_expect_code 1 'tests clean up even after a failure' '
|
||||
test_when_finished cleaner=yes &&
|
||||
(exit 1)
|
||||
'
|
||||
|
||||
if test $clean$cleaner != yesyes
|
||||
if test $clean != yes
|
||||
then
|
||||
say "bug in test framework: cleanup commands do not work reliably"
|
||||
say "bug in test framework: basic cleanup command does not work reliably"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
test_expect_code 2 'failure to clean up causes the test to fail' '
|
||||
test_when_finished "(exit 2)"
|
||||
test_expect_success 'tests clean up even on failures' "
|
||||
mkdir failing-cleanup &&
|
||||
(cd failing-cleanup &&
|
||||
cat >failing-cleanup.sh <<EOF &&
|
||||
#!$SHELL_PATH
|
||||
|
||||
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
|
||||
|
||||
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)\"
|
||||
'
|
||||
|
||||
test_done
|
||||
EOF
|
||||
chmod +x failing-cleanup.sh &&
|
||||
test_must_fail ./failing-cleanup.sh >out 2>err &&
|
||||
! test -s err &&
|
||||
! test -f \"trash directory.failing-cleanup/clean-after-failure\" &&
|
||||
sed -e 's/Z$//' >expect <<\EOF &&
|
||||
not ok - 1 tests clean up even after a failure
|
||||
# Z
|
||||
# touch clean-after-failure &&
|
||||
# test_when_finished rm clean-after-failure &&
|
||||
# (exit 1)
|
||||
# Z
|
||||
not ok - 2 failure to clean up causes the test to fail
|
||||
# Z
|
||||
# test_when_finished \"(exit 2)\"
|
||||
# Z
|
||||
# failed 2 among 2 test(s)
|
||||
1..2
|
||||
EOF
|
||||
test_cmp expect out)
|
||||
"
|
||||
|
||||
################################################################
|
||||
# Basics of the basics
|
||||
|
||||
|
||||
Reference in New Issue
Block a user