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