13 #define ATF_PLAN_SUITE_MAX 128
14 #define ATF_SUITE_TEST_MAX 128
26 void (*
run)(atf_test *, atf_test_result *);
41 #define TEST(__test_name, __test_desc) \
42 static void test_spec__##__test_name(atf_test *, atf_test_result *); \
43 static atf_test test__##__test_name = { \
44 .name = #__test_name, \
45 .desc = __test_desc, \
46 .run = test_spec__##__test_name \
48 atf_test * __test_name = & test__##__test_name; \
49 static void test_spec__##__test_name(atf_test * self, atf_test_result * __result__)
63 void (*
init)(atf_suite *);
75 atf_suite *
atf_suite_add(atf_suite * suite, atf_test * test);
79 atf_suite *
atf_suite_after(atf_suite * suite,
bool (* after)(atf_suite * suite));
80 atf_suite *
atf_suite_before(atf_suite * suite,
bool (* before)(atf_suite * suite));
84 atf_suite_result *
atf_suite_result_add(atf_suite_result * suite_result, atf_test_result * test_result);
87 #define SUITE(__suite_name, __suite_desc) \
88 static void suite_spec__##__suite_name(atf_suite *); \
89 static atf_suite suite__##__suite_name = { \
90 .name = #__suite_name, \
91 .desc = __suite_desc, \
94 .init = suite_spec__##__suite_name, \
98 atf_suite * __suite_name = & suite__##__suite_name; \
99 static void suite_spec__##__suite_name(atf_suite * self)
101 #define suite_add(__test) \
102 atf_suite_add(self, __test)
104 #define suite_before(__func) \
105 atf_suite_before(self, __func)
107 #define suite_after(__func) \
108 atf_suite_after(self, __func)
132 atf_plan *
atf_plan_add(atf_plan *
self, atf_suite * suite);
133 int atf_plan_run(atf_plan *
self, atf_plan_result * result);
135 atf_plan *
atf_plan_after(atf_plan * plan,
bool (* after)(atf_plan * plan));
136 atf_plan *
atf_plan_before(atf_plan * plan,
bool (* before)(atf_plan * plan));
138 atf_plan_result *
atf_plan_result_add(atf_plan_result * plan_result, atf_suite_result * suite_result);
140 #define PLAN(__plan_name)\
141 static void plan_spec__##__plan_name(atf_plan * self); \
142 static atf_plan plan__##__plan_name = { \
143 .name = #__plan_name, \
149 atf_plan * __plan_name = & plan__##__plan_name; \
150 int main(int argc, char ** args) { \
151 atf_plan atfp = {#__plan_name}; \
152 atf_plan_result result = { \
154 .suites = { NULL }, \
157 plan_spec__##__plan_name(__plan_name); \
158 return atf_plan_run(__plan_name, &result); \
160 static void plan_spec__##__plan_name(atf_plan * self) \
163 #define plan_add(__suite) \
164 extern atf_suite * __suite; \
165 atf_plan_add(self, __suite)
167 #define plan_before(__func) \
168 atf_plan_before(self, __func)
170 #define plan_after(__func) \
171 atf_plan_after(self, __func)
177 void atf_assert(atf_test_result * test_result,
const char * exp,
const char * file,
int line);
178 void atf_assert_true(atf_test_result * test_result,
const char * exp,
const char * file,
int line);
179 void atf_assert_false(atf_test_result * test_result,
const char * exp,
const char * file,
int line);
180 void atf_assert_null(atf_test_result * test_result,
const char * exp,
const char * file,
int line);
181 void atf_assert_not_null(atf_test_result * test_result,
const char * exp,
const char * file,
int line);
182 void atf_assert_int_eq(atf_test_result * result,
const char * actual_exp, int64_t actual, int64_t expected,
const char * file,
int line);
183 void atf_assert_int_ne(atf_test_result * result,
const char * actual_exp, int64_t actual, int64_t expected,
const char * file,
int line);
184 void atf_assert_string_eq(atf_test_result * result,
const char * actual_exp,
const char * actual,
const char * expected,
const char * file,
int line);
185 void atf_assert_log(atf_test_result * result,
const char * exp,
const char * file,
int line,
const char * fmt, ...);
188 #define assert(EXP) \
189 if ( (EXP) != true ) return atf_assert(__result__, #EXP, __FILE__, __LINE__);
191 #define assert_true(EXP) \
192 if ( (EXP) != true ) return atf_assert_true(__result__, #EXP, __FILE__, __LINE__);
194 #define assert_false(EXP) \
195 if ( (EXP) == true ) return atf_assert_false(__result__, #EXP, __FILE__, __LINE__);
197 #define assert_null(EXP) \
198 if ( (EXP) != NULL ) return atf_assert_null(__result__, #EXP, __FILE__, __LINE__);
200 #define assert_not_null(EXP) \
201 if ( (EXP) == NULL ) return atf_assert_not_null(__result__, #EXP, __FILE__, __LINE__);
204 #define assert_int_eq(ACTUAL, EXPECTED) \
205 if ( (ACTUAL) != (EXPECTED) ) return atf_assert_int_eq(__result__, #ACTUAL, ACTUAL, EXPECTED, __FILE__, __LINE__);
207 #define assert_int_ne(ACTUAL, EXPECTED) \
208 if ( (ACTUAL) == (EXPECTED) ) return atf_assert_int_ne(__result__, #ACTUAL, ACTUAL, EXPECTED, __FILE__, __LINE__);
211 #define assert_string_eq(ACTUAL, EXPECTED) \
212 if ( strcmp(ACTUAL, EXPECTED) != 0 ) return atf_assert_string_eq(__result__, #ACTUAL, ACTUAL, EXPECTED, __FILE__, __LINE__);
215 #define assert_log(EXP, fmt, args ... ) \
216 if ( (EXP) == true ) return atf_assert_log(__result__, #EXP, __FILE__, __LINE__, fmt, ##args );
221 #define bassert(EXP) \
222 if ( (EXP) != true ) {\
223 atf_assert(__result__, #EXP, __FILE__, __LINE__);\
227 #define bassert_true(EXP) \
228 if ( (EXP) != true ) {\
229 atf_assert_true(__result__, #EXP, __FILE__, __LINE__);\
233 #define bassert_false(EXP) \
234 if ( (EXP) == true ) {\
235 atf_assert_false(__result__, #EXP, __FILE__, __LINE__);\
239 #define bassert_null(EXP) \
240 if ( (EXP) != NULL ) {\
241 atf_assert_null(__result__, #EXP, __FILE__, __LINE__);\
245 #define bassert_not_null(EXP) \
246 if ( (EXP) == NULL ) {\
247 atf_assert_not_null(__result__, #EXP, __FILE__, __LINE__);\
251 #define bassert_int_eq(ACTUAL, EXPECTED) \
252 if ( (ACTUAL) != (EXPECTED) ) {\
253 atf_assert_int_eq(__result__, #ACTUAL, ACTUAL, EXPECTED, __FILE__, __LINE__);\
257 #define bassert_int_ne(ACTUAL, EXPECTED) \
258 if ( (ACTUAL) == (EXPECTED) ) {\
259 atf_assert_int_ne(__result__, #ACTUAL, ACTUAL, EXPECTED, __FILE__, __LINE__);\
263 #define bassert_string_eq(ACTUAL, EXPECTED) \
264 if ( strcmp(ACTUAL, EXPECTED) != 0 ) {\
265 atf_assert_string_eq(__result__, #ACTUAL, ACTUAL, EXPECTED, __FILE__, __LINE__);\
269 #define bassert_log(EXP, fmt, args ... ) \
270 if ( (EXP) == true ) {\
271 atf_assert_log(__result__, #EXP, __FILE__, __LINE__, fmt, ##args );\
279 #define ATF_LOG_PREFIX " "
281 #define debug(fmt, args...) \
282 atf_log_line(stderr, "DEBUG", ATF_LOG_PREFIX, __FILE__, __LINE__, fmt, ## args);
284 #define info(fmt, args...) \
285 atf_log(stderr, "INFO", ATF_LOG_PREFIX, __FILE__, __LINE__, fmt, ## args);
287 #define warn(fmt, args...) \
288 atf_log(stderr, "WARN", ATF_LOG_PREFIX, __FILE__, __LINE__, fmt, ## args);
290 #define error(fmt, args...) \
291 atf_log(stderr, "ERROR", ATF_LOG_PREFIX, __FILE__, __LINE__, fmt, ## args);
293 void atf_log(FILE *
f,
const char * level,
const char * prefix,
const char * file,
int line,
const char * fmt, ...);
295 void atf_log_line(FILE *
f,
const char * level,
const char * prefix,
const char * file,
int line,
const char * fmt, ...);