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