1*2d543d20SAndroid Build Coastguard Worker /* 2*2d543d20SAndroid Build Coastguard Worker * Copyright (c) 2003 Asim Jalis 3*2d543d20SAndroid Build Coastguard Worker * 4*2d543d20SAndroid Build Coastguard Worker * This software is provided 'as-is', without any express or implied 5*2d543d20SAndroid Build Coastguard Worker * warranty. In no event will the authors be held liable for any damages 6*2d543d20SAndroid Build Coastguard Worker * arising from the use of this software. 7*2d543d20SAndroid Build Coastguard Worker * 8*2d543d20SAndroid Build Coastguard Worker * Permission is granted to anyone to use this software for any purpose, 9*2d543d20SAndroid Build Coastguard Worker * including commercial applications, and to alter it and redistribute it 10*2d543d20SAndroid Build Coastguard Worker * freely, subject to the following restrictions: 11*2d543d20SAndroid Build Coastguard Worker * 12*2d543d20SAndroid Build Coastguard Worker * 1. The origin of this software must not be misrepresented; you must not 13*2d543d20SAndroid Build Coastguard Worker * claim that you wrote the original software. If you use this software in 14*2d543d20SAndroid Build Coastguard Worker * a product, an acknowledgment in the product documentation would be 15*2d543d20SAndroid Build Coastguard Worker * appreciated but is not required. 16*2d543d20SAndroid Build Coastguard Worker * 17*2d543d20SAndroid Build Coastguard Worker * 2. Altered source versions must be plainly marked as such, and must not 18*2d543d20SAndroid Build Coastguard Worker * be misrepresented as being the original software. 19*2d543d20SAndroid Build Coastguard Worker * 20*2d543d20SAndroid Build Coastguard Worker * 3. This notice may not be removed or altered from any source 21*2d543d20SAndroid Build Coastguard Worker * distribution. 22*2d543d20SAndroid Build Coastguard Worker */ 23*2d543d20SAndroid Build Coastguard Worker 24*2d543d20SAndroid Build Coastguard Worker #ifndef CU_TEST_H 25*2d543d20SAndroid Build Coastguard Worker #define CU_TEST_H 26*2d543d20SAndroid Build Coastguard Worker 27*2d543d20SAndroid Build Coastguard Worker #include <setjmp.h> 28*2d543d20SAndroid Build Coastguard Worker #include <stdarg.h> 29*2d543d20SAndroid Build Coastguard Worker 30*2d543d20SAndroid Build Coastguard Worker #define CUTEST_VERSION "CuTest 1.5" 31*2d543d20SAndroid Build Coastguard Worker 32*2d543d20SAndroid Build Coastguard Worker /* CuString */ 33*2d543d20SAndroid Build Coastguard Worker 34*2d543d20SAndroid Build Coastguard Worker char* CuStrAlloc(int size); 35*2d543d20SAndroid Build Coastguard Worker char* CuStrCopy(const char* old); 36*2d543d20SAndroid Build Coastguard Worker 37*2d543d20SAndroid Build Coastguard Worker #define CU_ALLOC(TYPE) ((TYPE*) malloc(sizeof(TYPE))) 38*2d543d20SAndroid Build Coastguard Worker 39*2d543d20SAndroid Build Coastguard Worker #define HUGE_STRING_LEN 8192 40*2d543d20SAndroid Build Coastguard Worker #define STRING_MAX 256 41*2d543d20SAndroid Build Coastguard Worker #define STRING_INC 256 42*2d543d20SAndroid Build Coastguard Worker 43*2d543d20SAndroid Build Coastguard Worker typedef struct 44*2d543d20SAndroid Build Coastguard Worker { 45*2d543d20SAndroid Build Coastguard Worker int length; 46*2d543d20SAndroid Build Coastguard Worker int size; 47*2d543d20SAndroid Build Coastguard Worker char* buffer; 48*2d543d20SAndroid Build Coastguard Worker } CuString; 49*2d543d20SAndroid Build Coastguard Worker 50*2d543d20SAndroid Build Coastguard Worker void CuStringInit(CuString* str); 51*2d543d20SAndroid Build Coastguard Worker CuString* CuStringNew(void); 52*2d543d20SAndroid Build Coastguard Worker void CuStringRead(CuString* str, const char* path); 53*2d543d20SAndroid Build Coastguard Worker void CuStringAppend(CuString* str, const char* text); 54*2d543d20SAndroid Build Coastguard Worker void CuStringAppendChar(CuString* str, char ch); 55*2d543d20SAndroid Build Coastguard Worker void CuStringAppendFormat(CuString* str, const char* format, ...); 56*2d543d20SAndroid Build Coastguard Worker void CuStringInsert(CuString* str, const char* text, int pos); 57*2d543d20SAndroid Build Coastguard Worker void CuStringResize(CuString* str, int newSize); 58*2d543d20SAndroid Build Coastguard Worker void CuStringDelete(CuString* str); 59*2d543d20SAndroid Build Coastguard Worker 60*2d543d20SAndroid Build Coastguard Worker /* CuTest */ 61*2d543d20SAndroid Build Coastguard Worker 62*2d543d20SAndroid Build Coastguard Worker typedef struct CuTest CuTest; 63*2d543d20SAndroid Build Coastguard Worker 64*2d543d20SAndroid Build Coastguard Worker typedef void (*TestFunction)(CuTest *); 65*2d543d20SAndroid Build Coastguard Worker 66*2d543d20SAndroid Build Coastguard Worker struct CuTest 67*2d543d20SAndroid Build Coastguard Worker { 68*2d543d20SAndroid Build Coastguard Worker char* name; 69*2d543d20SAndroid Build Coastguard Worker TestFunction function; 70*2d543d20SAndroid Build Coastguard Worker int failed; 71*2d543d20SAndroid Build Coastguard Worker int ran; 72*2d543d20SAndroid Build Coastguard Worker const char* message; 73*2d543d20SAndroid Build Coastguard Worker jmp_buf *jumpBuf; 74*2d543d20SAndroid Build Coastguard Worker }; 75*2d543d20SAndroid Build Coastguard Worker 76*2d543d20SAndroid Build Coastguard Worker void CuTestInit(CuTest* t, const char* name, TestFunction function); 77*2d543d20SAndroid Build Coastguard Worker CuTest* CuTestNew(const char* name, TestFunction function); 78*2d543d20SAndroid Build Coastguard Worker void CuTestRun(CuTest* tc); 79*2d543d20SAndroid Build Coastguard Worker void CuTestDelete(CuTest *t); 80*2d543d20SAndroid Build Coastguard Worker 81*2d543d20SAndroid Build Coastguard Worker /* Internal versions of assert functions -- use the public versions */ 82*2d543d20SAndroid Build Coastguard Worker void CuFail_Line(CuTest* tc, const char* file, int line, const char* message2, const char* message); 83*2d543d20SAndroid Build Coastguard Worker void CuAssert_Line(CuTest* tc, const char* file, int line, const char* message, int condition); 84*2d543d20SAndroid Build Coastguard Worker void CuAssertStrEquals_LineMsg(CuTest* tc, 85*2d543d20SAndroid Build Coastguard Worker const char* file, int line, const char* message, 86*2d543d20SAndroid Build Coastguard Worker const char* expected, const char* actual); 87*2d543d20SAndroid Build Coastguard Worker void CuAssertIntEquals_LineMsg(CuTest* tc, 88*2d543d20SAndroid Build Coastguard Worker const char* file, int line, const char* message, 89*2d543d20SAndroid Build Coastguard Worker int expected, int actual); 90*2d543d20SAndroid Build Coastguard Worker void CuAssertDblEquals_LineMsg(CuTest* tc, 91*2d543d20SAndroid Build Coastguard Worker const char* file, int line, const char* message, 92*2d543d20SAndroid Build Coastguard Worker double expected, double actual, double delta); 93*2d543d20SAndroid Build Coastguard Worker void CuAssertPtrEquals_LineMsg(CuTest* tc, 94*2d543d20SAndroid Build Coastguard Worker const char* file, int line, const char* message, 95*2d543d20SAndroid Build Coastguard Worker void* expected, void* actual); 96*2d543d20SAndroid Build Coastguard Worker 97*2d543d20SAndroid Build Coastguard Worker /* public assert functions */ 98*2d543d20SAndroid Build Coastguard Worker 99*2d543d20SAndroid Build Coastguard Worker #define CuFail(tc, ms) CuFail_Line( (tc), __FILE__, __LINE__, NULL, (ms)) 100*2d543d20SAndroid Build Coastguard Worker #define CuAssert(tc, ms, cond) CuAssert_Line((tc), __FILE__, __LINE__, (ms), (cond)) 101*2d543d20SAndroid Build Coastguard Worker #define CuAssertTrue(tc, cond) CuAssert_Line((tc), __FILE__, __LINE__, "assert failed", (cond)) 102*2d543d20SAndroid Build Coastguard Worker 103*2d543d20SAndroid Build Coastguard Worker #define CuAssertStrEquals(tc,ex,ac) CuAssertStrEquals_LineMsg((tc),__FILE__,__LINE__,NULL,(ex),(ac)) 104*2d543d20SAndroid Build Coastguard Worker #define CuAssertStrEquals_Msg(tc,ms,ex,ac) CuAssertStrEquals_LineMsg((tc),__FILE__,__LINE__,(ms),(ex),(ac)) 105*2d543d20SAndroid Build Coastguard Worker #define CuAssertIntEquals(tc,ex,ac) CuAssertIntEquals_LineMsg((tc),__FILE__,__LINE__,NULL,(ex),(ac)) 106*2d543d20SAndroid Build Coastguard Worker #define CuAssertIntEquals_Msg(tc,ms,ex,ac) CuAssertIntEquals_LineMsg((tc),__FILE__,__LINE__,(ms),(ex),(ac)) 107*2d543d20SAndroid Build Coastguard Worker #define CuAssertDblEquals(tc,ex,ac,dl) CuAssertDblEquals_LineMsg((tc),__FILE__,__LINE__,NULL,(ex),(ac),(dl)) 108*2d543d20SAndroid Build Coastguard Worker #define CuAssertDblEquals_Msg(tc,ms,ex,ac,dl) CuAssertDblEquals_LineMsg((tc),__FILE__,__LINE__,(ms),(ex),(ac),(dl)) 109*2d543d20SAndroid Build Coastguard Worker #define CuAssertPtrEquals(tc,ex,ac) CuAssertPtrEquals_LineMsg((tc),__FILE__,__LINE__,NULL,(ex),(ac)) 110*2d543d20SAndroid Build Coastguard Worker #define CuAssertPtrEquals_Msg(tc,ms,ex,ac) CuAssertPtrEquals_LineMsg((tc),__FILE__,__LINE__,(ms),(ex),(ac)) 111*2d543d20SAndroid Build Coastguard Worker 112*2d543d20SAndroid Build Coastguard Worker #define CuAssertPtrNotNull(tc,p) CuAssert_Line((tc),__FILE__,__LINE__,"null pointer unexpected",(p != NULL)) 113*2d543d20SAndroid Build Coastguard Worker #define CuAssertPtrNotNullMsg(tc,msg,p) CuAssert_Line((tc),__FILE__,__LINE__,(msg),(p != NULL)) 114*2d543d20SAndroid Build Coastguard Worker 115*2d543d20SAndroid Build Coastguard Worker /* CuSuite */ 116*2d543d20SAndroid Build Coastguard Worker 117*2d543d20SAndroid Build Coastguard Worker #define MAX_TEST_CASES 1024 118*2d543d20SAndroid Build Coastguard Worker 119*2d543d20SAndroid Build Coastguard Worker #define SUITE_ADD_TEST(SUITE,TEST) CuSuiteAdd(SUITE, CuTestNew(#TEST, TEST)) 120*2d543d20SAndroid Build Coastguard Worker 121*2d543d20SAndroid Build Coastguard Worker typedef struct 122*2d543d20SAndroid Build Coastguard Worker { 123*2d543d20SAndroid Build Coastguard Worker int count; 124*2d543d20SAndroid Build Coastguard Worker CuTest* list[MAX_TEST_CASES]; 125*2d543d20SAndroid Build Coastguard Worker int failCount; 126*2d543d20SAndroid Build Coastguard Worker 127*2d543d20SAndroid Build Coastguard Worker } CuSuite; 128*2d543d20SAndroid Build Coastguard Worker 129*2d543d20SAndroid Build Coastguard Worker 130*2d543d20SAndroid Build Coastguard Worker void CuSuiteInit(CuSuite* testSuite); 131*2d543d20SAndroid Build Coastguard Worker CuSuite* CuSuiteNew(void); 132*2d543d20SAndroid Build Coastguard Worker void CuSuiteDelete(CuSuite *testSuite); 133*2d543d20SAndroid Build Coastguard Worker void CuSuiteAdd(CuSuite* testSuite, CuTest *testCase); 134*2d543d20SAndroid Build Coastguard Worker void CuSuiteAddSuite(CuSuite* testSuite, CuSuite* testSuite2); 135*2d543d20SAndroid Build Coastguard Worker void CuSuiteRun(CuSuite* testSuite); 136*2d543d20SAndroid Build Coastguard Worker void CuSuiteSummary(CuSuite* testSuite, CuString* summary); 137*2d543d20SAndroid Build Coastguard Worker void CuSuiteDetails(CuSuite* testSuite, CuString* details); 138*2d543d20SAndroid Build Coastguard Worker 139*2d543d20SAndroid Build Coastguard Worker #endif /* CU_TEST_H */ 140