AUnit  1.7.1
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
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
Various macros to smooth over the differences among the various platforms with regards to their suppo...