CuTest.h

00001 #ifndef CU_TEST_H
00002 #define CU_TEST_H
00003 
00004 #include <setjmp.h>
00005 #include <stdarg.h>
00006 #include <stdlib.h>
00007 
00008 /* CuString */
00009 
00010 char* CuStrAlloc(int size);
00011 char* CuStrCopy(const char* old);
00012 
00013 #define CU_ALLOC(TYPE)        ((TYPE*) malloc(sizeof(TYPE)))
00014 
00015 #define HUGE_STRING_LEN   8192
00016 #define STRING_MAX        256
00017 #define STRING_INC        256
00018 
00019 typedef struct
00020 {
00021     int length;
00022     int size;
00023     char* buffer;
00024 } CuString;
00025 
00026 void CuStringInit(CuString* str);
00027 CuString* CuStringNew(void);
00028 void CuStringRead(CuString* str, const char* path);
00029 void CuStringAppend(CuString* str, const char* text);
00030 void CuStringAppendChar(CuString* str, char ch);
00031 void CuStringAppendFormat(CuString* str, const char* format, ...);
00032 void CuStringInsert(CuString* str, const char* text, int pos);
00033 void CuStringResize(CuString* str, int newSize);
00034 
00035 /* CuTest */
00036 
00037 typedef struct CuTest CuTest;
00038 
00039 typedef void (*TestFunction)(CuTest *);
00040 
00041 struct CuTest
00042 {
00043     const char* name;
00044     TestFunction function;
00045     int failed;
00046     int ran;
00047     const char* message;
00048     jmp_buf *jumpBuf;
00049 };
00050 
00051 void CuTestInit(CuTest* t, const char* name, TestFunction function);
00052 CuTest* CuTestNew(const char* name, TestFunction function);
00053 void CuTestRun(CuTest* tc);
00054 
00055 /* Internal versions of assert functions -- use the public versions */
00056 void CuFail_Line(CuTest* tc, const char* file, int line, const char* message2, const char* message);
00057 void CuAssert_Line(CuTest* tc, const char* file, int line, const char* message, int condition);
00058 void CuAssertStrEquals_LineMsg(CuTest* tc, 
00059     const char* file, int line, const char* message, 
00060     const char* expected, const char* actual);
00061 void CuAssertIntEquals_LineMsg(CuTest* tc, 
00062     const char* file, int line, const char* message, 
00063     int expected, int actual);
00064 void CuAssertDblEquals_LineMsg(CuTest* tc, 
00065     const char* file, int line, const char* message, 
00066     double expected, double actual, double delta);
00067 void CuAssertPtrEquals_LineMsg(CuTest* tc, 
00068     const char* file, int line, const char* message, 
00069     void* expected, void* actual);
00070 
00071 /* public assert functions */
00072 
00073 #define CuFail(tc, ms)                        CuFail_Line(  (tc), __FILE__, __LINE__, NULL, (ms))
00074 #define CuAssert(tc, ms, cond)                CuAssert_Line((tc), __FILE__, __LINE__, (ms), (cond))
00075 #define CuAssertTrue(tc, cond)                CuAssert_Line((tc), __FILE__, __LINE__, "assert failed", (cond))
00076 
00077 #define CuAssertStrEquals(tc,ex,ac)           CuAssertStrEquals_LineMsg((tc),__FILE__,__LINE__,NULL,(ex),(ac))
00078 #define CuAssertStrEquals_Msg(tc,ms,ex,ac)    CuAssertStrEquals_LineMsg((tc),__FILE__,__LINE__,(ms),(ex),(ac))
00079 #define CuAssertIntEquals(tc,ex,ac)           CuAssertIntEquals_LineMsg((tc),__FILE__,__LINE__,NULL,(ex),(ac))
00080 #define CuAssertIntEquals_Msg(tc,ms,ex,ac)    CuAssertIntEquals_LineMsg((tc),__FILE__,__LINE__,(ms),(ex),(ac))
00081 #define CuAssertDblEquals(tc,ex,ac,dl)        CuAssertDblEquals_LineMsg((tc),__FILE__,__LINE__,NULL,(ex),(ac),(dl))
00082 #define CuAssertDblEquals_Msg(tc,ms,ex,ac,dl) CuAssertDblEquals_LineMsg((tc),__FILE__,__LINE__,(ms),(ex),(ac),(dl))
00083 #define CuAssertPtrEquals(tc,ex,ac)           CuAssertPtrEquals_LineMsg((tc),__FILE__,__LINE__,NULL,(ex),(ac))
00084 #define CuAssertPtrEquals_Msg(tc,ms,ex,ac)    CuAssertPtrEquals_LineMsg((tc),__FILE__,__LINE__,(ms),(ex),(ac))
00085 
00086 #define CuAssertPtrNotNull(tc,p)        CuAssert_Line((tc),__FILE__,__LINE__,"null pointer unexpected",(p != NULL))
00087 #define CuAssertPtrNotNullMsg(tc,msg,p) CuAssert_Line((tc),__FILE__,__LINE__,(msg),(p != NULL))
00088 
00089 /* CuSuite */
00090 
00091 #define MAX_TEST_CASES    1024
00092 
00093 #define SUITE_ADD_TEST(SUITE,TEST)    CuSuiteAdd(SUITE, CuTestNew(#TEST, TEST))
00094 
00095 typedef struct
00096 {
00097     int count;
00098     CuTest* list[MAX_TEST_CASES];
00099     int failCount;
00100 
00101 } CuSuite;
00102 
00103 
00104 void CuSuiteInit(CuSuite* testSuite);
00105 CuSuite* CuSuiteNew(void);
00106 void CuSuiteAdd(CuSuite* testSuite, CuTest *testCase);
00107 void CuSuiteAddSuite(CuSuite* testSuite, CuSuite* testSuite2);
00108 void CuSuiteRun(CuSuite* testSuite);
00109 void CuSuiteSummary(CuSuite* testSuite, CuString* summary);
00110 void CuSuiteDetails(CuSuite* testSuite, CuString* details);
00111 
00112 #endif /* CU_TEST_H */

Generated on Wed Feb 24 13:37:02 2010 for Python-on-a-chip by  doxygen 1.5.9