Changeset 9b20126 in mainline for uspace/lib/pcut/include/pcut/tests.h
- Timestamp:
- 2014-09-19T08:23:01Z (10 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- c85a57f
- Parents:
- 15d0046
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/pcut/include/pcut/tests.h
r15d0046 r9b20126 37 37 #define PCUT_TESTS_H_GUARD 38 38 39 #include <pcut/helper.h> 39 40 #include <pcut/datadef.h> 40 41 … … 81 82 /** @cond devel */ 82 83 83 /** Join the two arguments on preprocessor level (inner call). */84 #define PCUT_JOIN_IMPL(a, b) a##b85 86 /** Join the two arguments on preprocessor level. */87 #define PCUT_JOIN(a, b) PCUT_JOIN_IMPL(a, b)88 89 84 /** Produce identifier name for an item with given number. 90 85 * … … 132 127 */ 133 128 #define PCUT_ADD_ITEM(number, itemkind, ...) \ 134 135 .previous =&PCUT_ITEM_NAME_PREV(number), \136 .next =NULL, \137 .id =-1, \138 .kind =itemkind, \139 140 };129 static pcut_item_t PCUT_ITEM_NAME(number) = { \ 130 &PCUT_ITEM_NAME_PREV(number), \ 131 NULL, \ 132 -1, \ 133 itemkind, \ 134 __VA_ARGS__ \ 135 } 141 136 142 137 /** @endcond */ … … 156 151 */ 157 152 #define PCUT_TEST_SET_TIMEOUT(time_out) \ 158 { .type = PCUT_EXTRA_TIMEOUT, .timeout =(time_out) }153 { PCUT_EXTRA_TIMEOUT, (time_out) } 159 154 160 155 /** Skip current test. … … 163 158 */ 164 159 #define PCUT_TEST_SKIP \ 165 { .type = PCUT_EXTRA_SKIP}160 { PCUT_EXTRA_SKIP, 0 } 166 161 167 162 … … 169 164 170 165 /** Terminate list of extra test options. */ 171 #define PCUT_TEST_EXTRA_LAST { .type = PCUT_EXTRA_LAST}166 #define PCUT_TEST_EXTRA_LAST { PCUT_EXTRA_LAST, 0 } 172 167 173 168 /** Define a new test with given name and given item number. … … 177 172 * @param ... Extra test properties. 178 173 */ 179 #define PCUT_TEST_WITH_NUMBER(testname, number, ...) \ 180 PCUT_ITEM_COUNTER_INCREMENT \ 181 static pcut_extra_t PCUT_ITEM_EXTRAS_NAME(number)[] = { \ 182 __VA_ARGS__ \ 183 }; \ 184 static void PCUT_JOIN(test_, testname)(void); \ 185 PCUT_ADD_ITEM(number, PCUT_KIND_TEST, \ 186 .test = { \ 187 .name = #testname, \ 188 .func = PCUT_JOIN(test_, testname), \ 189 .extras = PCUT_ITEM_EXTRAS_NAME(number), \ 190 } \ 191 ) \ 192 void PCUT_JOIN(test_, testname)(void) 174 #define PCUT_TEST_WITH_NUMBER(number, testname, ...) \ 175 PCUT_ITEM_COUNTER_INCREMENT \ 176 static pcut_extra_t PCUT_ITEM_EXTRAS_NAME(number)[] = { \ 177 __VA_ARGS__ \ 178 }; \ 179 static int PCUT_CC_UNUSED_VARIABLE(PCUT_JOIN(testname, 0_test_name_missing_or_duplicated), 0); \ 180 static void PCUT_JOIN(test_, testname)(void); \ 181 PCUT_ADD_ITEM(number, PCUT_KIND_TEST, \ 182 PCUT_QUOTE(testname), \ 183 PCUT_JOIN(test_, testname), \ 184 NULL, NULL, \ 185 PCUT_ITEM_EXTRAS_NAME(number), \ 186 NULL, NULL \ 187 ); \ 188 void PCUT_JOIN(test_, testname)(void) 193 189 194 190 /** @endcond */ … … 196 192 /** Define a new test with given name. 197 193 * 198 * @param name A valid C identifier name (not quoted). 199 * @param ... Extra test properties. 200 */ 201 #define PCUT_TEST(name, ...) \ 202 PCUT_TEST_WITH_NUMBER(name, PCUT_ITEM_COUNTER, ##__VA_ARGS__, PCUT_TEST_EXTRA_LAST) 194 * @param ... Test name (C identifier) followed by extra test properties. 195 */ 196 #define PCUT_TEST(...) \ 197 PCUT_TEST_WITH_NUMBER(PCUT_ITEM_COUNTER, \ 198 PCUT_VARG_GET_FIRST(__VA_ARGS__, this_arg_is_ignored), \ 199 PCUT_VARG_SKIP_FIRST(__VA_ARGS__, PCUT_TEST_EXTRA_LAST) \ 200 ) 203 201 204 202 … … 221 219 */ 222 220 #define PCUT_TEST_SUITE_WITH_NUMBER(suitename, number) \ 223 224 225 .suite = {\226 .name = #suitename, \227 .setup =NULL, \228 .teardown = NULL\229 }\230 221 PCUT_ITEM_COUNTER_INCREMENT \ 222 PCUT_ADD_ITEM(number, PCUT_KIND_TESTSUITE, \ 223 #suitename, \ 224 NULL, \ 225 NULL, NULL, \ 226 NULL, NULL, \ 227 NULL \ 228 ) 231 229 232 230 /** Define a set-up function for a test suite. … … 237 235 */ 238 236 #define PCUT_TEST_BEFORE_WITH_NUMBER(number) \ 239 PCUT_ITEM_COUNTER_INCREMENT \ 240 static void PCUT_ITEM_SETUP_NAME(number)(void); \ 241 PCUT_ADD_ITEM(number, PCUT_KIND_SETUP, \ 242 .setup.func = PCUT_ITEM_SETUP_NAME(number) \ 243 ) \ 244 void PCUT_ITEM_SETUP_NAME(number)(void) 237 PCUT_ITEM_COUNTER_INCREMENT \ 238 static void PCUT_ITEM_SETUP_NAME(number)(void); \ 239 PCUT_ADD_ITEM(number, PCUT_KIND_SETUP, \ 240 "setup", NULL, \ 241 PCUT_ITEM_SETUP_NAME(number), \ 242 NULL, NULL, NULL, NULL \ 243 ); \ 244 void PCUT_ITEM_SETUP_NAME(number)(void) 245 245 246 246 /** Define a tear-down function for a test suite. … … 251 251 */ 252 252 #define PCUT_TEST_AFTER_WITH_NUMBER(number) \ 253 PCUT_ITEM_COUNTER_INCREMENT \ 254 static void PCUT_ITEM_SETUP_NAME(number)(void); \ 255 PCUT_ADD_ITEM(number, PCUT_KIND_TEARDOWN, \ 256 .setup.func = PCUT_ITEM_SETUP_NAME(number) \ 257 ) \ 258 void PCUT_ITEM_SETUP_NAME(number)(void) 253 PCUT_ITEM_COUNTER_INCREMENT \ 254 static void PCUT_ITEM_SETUP_NAME(number)(void); \ 255 PCUT_ADD_ITEM(number, PCUT_KIND_TEARDOWN, \ 256 "teardown", NULL, NULL, \ 257 PCUT_ITEM_SETUP_NAME(number), \ 258 NULL, NULL, NULL \ 259 ); \ 260 void PCUT_ITEM_SETUP_NAME(number)(void) 259 261 260 262 /** @endcond */ … … 328 330 PCUT_ITEM_COUNTER_INCREMENT \ 329 331 pcut_item_t pcut_exported_##identifier = { \ 330 .previous = &PCUT_ITEM_NAME_PREV(number), \ 331 .next = NULL, \ 332 .kind = PCUT_KIND_SKIP \ 332 &PCUT_ITEM_NAME_PREV(number), \ 333 NULL, \ 334 -1, \ 335 PCUT_KIND_SKIP, \ 336 "exported_" #identifier, NULL, NULL, NULL, NULL, NULL, NULL \ 333 337 } 334 338 … … 344 348 extern pcut_item_t pcut_exported_##identifier; \ 345 349 PCUT_ADD_ITEM(number, PCUT_KIND_NESTED, \ 346 .nested.last = &pcut_exported_##identifier \ 350 "import_" #identifier, NULL, NULL, NULL, NULL, NULL, \ 351 &pcut_exported_##identifier \ 347 352 ) 348 353 … … 382 387 PCUT_ITEM_COUNTER_INCREMENT \ 383 388 static pcut_item_t PCUT_ITEM_NAME(first_number) = { \ 384 .previous = NULL, \ 385 .next = NULL, \ 386 .id = -1, \ 387 .kind = PCUT_KIND_SKIP \ 389 NULL, \ 390 NULL, \ 391 -1, \ 392 PCUT_KIND_SKIP, \ 393 "init", NULL, NULL, NULL, NULL, NULL, NULL \ 388 394 }; \ 389 395 PCUT_TEST_SUITE(Default); … … 395 401 * @param number Item number. 396 402 */ 397 #define PCUT_MAIN_WITH_NUMBER(number) \ 398 PCUT_ITEM_COUNTER_INCREMENT \ 403 #define PCUT_MAIN_WITH_NUMBER(number, ...) \ 404 PCUT_ITEM_COUNTER_INCREMENT \ 405 static pcut_main_extra_t pcut_main_extras[] = { \ 406 __VA_ARGS__ \ 407 }; \ 399 408 static pcut_item_t pcut_item_last = { \ 400 .previous = &PCUT_ITEM_NAME_PREV(number), \ 401 .kind = PCUT_KIND_SKIP \ 409 &PCUT_ITEM_NAME_PREV(number), \ 410 NULL, \ 411 -1, \ 412 PCUT_KIND_SKIP, \ 413 "main", NULL, NULL, NULL, \ 414 NULL, \ 415 pcut_main_extras, \ 416 NULL \ 402 417 }; \ 403 418 int main(int argc, char *argv[]) { \ … … 405 420 } 406 421 422 /** Terminate list of extra options for main. */ 423 #define PCUT_MAIN_EXTRA_SET_LAST \ 424 { PCUT_MAIN_EXTRA_LAST, NULL, NULL } 425 407 426 /** @endcond */ 408 427 … … 413 432 /** Insert code to run all the tests. */ 414 433 #define PCUT_MAIN() \ 415 PCUT_MAIN_WITH_NUMBER(PCUT_ITEM_COUNTER) 416 434 PCUT_MAIN_WITH_NUMBER(PCUT_ITEM_COUNTER, PCUT_MAIN_EXTRA_SET_LAST) 435 436 437 /** Set callback for PCUT initialization. 438 * 439 * Use from within PCUT_CUSTOM_MAIN(). 440 * 441 * @warning The callback is called for each test and also for the wrapping 442 * invocation. 443 */ 444 #define PCUT_MAIN_SET_INIT_HOOK(callback) \ 445 { PCUT_MAIN_EXTRA_INIT_HOOK, callback, NULL } 446 447 /** Set callback for PCUT pre-initialization. 448 * 449 * Use from within PCUT_CUSTOM_MAIN(). 450 * This callback is useful only if you want to manipulate command-line 451 * arguments. 452 * You probably will not need this. 453 * 454 * @warning The callback is called for each test and also for the wrapping 455 * invocation. 456 */ 457 #define PCUT_MAIN_SET_PREINIT_HOOK(callback) \ 458 { PCUT_MAIN_EXTRA_PREINIT_HOOK, NULL, callback } 459 460 461 /** Set XML report as default. 462 * 463 * Use from within PCUT_CUSTOM_MAIN(). 464 * 465 */ 466 #define PCUT_MAIN_SET_XML_REPORT \ 467 { PCUT_MAIN_EXTRA_REPORT_XML, NULL, NULL } 468 469 470 /** Insert code to run all tests. */ 471 #define PCUT_CUSTOM_MAIN(...) \ 472 PCUT_MAIN_WITH_NUMBER(PCUT_ITEM_COUNTER, \ 473 PCUT_VARG_GET_FIRST(__VA_ARGS__, PCUT_MAIN_EXTRA_SET_LAST), \ 474 PCUT_VARG_SKIP_FIRST(__VA_ARGS__, PCUT_MAIN_EXTRA_SET_LAST) \ 475 ) 417 476 418 477 /**
Note:
See TracChangeset
for help on using the changeset viewer.