xref: /haiku/src/tests/system/kernel/unit/TestSuite.h (revision 220d04022750f40f8bac8f01fa551211e28d04f2)
1 /*
2  * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef TEST_SUITE_H
6 #define TEST_SUITE_H
7 
8 
9 #include <new>
10 
11 #include "Test.h"
12 
13 
14 class TestSuite : public Test {
15 public:
16 								TestSuite(const char* name);
17 	virtual						~TestSuite();
18 
19 			int32				CountTests() const;
20 			Test*				TestAt(int32 index) const;
21 			Test*				FindTest(const char* name,
22 									int32 nameLength = -1) const;
23 
24 			bool				AddTest(Test* test);
25 
26 	virtual	bool				IsLeafTest() const;
27 
28 	virtual	bool				Run(TestContext& context);
29 	virtual	bool				Run(TestContext& context, const char* name);
30 
31 	virtual	Test*				Visit(TestVisitor& visitor);
32 
33 private:
34 			bool				_Run(TestContext& context, Test* test,
35 									const char* name);
36 
37 private:
38 			Test**				fTests;
39 			int32				fTestCount;
40 };
41 
42 
43 #define ADD_TEST(suite, test)			\
44 	do {								\
45 		if (!suite->AddTest(test)) {	\
46 			delete test;				\
47 			delete suite;				\
48 			return NULL;				\
49 		}								\
50 	} while (false)
51 
52 #define ADD_STANDARD_TEST(suite, type, method)								\
53 	do {																	\
54 		type* object = new(std::nothrow) type;								\
55 		if (object == NULL)													\
56 			return NULL;													\
57 																			\
58 		StandardTest<type>* test = new(std::nothrow) StandardTest<type>(	\
59 			#method, object, &type::method);								\
60 		if (test == NULL) {													\
61 			delete object;													\
62 			return NULL;													\
63 		}																	\
64 		ADD_TEST(suite, test);												\
65 	} while (false)
66 
67 
68 #endif	// TEST_SUITE_H
69