xmlreaderimpl/support/expat-2.0.1/tests/minicheck.h
changeset 300 b6d834208d33
parent 299 f06c5eba524d
child 301 1bfe4ecc6c10
equal deleted inserted replaced
299:f06c5eba524d 300:b6d834208d33
     1 /* Miniature re-implementation of the "check" library.
       
     2  *
       
     3  * This is intended to support just enough of check to run the Expat
       
     4  * tests.  This interface is based entirely on the portion of the
       
     5  * check library being used.
       
     6  *
       
     7  * This is *source* compatible, but not necessary *link* compatible.
       
     8  */
       
     9 
       
    10 #ifdef __cplusplus
       
    11 extern "C" {
       
    12 #endif
       
    13 
       
    14 #define CK_NOFORK 0
       
    15 #define CK_FORK   1
       
    16 
       
    17 #define CK_SILENT  0
       
    18 #define CK_NORMAL  1
       
    19 #define CK_VERBOSE 2
       
    20 
       
    21 /* Workaround for Tru64 Unix systems where the C compiler has a working
       
    22    __func__, but the C++ compiler only has a working __FUNCTION__.  This
       
    23    could be fixed in configure.in, but it's not worth it right now. */
       
    24 #if defined(__osf__) && defined(__cplusplus)
       
    25 #define __func__ __FUNCTION__
       
    26 #endif
       
    27 
       
    28 #define START_TEST(testname) static void testname(void) { \
       
    29     _check_set_test_info(__func__, __FILE__, __LINE__);   \
       
    30     {
       
    31 #define END_TEST } }
       
    32 
       
    33 #define fail(msg)  _fail_unless(0, __FILE__, __LINE__, msg)
       
    34 
       
    35 typedef void (*tcase_setup_function)(void);
       
    36 typedef void (*tcase_teardown_function)(void);
       
    37 typedef void (*tcase_test_function)(void);
       
    38 
       
    39 typedef struct SRunner SRunner;
       
    40 typedef struct Suite Suite;
       
    41 typedef struct TCase TCase;
       
    42 
       
    43 struct SRunner {
       
    44     Suite *suite;
       
    45     int nchecks;
       
    46     int nfailures;
       
    47 };
       
    48 
       
    49 struct Suite {
       
    50     char *name;
       
    51     TCase *tests;
       
    52 };
       
    53 
       
    54 struct TCase {
       
    55     char *name;
       
    56     tcase_setup_function setup;
       
    57     tcase_teardown_function teardown;
       
    58     tcase_test_function *tests;
       
    59     int ntests;
       
    60     int allocated;
       
    61     TCase *next_tcase;
       
    62 };
       
    63 
       
    64 
       
    65 /* Internal helper. */
       
    66 void _check_set_test_info(char const *function,
       
    67                           char const *filename, int lineno);
       
    68 
       
    69 
       
    70 /*
       
    71  * Prototypes for the actual implementation.
       
    72  */
       
    73 
       
    74 void _fail_unless(int condition, const char *file, int line, char *msg);
       
    75 Suite *suite_create(char *name);
       
    76 TCase *tcase_create(char *name);
       
    77 void suite_add_tcase(Suite *suite, TCase *tc);
       
    78 void tcase_add_checked_fixture(TCase *,
       
    79                                tcase_setup_function,
       
    80                                tcase_teardown_function);
       
    81 void tcase_add_test(TCase *tc, tcase_test_function test);
       
    82 SRunner *srunner_create(Suite *suite);
       
    83 void srunner_run_all(SRunner *runner, int verbosity);
       
    84 int srunner_ntests_failed(SRunner *runner);
       
    85 void srunner_free(SRunner *runner);
       
    86 
       
    87 #ifdef __cplusplus
       
    88 }
       
    89 #endif