AUnit
1.5.5
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
src
aunit
MetaAssertMacros.h
Go to the documentation of this file.
1
/*
2
MIT License
3
4
Copyright (c) 2018 Brian T. Park
5
6
Permission is hereby granted, free of charge, to any person obtaining a copy
7
of this software and associated documentation files (the "Software"), to deal
8
in the Software without restriction, including without limitation the rights
9
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
copies of the Software, and to permit persons to whom the Software is
11
furnished to do so, subject to the following conditions:
12
13
The above copyright notice and this permission notice shall be included in all
14
copies or substantial portions of the Software.
15
16
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
SOFTWARE.
23
*/
24
25
// Significant portions of the design and implementation of this file came from
26
// https://github.com/mmurdoch/arduinounit/blob/master/src/ArduinoUnit.h
27
35
#ifndef AUNIT_META_ASSERT_MACROS_H
36
#define AUNIT_META_ASSERT_MACROS_H
37
38
#include "
Flash.h
"
39
40
// Meta tests, same syntax as ArduinoUnit for compatibility.
41
// The checkTestXxx() macros return a boolean, and execution continues.
42
44
#define checkTestDone(...)\
45
get_checkTestDone(__VA_ARGS__, checkTestDone2, checkTestDone1)\
46
(__VA_ARGS__)
47
#define get_checkTestDone(_1, _2, NAME, ...) NAME
48
#define checkTestDone1(name) (test_##name##_instance.isDone())
49
#define checkTestDone2(testSuite, name) (testSuite##_##name##_instance.isDone())
50
52
#define checkTestNotDone(...)\
53
get_checkTestNotDone(__VA_ARGS__, checkTestNotDone2, checkTestNotDone1)\
54
(__VA_ARGS__)
55
#define get_checkTestNotDone(_1, _2, NAME, ...) NAME
56
#define checkTestNotDone1(name) (test_##name##_instance.isNotDone())
57
#define checkTestNotDone2(testSuite, name) (testSuite##_##name##_instance.isNotDone())
58
60
#define checkTestPass(...)\
61
get_checkTestPass(__VA_ARGS__, checkTestPass2, checkTestPass1)\
62
(__VA_ARGS__)
63
#define get_checkTestPass(_1, _2, NAME, ...) NAME
64
#define checkTestPass1(name) (test_##name##_instance.isPassed())
65
#define checkTestPass2(testSuite, name) (testSuite##_##name##_instance.isPassed())
66
68
#define checkTestNotPass(...)\
69
get_checkTestNotPass(__VA_ARGS__, checkTestNotPass2, checkTestNotPass1)\
70
(__VA_ARGS__)
71
#define get_checkTestNotPass(_1, _2, NAME, ...) NAME
72
#define checkTestNotPass1(name) (test_##name##_instance.isNotPassed())
73
#define checkTestNotPass2(testSuite, name) (testSuite##_##name##_instance.isNotPassed())
74
76
#define checkTestFail(...)\
77
get_checkTestFail(__VA_ARGS__, checkTestFail2, checkTestFail1)\
78
(__VA_ARGS__)
79
#define get_checkTestFail(_1, _2, NAME, ...) NAME
80
#define checkTestFail1(name) (test_##name##_instance.isFailed())
81
#define checkTestFail2(testSuite, name) (testSuite##_##name##_instance.isFailed())
82
84
#define checkTestNotFail(...)\
85
get_checkTestNotFail(__VA_ARGS__, checkTestNotFail2, checkTestNotFail1)\
86
(__VA_ARGS__)
87
#define get_checkTestNotFail(_1, _2, NAME, ...) NAME
88
#define checkTestNotFail1(name) (test_##name##_instance.isNotFailed())
89
#define checkTestNotFail2(testSuite, name) (testSuite##_##name##_instance.isNotFailed())
90
92
#define checkTestSkip(...)\
93
get_checkTestSkip(__VA_ARGS__, checkTestSkip2, checkTestSkip1)\
94
(__VA_ARGS__)
95
#define get_checkTestSkip(_1, _2, NAME, ...) NAME
96
#define checkTestSkip1(name) (test_##name##_instance.isSkipped())
97
#define checkTestSkip2(testSuite, name) (testSuite##_##name##_instance.isSkipped())
98
100
#define checkTestNotSkip(...)\
101
get_checkTestNotSkip(__VA_ARGS__, checkTestNotSkip2, checkTestNotSkip1)\
102
(__VA_ARGS__)
103
#define get_checkTestNotSkip(_1, _2, NAME, ...) NAME
104
#define checkTestNotSkip1(name) (test_##name##_instance.isNotSkipped())
105
#define checkTestNotSkip2(testSuite, name) (testSuite##_##name##_instance.isNotSkipped())
106
108
#define checkTestExpire(...)\
109
get_checkTestExpire(__VA_ARGS__, checkTestExpire2, checkTestExpire1)\
110
(__VA_ARGS__)
111
#define get_checkTestExpire(_1, _2, NAME, ...) NAME
112
#define checkTestExpire1(name) (test_##name##_instance.isExpired())
113
#define checkTestExpire2(testSuite, name) (testSuite##_##name##_instance.isExpired())
114
116
#define checkTestNotExpire(...)\
117
get_checkTestNotExpire(__VA_ARGS__, checkTestNotExpire2, checkTestNotExpire1)\
118
(__VA_ARGS__)
119
#define get_checkTestNotExpire(_1, _2, NAME, ...) NAME
120
#define checkTestNotExpire1(name) (test_##name##_instance.isNotExpired())
121
#define checkTestNotExpire2(testSuite, name) (testSuite##_##name##_instance.isNotExpired())
122
123
// If the assertTestXxx() macros fail, they generate an optional output, calls
124
// fail(), and returns from the current test case.
125
127
#define assertTestDone(...)\
128
get_assertTestDone(__VA_ARGS__, assertTestDone2, assertTestDone1)\
129
(__VA_ARGS__)
130
#define get_assertTestDone(_1, _2, NAME, ...) NAME
131
#define assertTestDone1(name) \
132
assertTestStatusInternal1(name, isDone, kMessageDone)
133
#define assertTestDone2(testSuite, name) \
134
assertTestStatusInternal2(testSuite, name, isDone, kMessageDone)
135
137
#define assertTestNotDone(...)\
138
get_assertTestNotDone(__VA_ARGS__, assertTestNotDone2, assertTestNotDone1)\
139
(__VA_ARGS__)
140
#define get_assertTestNotDone(_1, _2, NAME, ...) NAME
141
#define assertTestNotDone1(name) \
142
assertTestStatusInternal1(name, isNotDone, kMessageNotDone)
143
#define assertTestNotDone2(testSuite, name) \
144
assertTestStatusInternal2(testSuite, name, isNotDone, kMessageNotDone)
145
147
#define assertTestPass(...)\
148
get_assertTestPass(__VA_ARGS__, assertTestPass2, assertTestPass1)\
149
(__VA_ARGS__)
150
#define get_assertTestPass(_1, _2, NAME, ...) NAME
151
#define assertTestPass1(name) \
152
assertTestStatusInternal1(name, isPassed, kMessagePassed)
153
#define assertTestPass2(testSuite, name) \
154
assertTestStatusInternal2(testSuite, name, isPassed, kMessagePassed)
155
157
#define assertTestNotPass(...)\
158
get_assertTestNotPass(__VA_ARGS__, assertTestNotPass2, assertTestNotPass1)\
159
(__VA_ARGS__)
160
#define get_assertTestNotPass(_1, _2, NAME, ...) NAME
161
#define assertTestNotPass1(name) \
162
assertTestStatusInternal1(name, isNotPassed, kMessageNotPassed)
163
#define assertTestNotPass2(testSuite, name) \
164
assertTestStatusInternal2(testSuite, name, isNotPassed, kMessageNotPassed)
165
167
#define assertTestFail(...)\
168
get_assertTestFail(__VA_ARGS__, assertTestFail2, assertTestFail1)\
169
(__VA_ARGS__)
170
#define get_assertTestFail(_1, _2, NAME, ...) NAME
171
#define assertTestFail1(name) \
172
assertTestStatusInternal1(name, isFailed, kMessageFailed)
173
#define assertTestFail2(testSuite, name) \
174
assertTestStatusInternal2(testSuite, name, isFailed, kMessageFailed)
175
177
#define assertTestNotFail(...)\
178
get_assertTestNotFail(__VA_ARGS__, assertTestNotFail2, assertTestNotFail1)\
179
(__VA_ARGS__)
180
#define get_assertTestNotFail(_1, _2, NAME, ...) NAME
181
#define assertTestNotFail1(name) \
182
assertTestStatusInternal1(name, isNotFailed, kMessageNotFailed)
183
#define assertTestNotFail2(testSuite, name) \
184
assertTestStatusInternal2(testSuite, name, isNotFailed, kMessageNotFailed)
185
187
#define assertTestSkip(...)\
188
get_assertTestSkip(__VA_ARGS__, assertTestSkip2, assertTestSkip1)\
189
(__VA_ARGS__)
190
#define get_assertTestSkip(_1, _2, NAME, ...) NAME
191
#define assertTestSkip1(name) \
192
assertTestStatusInternal1(name, isSkipped, kMessageSkipped)
193
#define assertTestSkip2(testSuite, name) \
194
assertTestStatusInternal2(testSuite, name, isSkipped, kMessageSkipped)
195
197
#define assertTestNotSkip(...)\
198
get_assertTestNotSkip(__VA_ARGS__, assertTestNotSkip2, assertTestNotSkip1)\
199
(__VA_ARGS__)
200
#define get_assertTestNotSkip(_1, _2, NAME, ...) NAME
201
#define assertTestNotSkip1(name) \
202
assertTestStatusInternal1(name, isNotSkipped, kMessageNotSkipped)
203
#define assertTestNotSkip2(testSuite, name) \
204
assertTestStatusInternal2(testSuite, name, isNotSkipped, kMessageNotSkipped)
205
207
#define assertTestExpire(...)\
208
get_assertTestExpire(__VA_ARGS__, assertTestExpire2, assertTestExpire1)\
209
(__VA_ARGS__)
210
#define get_assertTestExpire(_1, _2, NAME, ...) NAME
211
#define assertTestExpire1(name) \
212
assertTestStatusInternal1(name, isExpired, kMessageExpired)
213
#define assertTestExpire2(testSuite, name) \
214
assertTestStatusInternal2(testSuite, name, isExpired, kMessageExpired)
215
217
#define assertTestNotExpire(...)\
218
get_assertTestNotExpire(__VA_ARGS__, assertTestNotExpire2, assertTestNotExpire1)\
219
(__VA_ARGS__)
220
#define get_assertTestNotExpire(_1, _2, NAME, ...) NAME
221
#define assertTestNotExpire1(name) \
222
assertTestStatusInternal1(name, isNotExpired, kMessageNotExpired)
223
#define assertTestNotExpire2(testSuite, name) \
224
assertTestStatusInternal2(testSuite, name, isNotExpired, kMessageNotExpired)
225
227
#define assertTestStatusInternal1(name,method,message) do {\
228
if (!assertionTestStatus(\
229
__FILE__,__LINE__,#name,AUNIT_FPSTR(message),\
230
test_##name##_instance.method()))\
231
return;\
232
} while (false)
233
234
#define assertTestStatusInternal2(testSuite,name,method,message) do {\
235
if (!assertionTestStatus(\
236
__FILE__,__LINE__,#testSuite "_" #name,AUNIT_FPSTR(message),\
237
testSuite##_##name##_instance.method()))\
238
return;\
239
} while (false)
240
241
// Meta tests for testF() and testingF() are slightly different because
242
// the name of the fixture class is appended to the instance name.
243
245
#define checkTestDoneF(testClass,name) \
246
(testClass##_##name##_instance.isDone())
247
249
#define checkTestNotDoneF(testClass,name) \
250
(testClass##_##name##_instance.isNotDone())
251
253
#define checkTestPassF(testClass,name) \
254
(testClass##_##name##_instance.isPassed())
255
257
#define checkTestNotPassF(testClass,name) \
258
(testClass##_##name##_instance.isNotPassed())
259
261
#define checkTestFailF(testClass,name) \
262
(testClass##_##name##_instance.isFailed())
263
265
#define checkTestNotFailF(testClass,name) \
266
(testClass##_##name##_instance.isNotFailed())
267
269
#define checkTestSkipF(testClass,name) \
270
(testClass##_##name##_instance.isSkipped())
271
273
#define checkTestNotSkipF(testClass,name) \
274
(testClass##_##name##_instance.isNotSkipped())
275
277
#define checkTestExpireF(testClass,name) \
278
(testClass##_##name##_instance.isExpired())
279
281
#define checkTestNotExpireF(testClass,name) \
282
(testClass##_##name##_instance.isNotExpired())
283
284
// If the assertTestXxx() macros fail, they generate an optional output, calls
285
// fail(), and returns from the current test case.
286
288
#define assertTestDoneF(testClass,name) \
289
assertTestStatusInternalF(testClass, name, isDone, kMessageDone)
290
292
#define assertTestNotDoneF(testClass,name) \
293
assertTestStatusInternalF(testClass, name, isNotDone, kMessageNotDone)
294
296
#define assertTestPassF(testClass,name) \
297
assertTestStatusInternalF(testClass, name, isPassed, kMessagePassed)
298
300
#define assertTestNotPassF(testClass,name) \
301
assertTestStatusInternalF(testClass, name, isNotPassed, kMessageNotPassed)
302
304
#define assertTestFailF(testClass,name) \
305
assertTestStatusInternalF(testClass, name, isFailed, kMessageFailed)
306
308
#define assertTestNotFailF(testClass,name) \
309
assertTestStatusInternalF(testClass, name, isNotFailed, kMessageNotFailed)
310
312
#define assertTestSkipF(testClass,name) \
313
assertTestStatusInternalF(testClass, name, isSkipped, kMessageSkipped)
314
316
#define assertTestNotSkipF(testClass,name) \
317
assertTestStatusInternalF(testClass, name, isNotSkipped, \
318
kMessageNotSkipped)
319
321
#define assertTestExpireF(testClass,name) \
322
assertTestStatusInternalF(testClass, name, isExpired, kMessageExpired)
323
325
#define assertTestNotExpireF(testClass,name) \
326
assertTestStatusInternalF(testClass, name, isNotExpired, \
327
kMessageNotExpired)
328
330
#define assertTestStatusInternalF(testClass,name,method,message) do {\
331
if (!assertionTestStatus(__FILE__, __LINE__, #name, AUNIT_FPSTR(message),\
332
testClass##_##name##_instance.method()))\
333
return;\
334
} while (false)
335
336
// Methods that sets the status of the current test, prints a message, and
337
// exits immediately.
338
343
#define failTestNow() do {\
344
setStatusNow(__FILE__, __LINE__, kStatusFailed, AUNIT_FPSTR(kMessageFailed));\
345
return;\
346
} while (false)
347
352
#define passTestNow() do {\
353
setStatusNow(__FILE__, __LINE__, kStatusPassed, AUNIT_FPSTR(kMessagePassed));\
354
return;\
355
} while (false)
356
361
#define skipTestNow() do {\
362
setStatusNow(__FILE__, __LINE__, kStatusSkipped,\
363
AUNIT_FPSTR(kMessageSkipped));\
364
return;\
365
} while (false)
366
371
#define expireTestNow() do {\
372
setStatusNow(__FILE__, __LINE__, kStatusExpired,\
373
AUNIT_FPSTR(kMessageExpired));\
374
return;\
375
} while (false)
376
377
#endif
Flash.h
Generated by
1.8.17