82#define __FUNCTION__ __func__
85#if !defined(__clang__) && __GNUC__ > 3
86#pragma GCC diagnostic ignored "-Wclobbered"
155 if (suite == NULL)
return;
178 if (suite->
tests == NULL) {
201 if (suite->
name == NULL) {
202 out_writer(
"*** Test Suite ***\n", 1, 19, out_target);
204 out_writer(
"*** Test Suite : ", 1, 17, out_target);
205 out_writer(suite->
name, 1, strlen(suite->
name), out_target);
206 out_writer(
" ***\n", 1, 5, out_target);
211 elem->test(suite, out_target, out_writer);
213 out_writer(
"\nAll test completed.\n", 1, 21, out_target);
217 " Tests: %5u\n Success: %5u\n Failure: %5u\n\n",
220 out_writer(total, 1, len, out_target);
228#define cx_test_run_f(suite, file) cx_test_run(suite, (void*)file, \
229 (cx_test_output_func) fwrite)
235#define cx_test_run_stdout(suite) cx_test_run_f(suite, stdout)
244#define CX_TEST(name) void name(CxTestSuite* _suite_,void *_output_, \
245 cx_test_output_func _writefnc_)
263#define CX_TEST_DO _writefnc_("Running ", 1, 8, _output_);\
264 _writefnc_(__FUNCTION__, 1, strlen(__FUNCTION__), _output_);\
265 _writefnc_("... ", 1, 4, _output_);\
267 for (unsigned int _cx_test_loop_ = 0 ;\
268 _cx_test_loop_ == 0 && !setjmp(_env_);\
269 _writefnc_("success.\n", 1, 9, _output_),\
270 _suite_->success++, _cx_test_loop_++)
280#define CX_TEST_ASSERTM(condition,message) if (!(condition)) { \
281 const char *_assert_msg_ = message; \
282 _writefnc_(_assert_msg_, 1, strlen(_assert_msg_), _output_); \
283 _writefnc_(".\n", 1, 2, _output_); \
284 _suite_->failure++; \
295#define CX_TEST_ASSERT(condition) \
296 CX_TEST_ASSERTM(condition, #condition " failed")
309#define CX_TEST_SUBROUTINE(name,...) void name(CxTestSuite* _suite_,\
310 void *_output_, cx_test_output_func _writefnc_, \
311 jmp_buf _env_, __VA_ARGS__)
326#define CX_TEST_CALL_SUBROUTINE(name,...) \
327 name(_suite_,_output_,_writefnc_,_env_,__VA_ARGS__)
Strings that know their length.
Structure for the internal list of test cases.
Definition test.h:102
CxTest test
Test case.
Definition test.h:105
CxTestSet * next
Pointer to the next list element.
Definition test.h:108
A test suite containing multiple test cases.
Definition test.h:114
const char * name
The optional name of this test suite.
Definition test.h:123
unsigned int success
The number of successful tests after the suite has been run.
Definition test.h:117
unsigned int failure
The number of failed tests after the suite has been run.
Definition test.h:120
CxTestSet * tests
Internal list of test cases.
Definition test.h:129
static void cx_test_run(CxTestSuite *suite, void *out_target, cx_test_output_func out_writer)
Runs a test suite and writes the test log to the specified stream.
Definition test.h:199
static CxTestSuite * cx_test_suite_new(const char *name)
Creates a new test suite.
Definition test.h:137
static int cx_test_register(CxTestSuite *suite, CxTest test)
Registers a test function with the specified test suite.
Definition test.h:173
static void cx_test_suite_free(CxTestSuite *suite)
Deallocates a test suite.
Definition test.h:154
void(* CxTest)(CxTestSuite *, void *, cx_test_output_func)
Pointer to a test function.
Definition test.h:96
size_t(* cx_test_output_func)(const void *, size_t, size_t, void *)
Output function compatible to cx_write_func.
Definition test.h:93