CHECKMK(1) CHECKMK(1) (NAME) checkmk - Awk C Check (SYNOPSIS) checkmk [ clean_mode=1 ] [ input-file ] (DESCRIPTION) C Check. (boilerplate) Check SRunner Suite() TCase() . Check . . Check . input-file checkmk C Suites TCases Check . checkmk main() . C checkmk . main() (logging) (test fixtures) . input-file checkmk checkmk . checkmk C C #line . (OPTIONS) ( Awk <<>>) clean_mode . checkmk #line . C checkmk . (IDE) . #line . (BASIC EXAMPLE) (prologue) . . : #test test_name test_name . C C . : -------------------------------------------------- /* A complete test example */ #include #test the_test int nc; const char msg[] = "\n\n Hello, world!\n"; nc = printf("%s", msg); ck_assert(nc == (sizeof(msg) - 1)); /* for terminating NUL. */ -------------------------------------------------- basic_complete.ts : $ checkmk basic_complete.ts > basic_complete.c basic_complete.c : -------------------------------------------------- /* * DO NOT EDIT THIS FILE. Generated by checkmk. * Edit the original source file "in" instead. */ #include /* A complete test example */ #include START_TEST(the_test) { int nc; const char msg[] = "\n\n Hello, world!\n"; nc = printf("%s", msg); ck_assert(nc == (sizeof(msg) - 1)); /* for terminating NUL. */ } END_TEST int main(void) { Suite *s1 = suite_create("Core"); TCase *tc1_1 = tcase_create("Core"); SRunner *sr = srunner_create(s1); int nf; suite_add_tcase(s1, tc1_1); tcase_add_test(tc1_1, the_test); srunner_run_all(sr, CK_ENV); nf = srunner_ntests_failed(sr); srunner_free(sr); return nf == 0 ? 0 : 1; } -------------------------------------------------- basic_complete.c #line ..SH " (DIRECTIVE SUMMARY)" C checkmk . . # test test_name # test-signal(signal) test_name # test-exit(exit_code) test_name # test-loop(start, end) test_name # test-loop-signal(signal, start, end) test_name # test-loop-exit(exit_code, start, end) test_name # suite TestSuiteName # tcase TestCaseName # main-pre # main-post (case-insensitive). # # . (TEST-DEFINING DIRECTIVES) . (TEST FUNCTIONS) # test test_name # test-signal(signal) test_name # test-exit(exit_code) test_name # test-loop(start, end) test_name # test-loop-signal(signal, start, end) test_name # test-loop-exit(exit_code, start, end) test_name checkmk . : #test* checkmk . #test* . test_name C C . (_) - / . ( C99) \uXXXX \UXXXXXXXX X . test_name #test* . CHECKMK (CHECKMK IDENTIFIERS) . (TEST SUITES) # suite TestSuiteName ( Suite Check) ( ) . TestSuiteName ( ASCII NUL (newline) ). . . #tcase . Suite C checkmk #test ( #suite ) . #test #suite #suite ( #tcase ) checkmk ( ). ( ) #suite #test (instantiated) . #test #suite checkmk #suite "Core" TestSuiteName ( "Core" ). (BASIC EXAMPLE) . (TEST CASES) # tcase TestCaseName ( TCase Check) . #tcase #suite . TestCaseName TCase #test . ( ) #tcase #test . #suite ..SH " MAIN() (USER CODE IN MAIN())" main() C checkmk SRunner Suite TCase . main() . main() . : o (timeout) tcase_set_timeout() o << >> (no-fork-mode) Check srunner_set_fork_status() o tcase_add_checked_fixture() tcase_add_unchecked_fixture() o (logging) (suite runner) srunner_set_log() srunner_set_xml() o . #main-pre #main-post . MAIN() (MAIN() PROLOGUE) # main-pre main() checkmk ( ). checkmk ISO C 1990 . #main-pre . #main-post #suite #tcase #test . #main-pre . checkmk SRunner Suite TCase . CHECKMK (CHECKMK IDENTIFIERS) Suite sX X #suite . s1 #test . #suite "Core" . TCase tcX_Y X Suite TCase Y Suite TCase Suite . SRunner sr nf ( ) . main() checkmk . : sX tcX_Y sr nf. MAIN() (MAIN() EPILOGUE) # main-post checkmk #main-post main() . . checkmk return : . #main-post checkmk ..SH " (COMPREHENSIVE EXAMPLE)" . -------------------------------------------------- #include "mempool.h" /* defines MEMPOOLSZ, prototypes for mempool_init() and mempool_free() */ void *mempool; void mp_setup(void) { mempool = mempool_init(MEMPOOLSZ); ck_assert_msg(mempool != NULL, "Couldn't allocate mempool."); } void mp_teardown(void) { mempool_free(mempool); } /* end of prologue */ #suite Mempool #tcase MP Init #test mempool_init_zero_test mempool = mempool_init(0); ck_assert_msg(mempool == NULL, "Allocated a zero-sized mempool!"); ck_assert_msg(mempool_error(), "Didn't get an error for zero alloc."); /* "MP Util" TCase uses checked fixture. */ #tcase MP Util #test mempool_copy_test void *cp = mempool_copy(mempool); ck_assert_msg(cp != NULL, "Couldn't perform mempool copy."); ck_assert_msg(cp != mempool, "Copy returned original pointer!"); #test mempool_size_test ck_assert(mempool_getsize(mempool) == MEMPOOLSZ); #main-pre tcase_add_checked_fixture(tc1_2, mp_setup, mp_teardown); srunner_set_log(sr, "mplog.txt"); #main-post if (nf != 0) { printf("Hey, something's wrong! %d whole tests failed!\n", nf); } return 0; /* Harness checks for output, always return success regardless. */ -------------------------------------------------- checkmk : -------------------------------------------------- /* * DO NOT EDIT THIS FILE. Generated by checkmk. * Edit the original source file "comprehensive.ts" instead. */ #include #include "mempool.h" void *mempool; void mp_setup(void) { ... } void mp_teardown(void) { ... } /* end of prologue */ START_TEST(mempool_init_zero_test) { ... } END_TEST START_TEST(mempool_copy_test) { ... } END_TEST START_TEST(mempool_size_test) { ... } END_TEST int main(void) { Suite *s1 = suite_create("Mempool"); TCase *tc1_1 = tcase_create("MP Init"); TCase *tc1_2 = tcase_create("MP Util"); SRunner *sr = srunner_create(s1); int nf; /* User-specified pre-run code */ tcase_add_checked_fixture(tc1_2, mp_setup, mp_teardown); srunner_set_log(sr, "mplog.txt"); suite_add_tcase(s1, tc1_1); tcase_add_test(tc1_1, mempool_init_zero_test); suite_add_tcase(s1, tc1_2); tcase_add_test(tc1_2, mempool_copy_test); tcase_add_test(tc1_2, mempool_size_test); srunner_run_all(sr, CK_ENV); nf = srunner_ntests_failed(sr); srunner_free(sr); /* User-specified post-run code */ if (nf != 0) { printf("Hey, something's wrong! %d whole tests failed!\n", nf); } return 0; /* Harness checks for output, always return success regardless. */ } -------------------------------------------------- checkmk Micah J Cowan . (C) 2006, 2010 Micah J Cowan. 09 February 2010 CHECKMK(1)