Changeset 9b20126 in mainline for uspace/lib/pcut/include/pcut/tests.h


Ignore:
Timestamp:
2014-09-19T08:23:01Z (10 years ago)
Author:
Vojtech Horky <vojtechhorky@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
c85a57f
Parents:
15d0046
Message:

Update PCUT to newest version

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/pcut/include/pcut/tests.h

    r15d0046 r9b20126  
    3737#define PCUT_TESTS_H_GUARD
    3838
     39#include <pcut/helper.h>
    3940#include <pcut/datadef.h>
    4041
     
    8182/** @cond devel */
    8283
    83 /** Join the two arguments on preprocessor level (inner call). */
    84 #define PCUT_JOIN_IMPL(a, b) a##b
    85 
    86 /** Join the two arguments on preprocessor level. */
    87 #define PCUT_JOIN(a, b) PCUT_JOIN_IMPL(a, b)
    88 
    8984/** Produce identifier name for an item with given number.
    9085 *
     
    132127 */
    133128#define PCUT_ADD_ITEM(number, itemkind, ...) \
    134                 static pcut_item_t PCUT_ITEM_NAME(number) = { \
    135                                 .previous = &PCUT_ITEM_NAME_PREV(number), \
    136                                 .next = NULL, \
    137                                 .id = -1, \
    138                                 .kind = itemkind, \
    139                                 __VA_ARGS__ \
    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        }
    141136
    142137/** @endcond */
     
    156151 */
    157152#define PCUT_TEST_SET_TIMEOUT(time_out) \
    158         { .type = PCUT_EXTRA_TIMEOUT, .timeout = (time_out) }
     153        { PCUT_EXTRA_TIMEOUT, (time_out) }
    159154
    160155/** Skip current test.
     
    163158 */
    164159#define PCUT_TEST_SKIP \
    165         { .type = PCUT_EXTRA_SKIP }
     160        { PCUT_EXTRA_SKIP, 0 }
    166161
    167162
     
    169164
    170165/** 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 }
    172167
    173168/** Define a new test with given name and given item number.
     
    177172 * @param ... Extra test properties.
    178173 */
    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)
    193189
    194190/** @endcond */
     
    196192/** Define a new test with given name.
    197193 *
    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        )
    203201
    204202
     
    221219 */
    222220#define PCUT_TEST_SUITE_WITH_NUMBER(suitename, number) \
    223                 PCUT_ITEM_COUNTER_INCREMENT \
    224                 PCUT_ADD_ITEM(number, PCUT_KIND_TESTSUITE, \
    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        )
    231229
    232230/** Define a set-up function for a test suite.
     
    237235 */
    238236#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)
    245245
    246246/** Define a tear-down function for a test suite.
     
    251251 */
    252252#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)
    259261
    260262/** @endcond */
     
    328330        PCUT_ITEM_COUNTER_INCREMENT \
    329331        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 \
    333337        }
    334338
     
    344348        extern pcut_item_t pcut_exported_##identifier; \
    345349        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 \
    347352        )
    348353
     
    382387        PCUT_ITEM_COUNTER_INCREMENT \
    383388        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 \
    388394        }; \
    389395        PCUT_TEST_SUITE(Default);
     
    395401 * @param number Item number.
    396402 */
    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        }; \
    399408        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 \
    402417        }; \
    403418        int main(int argc, char *argv[]) { \
     
    405420        }
    406421
     422/** Terminate list of extra options for main. */
     423#define PCUT_MAIN_EXTRA_SET_LAST \
     424        { PCUT_MAIN_EXTRA_LAST, NULL, NULL }
     425
    407426/** @endcond */
    408427
     
    413432/** Insert code to run all the tests. */
    414433#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        )
    417476
    418477/**
Note: See TracChangeset for help on using the changeset viewer.