git/t/t0080-unit-test-output.sh
René Scharfe 96c6304c18 unit-tests: add if_test
The macro TEST only allows defining a test that consists of a single
expression.  Add a new macro, if_test, which provides a way to define
unit tests that are made up of one or more statements.

if_test allows defining self-contained tests en bloc, a bit like
test_expect_success does for regular tests.  It acts like a conditional;
the test body is executed if test_skip_all() had not been called before.

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2024-07-30 13:32:43 -07:00

93 lines
3.4 KiB
Bash
Executable file

#!/bin/sh
test_description='Test the output of the unit test framework'
TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh
test_expect_success 'TAP output from unit tests' - <<\EOT
cat >expect <<-EOF &&
# BUG: check outside of test at t/helper/test-example-tap.c:75
ok 1 - passing test
ok 2 - passing test and assertion return 1
# check "1 == 2" failed at t/helper/test-example-tap.c:79
# left: 1
# right: 2
not ok 3 - failing test
ok 4 - failing test and assertion return 0
not ok 5 - passing TEST_TODO() # TODO
ok 6 - passing TEST_TODO() returns 1
# todo check 'check(x)' succeeded at t/helper/test-example-tap.c:26
not ok 7 - failing TEST_TODO()
ok 8 - failing TEST_TODO() returns 0
# check "0" failed at t/helper/test-example-tap.c:31
# skipping test - missing prerequisite
# skipping check '1' at t/helper/test-example-tap.c:33
ok 9 - test_skip() # SKIP
ok 10 - skipped test returns 1
# skipping test - missing prerequisite
ok 11 - test_skip() inside TEST_TODO() # SKIP
ok 12 - test_skip() inside TEST_TODO() returns 1
# check "0" failed at t/helper/test-example-tap.c:49
not ok 13 - TEST_TODO() after failing check
ok 14 - TEST_TODO() after failing check returns 0
# check "0" failed at t/helper/test-example-tap.c:57
not ok 15 - failing check after TEST_TODO()
ok 16 - failing check after TEST_TODO() returns 0
# check "!strcmp("\thello\\\\", "there\"\n")" failed at t/helper/test-example-tap.c:62
# left: "\011hello\\\\"
# right: "there\"\012"
# check "!strcmp("NULL", NULL)" failed at t/helper/test-example-tap.c:63
# left: "NULL"
# right: NULL
# check "'a' == '\n'" failed at t/helper/test-example-tap.c:64
# left: 'a'
# right: '\012'
# check "'\\\\' == '\\''" failed at t/helper/test-example-tap.c:65
# left: '\\\\'
# right: '\\''
not ok 17 - messages from failing string and char comparison
# BUG: test has no checks at t/helper/test-example-tap.c:94
not ok 18 - test with no checks
ok 19 - test with no checks returns 0
ok 20 - if_test passing test
# check "1 == 2" failed at t/helper/test-example-tap.c:100
# left: 1
# right: 2
not ok 21 - if_test failing test
not ok 22 - if_test passing TEST_TODO() # TODO
# todo check 'check(1)' succeeded at t/helper/test-example-tap.c:104
not ok 23 - if_test failing TEST_TODO()
# check "0" failed at t/helper/test-example-tap.c:106
# skipping test - missing prerequisite
# skipping check '1' at t/helper/test-example-tap.c:108
ok 24 - if_test test_skip() # SKIP
# skipping test - missing prerequisite
ok 25 - if_test test_skip() inside TEST_TODO() # SKIP
# check "0" failed at t/helper/test-example-tap.c:113
not ok 26 - if_test TEST_TODO() after failing check
# check "0" failed at t/helper/test-example-tap.c:119
not ok 27 - if_test failing check after TEST_TODO()
# check "!strcmp("\thello\\\\", "there\"\n")" failed at t/helper/test-example-tap.c:122
# left: "\011hello\\\\"
# right: "there\"\012"
# check "!strcmp("NULL", NULL)" failed at t/helper/test-example-tap.c:123
# left: "NULL"
# right: NULL
# check "'a' == '\n'" failed at t/helper/test-example-tap.c:124
# left: 'a'
# right: '\012'
# check "'\\\\' == '\\''" failed at t/helper/test-example-tap.c:125
# left: '\\\\'
# right: '\\''
not ok 28 - if_test messages from failing string and char comparison
# BUG: test has no checks at t/helper/test-example-tap.c:127
not ok 29 - if_test test with no checks
1..29
EOF
! test-tool example-tap >actual &&
test_cmp expect actual
EOT
test_done