| #include "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_main(int argc, const char **argv) |
| { |
| 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"); |
| |
| return test_done(); |
| } |