1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
#include "test-tool.h"
#include "t/unit-tests/test-lib.h"
/*
* The purpose of this "unit test" is to verify a few invariants of the unit
* test framework itself, as well as to provide examples of output from actually
* failing tests. As such, it is intended that this test fails, and thus it
* should not be run as part of `make unit-tests`. Instead, we verify it behaves
* as expected in the integration test t0080-unit-test-output.sh
*/
/* Used to store the return value of check_int(). */
static int check_res;
/* Used to store the return value of TEST(). */
static int test_res;
static void t_res(int expect)
{
check_int(check_res, ==, expect);
check_int(test_res, ==, expect);
}
static void t_todo(int x)
{
check_res = TEST_TODO(check(x));
}
static void t_skip(void)
{
check(0);
test_skip("missing prerequisite");
check(1);
}
static int do_skip(void)
{
test_skip("missing prerequisite");
return 1;
}
static void t_skip_todo(void)
{
check_res = TEST_TODO(do_skip());
}
static void t_todo_after_fail(void)
{
check(0);
TEST_TODO(check(0));
}
static void t_fail_after_todo(void)
{
check(1);
TEST_TODO(check(0));
check(0);
}
static void t_messages(void)
{
check_str("\thello\\", "there\"\n");
check_str("NULL", NULL);
check_char('a', ==, '\n');
check_char('\\', ==, '\'');
}
static void t_empty(void)
{
; /* empty */
}
int cmd__example_tap(int argc UNUSED, const char **argv UNUSED)
{
check(1);
test_res = TEST(check_res = check_int(1, ==, 1), "passing test");
TEST(t_res(1), "passing test and assertion return 1");
test_res = TEST(check_res = check_int(1, ==, 2), "failing test");
TEST(t_res(0), "failing test and assertion return 0");
test_res = TEST(t_todo(0), "passing TEST_TODO()");
TEST(t_res(1), "passing TEST_TODO() returns 1");
test_res = TEST(t_todo(1), "failing TEST_TODO()");
TEST(t_res(0), "failing TEST_TODO() returns 0");
test_res = TEST(t_skip(), "test_skip()");
TEST(check_int(test_res, ==, 1), "skipped test returns 1");
test_res = TEST(t_skip_todo(), "test_skip() inside TEST_TODO()");
TEST(t_res(1), "test_skip() inside TEST_TODO() returns 1");
test_res = TEST(t_todo_after_fail(), "TEST_TODO() after failing check");
TEST(check_int(test_res, ==, 0), "TEST_TODO() after failing check returns 0");
test_res = TEST(t_fail_after_todo(), "failing check after TEST_TODO()");
TEST(check_int(test_res, ==, 0), "failing check after TEST_TODO() returns 0");
TEST(t_messages(), "messages from failing string and char comparison");
test_res = TEST(t_empty(), "test with no checks");
TEST(check_int(test_res, ==, 0), "test with no checks returns 0");
if_test ("if_test passing test")
check_int(1, ==, 1);
if_test ("if_test failing test")
check_int(1, ==, 2);
if_test ("if_test passing TEST_TODO()")
TEST_TODO(check(0));
if_test ("if_test failing TEST_TODO()")
TEST_TODO(check(1));
if_test ("if_test test_skip()") {
check(0);
test_skip("missing prerequisite");
check(1);
}
if_test ("if_test test_skip() inside TEST_TODO()")
TEST_TODO((test_skip("missing prerequisite"), 1));
if_test ("if_test TEST_TODO() after failing check") {
check(0);
TEST_TODO(check(0));
}
if_test ("if_test failing check after TEST_TODO()") {
check(1);
TEST_TODO(check(0));
check(0);
}
if_test ("if_test messages from failing string and char comparison") {
check_str("\thello\\", "there\"\n");
check_str("NULL", NULL);
check_char('a', ==, '\n');
check_char('\\', ==, '\'');
}
if_test ("if_test test with no checks")
; /* nothing */
return test_done();
}
|