mirror of
				https://github.com/0xFEEDC0DE64/arduino-esp32.git
				synced 2025-11-04 08:01:38 +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
							 |