1 #ifndef CU_TEST_H 2 #define CU_TEST_H 3 4 #include <setjmp.h> 5 #include <stdarg.h> 6 7 #define CUTEST_VERSION "CuTest 1.5" 8 9 /* CuString */ 10 11 char* CuStrAlloc(int size); 12 char* CuStrCopy(const char* old); 13 14 #define CU_ALLOC(TYPE) ((TYPE*) malloc(sizeof(TYPE))) 15 16 #define HUGE_STRING_LEN 8192 17 #define STRING_MAX 256 18 #define STRING_INC 256 19 20 typedef struct 21 { 22 int length; 23 int size; 24 char* buffer; 25 } CuString; 26 27 void CuStringInit(CuString* str); 28 CuString* CuStringNew(void); 29 void CuStringRead(CuString* str, const char* path); 30 void CuStringAppend(CuString* str, const char* text); 31 void CuStringAppendChar(CuString* str, char ch); 32 void CuStringAppendFormat(CuString* str, const char* format, ...); 33 void CuStringInsert(CuString* str, const char* text, int pos); 34 void CuStringResize(CuString* str, int newSize); 35 void CuStringDelete(CuString* str); 36 37 /* CuTest */ 38 39 typedef struct CuTest CuTest; 40 41 typedef void (*TestFunction)(CuTest *); 42 43 struct CuTest 44 { 45 char* name; 46 TestFunction function; 47 int failed; 48 int ran; 49 const char* message; 50 jmp_buf *jumpBuf; 51 }; 52 53 void CuTestInit(CuTest* t, const char* name, TestFunction function); 54 CuTest* CuTestNew(const char* name, TestFunction function); 55 void CuTestRun(CuTest* tc); 56 void CuTestDelete(CuTest *t); 57 58 /* Internal versions of assert functions -- use the public versions */ 59 void CuFail_Line(CuTest* tc, const char* file, int line, const char* message2, const char* message); 60 void CuAssert_Line(CuTest* tc, const char* file, int line, const char* message, int condition); 61 void CuAssertStrEquals_LineMsg(CuTest* tc, 62 const char* file, int line, const char* message, 63 const char* expected, const char* actual); 64 void CuAssertIntEquals_LineMsg(CuTest* tc, 65 const char* file, int line, const char* message, 66 int expected, int actual); 67 void CuAssertLongIntEquals_LineMsg(CuTest *tc, 68 const char *file, int line, const char *message, 69 long int expected, long int actual); 70 void CuAssertDblEquals_LineMsg(CuTest* tc, 71 const char* file, int line, const char* message, 72 double expected, double actual, double delta); 73 void CuAssertPtrEquals_LineMsg(CuTest* tc, 74 const char* file, int line, const char* message, 75 const void* expected, const void* actual); 76 77 /* public assert functions */ 78 79 #define CuFail(tc, ms) CuFail_Line( (tc), __FILE__, __LINE__, NULL, (ms)) 80 #define CuAssert(tc, ms, cond) CuAssert_Line((tc), __FILE__, __LINE__, (ms), (cond)) 81 #define CuAssertTrue(tc, cond) CuAssert_Line((tc), __FILE__, __LINE__, "assert failed", (cond)) 82 83 #define CuAssertStrEquals(tc,ex,ac) CuAssertStrEquals_LineMsg((tc),__FILE__,__LINE__,NULL,(ex),(ac)) 84 #define CuAssertStrEquals_Msg(tc,ms,ex,ac) CuAssertStrEquals_LineMsg((tc),__FILE__,__LINE__,(ms),(ex),(ac)) 85 #define CuAssertIntEquals(tc,ex,ac) CuAssertIntEquals_LineMsg((tc),__FILE__,__LINE__,NULL,(ex),(ac)) 86 #define CuAssertIntEquals_Msg(tc,ms,ex,ac) CuAssertIntEquals_LineMsg((tc),__FILE__,__LINE__,(ms),(ex),(ac)) 87 #define CuAssertLongIntEquals(tc,ex,ac) CuAssertLongIntEquals_LineMsg((tc),__FILE__,__LINE__,NULL,(ex),(ac)) 88 #define CuAssertLongIntEquals_Msg(tc,ms,ex,ac) CuAssertLongIntEquals_LineMsg((tc),__FILE__,__LINE__,(ms),(ex),(ac)) 89 #define CuAssertDblEquals(tc,ex,ac,dl) CuAssertDblEquals_LineMsg((tc),__FILE__,__LINE__,NULL,(ex),(ac),(dl)) 90 #define CuAssertDblEquals_Msg(tc,ms,ex,ac,dl) CuAssertDblEquals_LineMsg((tc),__FILE__,__LINE__,(ms),(ex),(ac),(dl)) 91 #define CuAssertPtrEquals(tc,ex,ac) CuAssertPtrEquals_LineMsg((tc),__FILE__,__LINE__,NULL,(ex),(ac)) 92 #define CuAssertPtrEquals_Msg(tc,ms,ex,ac) CuAssertPtrEquals_LineMsg((tc),__FILE__,__LINE__,(ms),(ex),(ac)) 93 94 #define CuAssertPtrNotNull(tc,p) CuAssert_Line((tc),__FILE__,__LINE__,"null pointer unexpected",(p != NULL)) 95 #define CuAssertPtrNotNullMsg(tc,msg,p) CuAssert_Line((tc),__FILE__,__LINE__,(msg),(p != NULL)) 96 97 /* CuSuite */ 98 99 #define MAX_TEST_CASES 1024 100 101 #define SUITE_ADD_TEST(SUITE,TEST) CuSuiteAdd(SUITE, CuTestNew(#TEST, TEST)) 102 103 typedef struct 104 { 105 int count; 106 CuTest* list[MAX_TEST_CASES]; 107 int failCount; 108 109 } CuSuite; 110 111 112 void CuSuiteInit(CuSuite* testSuite); 113 CuSuite* CuSuiteNew(void); 114 void CuSuiteDelete(CuSuite *testSuite); 115 void CuSuiteAdd(CuSuite* testSuite, CuTest *testCase); 116 void CuSuiteAddSuite(CuSuite* testSuite, CuSuite* testSuite2); 117 void CuSuiteRun(CuSuite* testSuite); 118 void CuSuiteSummary(CuSuite* testSuite, CuString* summary); 119 void CuSuiteDetails(CuSuite* testSuite, CuString* details); 120 121 #endif /* CU_TEST_H */ 122