mirror of
				https://github.com/0xFEEDC0DE64/arduino-esp32.git
				synced 2025-10-31 14:11:42 +01:00 
			
		
		
		
	
		
			
	
	
		
			96 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			96 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /* Miniature re-implementation of the "check" library.
 | ||
|  |  * | ||
|  |  * This is intended to support just enough of check to run the Expat | ||
|  |  * tests.  This interface is based entirely on the portion of the | ||
|  |  * check library being used. | ||
|  |  * | ||
|  |  * This is *source* compatible, but not necessary *link* compatible. | ||
|  |  */ | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | extern "C" { | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #define CK_NOFORK 0
 | ||
|  | #define CK_FORK   1
 | ||
|  | 
 | ||
|  | #define CK_SILENT  0
 | ||
|  | #define CK_NORMAL  1
 | ||
|  | #define CK_VERBOSE 2
 | ||
|  | 
 | ||
|  | /* Workaround for Microsoft's compiler and Tru64 Unix systems where the
 | ||
|  |    C compiler has a working __func__, but the C++ compiler only has a  | ||
|  |    working __FUNCTION__.  This could be fixed in configure.in, but it's | ||
|  |    not worth it right now. */ | ||
|  | #if defined (_MSC_VER) || (defined(__osf__) && defined(__cplusplus))
 | ||
|  | #define __func__ __FUNCTION__
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | /* ISO C90 does not support '__func__' predefined identifier */ | ||
|  | #if defined(__STDC_VERSION__) && (__STDC_VERSION__ < 199901)
 | ||
|  | # define __func__ "(unknown)"
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #define START_TEST(testname) static void testname(void) { \
 | ||
|  |     _check_set_test_info(__func__, __FILE__, __LINE__);   \ | ||
|  |     { | ||
|  | #define END_TEST 
 | ||
|  | 
 | ||
|  | #define fail(msg)  _fail_unless(0, __FILE__, __LINE__, msg)
 | ||
|  | 
 | ||
|  | typedef void (*tcase_setup_function)(void); | ||
|  | typedef void (*tcase_teardown_function)(void); | ||
|  | typedef void (*tcase_test_function)(void); | ||
|  | 
 | ||
|  | typedef struct SRunner SRunner; | ||
|  | typedef struct Suite Suite; | ||
|  | typedef struct TCase TCase; | ||
|  | 
 | ||
|  | struct SRunner { | ||
|  |     Suite *suite; | ||
|  |     int nchecks; | ||
|  |     int nfailures; | ||
|  | }; | ||
|  | 
 | ||
|  | struct Suite { | ||
|  |     const char *name; | ||
|  |     TCase *tests; | ||
|  | }; | ||
|  | 
 | ||
|  | struct TCase { | ||
|  |     const char *name; | ||
|  |     tcase_setup_function setup; | ||
|  |     tcase_teardown_function teardown; | ||
|  |     tcase_test_function *tests; | ||
|  |     int ntests; | ||
|  |     int allocated; | ||
|  |     TCase *next_tcase; | ||
|  | }; | ||
|  | 
 | ||
|  | 
 | ||
|  | /* Internal helper. */ | ||
|  | void _check_set_test_info(char const *function, | ||
|  |                           char const *filename, int lineno); | ||
|  | 
 | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * Prototypes for the actual implementation. | ||
|  |  */ | ||
|  | 
 | ||
|  | void _fail_unless(int condition, const char *file, int line, const char *msg); | ||
|  | Suite *suite_create(const char *name); | ||
|  | TCase *tcase_create(const char *name); | ||
|  | void suite_add_tcase(Suite *suite, TCase *tc); | ||
|  | void tcase_add_checked_fixture(TCase *, | ||
|  |                                tcase_setup_function, | ||
|  |                                tcase_teardown_function); | ||
|  | void tcase_add_test(TCase *tc, tcase_test_function test); | ||
|  | SRunner *srunner_create(Suite *suite); | ||
|  | void srunner_run_all(SRunner *runner, int verbosity); | ||
|  | int srunner_ntests_failed(SRunner *runner); | ||
|  | void srunner_free(SRunner *runner); | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | } | ||
|  | #endif
 |