36 #ifndef AUNIT_TEST_MACROS_H
37 #define AUNIT_TEST_MACROS_H
44 #include "TestAgain.h"
54 GET_TEST(__VA_ARGS__, TEST2, TEST1)(__VA_ARGS__)
56 #define GET_TEST(_1, _2, NAME, ...) NAME
59 class test_##name : public aunit::TestOnce {\
62 void once() override;\
63 } test_##name##_instance;\
64 test_##name :: test_##name() {\
65 init(AUNIT_F(#name)); \
67 void test_##name :: once()
69 #define TEST2(suiteName, name) \
70 class suiteName##_##name : public aunit::TestOnce {\
72 suiteName##_##name();\
73 void once() override;\
74 } suiteName##_##name##_instance;\
75 suiteName##_##name :: suiteName##_##name() {\
76 init(AUNIT_F(#suiteName "_" #name)); \
78 void suiteName##_##name :: once()
89 #define testing(...) \
90 GET_TESTING(__VA_ARGS__, TESTING2, TESTING1)(__VA_ARGS__)
92 #define GET_TESTING(_1, _2, NAME, ...) NAME
94 #define TESTING1(name) \
95 class test_##name : public aunit::TestAgain {\
98 void again() override;\
99 } test_##name##_instance;\
100 test_##name :: test_##name() {\
101 init(AUNIT_F(#name));\
103 void test_##name :: again()
105 #define TESTING2(suiteName, name) \
106 class suiteName##_##name : public aunit::TestAgain {\
108 suiteName##_##name();\
109 void again() override;\
110 } suiteName##_##name##_instance;\
111 suiteName##_##name :: suiteName##_##name() {\
112 init(AUNIT_F(#suiteName "_" #name));\
114 void suiteName##_##name :: again()
125 #define externTest(...) \
126 GET_EXTERN_TEST(__VA_ARGS__, EXTERN_TEST2, EXTERN_TEST1)(__VA_ARGS__)
128 #define GET_EXTERN_TEST(_1, _2, NAME, ...) NAME
130 #define EXTERN_TEST1(name) \
131 class test_##name : public aunit::TestOnce {\
136 extern test_##name test_##name##_instance
138 #define EXTERN_TEST2(suiteName, name) \
139 class suiteName##_##name : public aunit::TestOnce {\
141 suiteName##_##name();\
144 extern suiteName##_##name suiteName##_##name##_instance
155 #define externTesting(...) \
156 GET_EXTERN_TESTING(__VA_ARGS__, EXTERN_TESTING2, EXTERN_TESTING1)(__VA_ARGS__)
158 #define GET_EXTERN_TESTING(_1, _2, NAME, ...) NAME
160 #define EXTERN_TESTING1(name) \
161 class test_ ## name : public aunit::TestAgain {\
166 extern test_##name test_##name##_instance
168 #define EXTERN_TESTING2(suiteName, name) \
169 class suiteName##_ ## name : public aunit::TestAgain {\
171 suiteName##_ ## name();\
174 extern suiteName##_##name suiteName##_##name##_instance
181 #define testF(testClass, name) \
182 class testClass ## _ ## name : public testClass {\
184 testClass ## _ ## name();\
185 void once() override;\
186 } testClass ## _ ## name ## _instance;\
187 testClass ## _ ## name :: testClass ## _ ## name() {\
188 init(AUNIT_F(#testClass "_" #name));\
190 void testClass ## _ ## name :: once()
200 #define testingF(testClass, name) \
201 class testClass ## _ ## name : public testClass {\
203 testClass ## _ ## name();\
204 void again() override;\
205 } testClass ## _ ## name ## _instance;\
206 testClass ## _ ## name :: testClass ## _ ## name() {\
207 init(AUNIT_F(#testClass "_" #name));\
209 void testClass ## _ ## name :: again()
216 #define externTestF(testClass, name) \
217 class testClass ## _ ## name : public testClass {\
219 testClass ## _ ## name();\
220 void once() override;\
222 extern testClass ## _ ## name testClass##_##name##_instance
230 #define externTestingF(testClass, name) \
231 class testClass ## _ ## name : public testClass {\
233 testClass ## _ ## name();\
234 void again() override;\
236 extern testClass ## _ ## name testClass##_##name##_instance
Various macros to smooth over the differences among the various platforms with regards to their suppo...