50 #ifndef __MU_INTERFACE_H__
51 #define __MU_INTERFACE_H__
53 #include <moonunit/internal/boilerplate.h>
54 #include <moonunit/type.h>
55 #include <moonunit/test.h>
90 #define MU_TEST(suite_name, test_name) \
91 void __mu_f_test_##suite_name##_##test_name(void); \
92 C_DECL MuEntryInfo __mu_e_test_##suite_name##_##test_name; \
93 MuEntryInfo __mu_e_test_##suite_name##_##test_name = \
95 FIELD(type, MU_ENTRY_TEST), \
96 FIELD(name, #test_name), \
97 FIELD(container, #suite_name), \
98 FIELD(file, __FILE__), \
99 FIELD(line, __LINE__), \
100 FIELD(run, __mu_f_test_##suite_name##_##test_name) \
102 void __mu_f_test_##suite_name##_##test_name(void)
122 #define MU_LIBRARY_SETUP() \
123 void __mu_f_library_setup(void); \
124 C_DECL MuEntryInfo __mu_e_library_setup; \
125 MuEntryInfo __mu_e_library_setup = \
127 FIELD(type, MU_ENTRY_LIBRARY_SETUP), \
129 FIELD(container, NULL), \
130 FIELD(file, __FILE__), \
131 FIELD(line, __LINE__), \
132 FIELD(run, __mu_f_library_setup) \
134 void __mu_f_library_setup(void)
154 #define MU_LIBRARY_TEARDOWN() \
155 void __mu_f_library_teardown(void); \
156 C_DECL MuEntryInfo __mu_e_library_teardown; \
157 MuEntryInfo __mu_e_library_teardown = \
159 FIELD(type, MU_ENTRY_LIBRARY_TEARDOWN), \
161 FIELD(container, NULL), \
162 FIELD(file, __FILE__), \
163 FIELD(line, __LINE__), \
164 FIELD(run, __mu_f_library_teardown) \
166 void __mu_f_library_teardown(void)
198 #define MU_FIXTURE_SETUP(suite_name) \
199 void __mu_f_fixture_setup_##suite_name(void); \
200 C_DECL MuEntryInfo __mu_e_fixture_setup_##suite_name; \
201 MuEntryInfo __mu_e_fixture_setup_##suite_name = \
203 FIELD(type, MU_ENTRY_FIXTURE_SETUP), \
205 FIELD(container, #suite_name), \
206 FIELD(file, __FILE__), \
207 FIELD(line, __LINE__), \
208 FIELD(run, __mu_f_fixture_setup_##suite_name) \
210 void __mu_f_fixture_setup_##suite_name(void) \
247 #define MU_FIXTURE_TEARDOWN(suite_name) \
248 void __mu_f_fixture_teardown_##suite_name(void); \
249 C_DECL MuEntryInfo __mu_e_fixture_teardown_##suite_name; \
250 MuEntryInfo __mu_e_fixture_teardown_##suite_name = \
252 FIELD(type, MU_ENTRY_FIXTURE_TEARDOWN), \
254 FIELD(container, #suite_name), \
255 FIELD(file, __FILE__), \
256 FIELD(line, __LINE__), \
257 FIELD(run, __mu_f_fixture_teardown_##suite_name) \
259 void __mu_f_fixture_teardown_##suite_name(void) \
289 #define MU_LIBRARY_CONSTRUCT() \
290 void __mu_f_library_construct(void); \
291 C_DECL MuEntryInfo __mu_e_library_construct; \
292 MuEntryInfo __mu_e_library_construct = \
294 FIELD(type, MU_ENTRY_LIBRARY_CONSTRUCT), \
296 FIELD(container, NULL), \
297 FIELD(file, __FILE__), \
298 FIELD(line, __LINE__), \
299 FIELD(run, __mu_f_library_construct) \
301 void __mu_f_library_construct(void)
331 #define MU_LIBRARY_DESTRUCT() \
332 void __mu_f_library_destruct(void); \
333 C_DECL MuEntryInfo __mu_e_library_destruct; \
334 MuEntryInfo __mu_e_library_destruct = \
336 FIELD(type, MU_ENTRY_LIBRARY_DESTRUCT), \
338 FIELD(container, NULL), \
339 FIELD(file, __FILE__), \
340 FIELD(line, __LINE__), \
341 FIELD(run, __mu_f_library_destruct) \
343 void __mu_f_library_destruct(void)
368 #define MU_LIBRARY_INFO(info_key, info_value) \
369 C_DECL MuEntryInfo __mu_e_library_info_##info_key; \
370 MuEntryInfo __mu_e_library_info_##info_key = \
372 FIELD(type, MU_ENTRY_LIBRARY_INFO), \
373 FIELD(name, #info_key), \
374 FIELD(container, info_value), \
375 FIELD(file, __FILE__), \
376 FIELD(line, __LINE__), \
404 #define MU_LIBRARY_NAME(lib_name) MU_LIBRARY_INFO(name, lib_name)
436 #define MU_ASSERT(expr) \
437 (mu_interface_assert(__FILE__, __LINE__, #expr, 1, (expr)))
472 #define MU_ASSERT_EQUAL(type, expr1, expr2) \
473 (mu_interface_assert_equal(__FILE__, __LINE__, \
475 type, (expr1), (expr2))) \
510 #define MU_ASSERT_NOT_EQUAL(type, expr1, expr2) \
511 (mu_interface_assert_equal(__FILE__, __LINE__, \
513 type, (expr1), (expr2))) \
530 #define MU_ASSERT_NOT_REACHED() \
531 (mu_interface_result(__FILE__, __LINE__, MU_STATUS_ASSERTION, \
532 "Statement reached unexpectedly"))
546 #define MU_SUCCESS() \
547 (mu_interface_result(__FILE__, __LINE__, MU_STATUS_SUCCESS, NULL))
570 # define MU_FAILURE(format, ...)
572 # define MU_FAILURE(...) \
573 (mu_interface_result(__FILE__, __LINE__, MU_STATUS_FAILURE, __VA_ARGS__))
598 # define MU_SKIP(format, ...)
600 # define MU_SKIP(...) \
601 (mu_interface_result(__FILE__, __LINE__, MU_STATUS_SKIPPED, __VA_ARGS__))
635 #define MU_EXPECT(result) \
636 (mu_interface_expect((result)))
656 #define MU_TIMEOUT(ms) \
657 (mu_interface_timeout((ms)))
683 #define MU_ITERATE(count) \
684 (mu_interface_iterations((count)))
712 #define MU_LOG(level, ...) \
713 (mu_interface_event(__FILE__, __LINE__, (level), __VA_ARGS__))
721 #define MU_WARNING(...) \
722 (MU_LOG(MU_LEVEL_WARNING, __VA_ARGS__))
729 #define MU_INFO(...) \
730 (MU_LOG(MU_LEVEL_INFO, __VA_ARGS__))
737 #define MU_VERBOSE(...) \
738 (MU_LOG(MU_LEVEL_VERBOSE, __VA_ARGS__))
745 #define MU_DEBUG(...) \
746 (MU_LOG(MU_LEVEL_DEBUG, __VA_ARGS__))
754 #define MU_TRACE(...) \
755 (MU_LOG(MU_LEVEL_TRACE, __VA_ARGS__))
788 #define MU_RESOURCE(key) \
789 (mu_interface_get_resource(__FILE__, __LINE__, key))
805 #define MU_RESOURCE_FROM_SECTION(section, key) \
806 (mu_interface_get_resource_from_section(__FILE__, __LINE__, section, key))
838 #define MU_CURRENT_TEST (mu_interface_current_test())
843 #define MU_TEST_PREFIX "__mu_t_"
844 #define MU_FUNC_PREFIX "__mu_f_"
845 #define MU_FS_PREFIX "__mu_fs_"
846 #define MU_FT_PREFIX "__mu_ft_"
849 void mu_interface_timeout(
long ms);
850 void mu_interface_iterations(
unsigned int count);
851 void mu_interface_event(
const char* file,
unsigned int line,
MuLogLevel level,
const char* fmt, ...);
852 void mu_interface_assert(
const char* file,
unsigned int line,
const char* expr,
int sense,
int result);
853 void mu_interface_assert_equal(
const char* file,
unsigned int line,
const char* expr1,
const char* expr2,
int sense, MuType type, ...);
854 void mu_interface_result(
const char* file,
unsigned int line,
MuTestStatus result,
const char* message, ...);
855 MuTest* mu_interface_current_test(
void);
857 const char* mu_interface_get_resource(
const char* file,
unsigned int line,
const char* key);
858 const char* mu_interface_get_resource_in_section(
const char* file,
unsigned int line,
const char* section,
const char* key);
860 typedef enum MuEntryType
863 MU_ENTRY_LIBRARY_SETUP,
864 MU_ENTRY_LIBRARY_TEARDOWN,
865 MU_ENTRY_FIXTURE_SETUP,
866 MU_ENTRY_FIXTURE_TEARDOWN,
867 MU_ENTRY_LIBRARY_CONSTRUCT,
868 MU_ENTRY_LIBRARY_DESTRUCT,
869 MU_ENTRY_LIBRARY_INFO
872 typedef struct MuEntryInfo
876 const char* container;
882 extern void __mu_stub_hook(MuEntryInfo*** es);
MuLogLevel
Definition: test.h:133
MuTestStatus
Definition: test.h:56