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();
}
|