xref: /aosp_15_r20/external/selinux/libsepol/cil/test/unit/CuTest.h (revision 2d543d20722ada2425b5bdab9d0d1d29470e7bba)
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