1 // This file was GENERATED by command:
2 // pump.py cmock-function-class-mockers.h.pump
3 // DO NOT EDIT BY HAND!!!
5 // Copyright 2021, Hubert Jagodziński
6 // All rights reserved.
8 // Redistribution and use in source and binary forms, with or without
9 // modification, are permitted provided that the following conditions are
12 // * Redistributions of source code must retain the above copyright
13 // notice, this list of conditions and the following disclaimer.
14 // * Redistributions in binary form must reproduce the above
15 // copyright notice, this list of conditions and the following disclaimer
16 // in the documentation and/or other materials provided with the
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 // Author: hubert.jagodzinski@gmail.com (Hubert Jagodziński)
33 // C Mock - Google Mock's extension allowing a function mocking.
35 // This file implements CMockMocker class and CMOCK_MOCK_FUNCTIONn() macros of
38 #ifndef CMOCK_INCLUDE_CMOCK_CMOCK_FUNCTION_CLASS_MOCKERS_H_
39 #define CMOCK_INCLUDE_CMOCK_CMOCK_FUNCTION_CLASS_MOCKERS_H_
46 // Allows finding an instance of a class:
47 // class Foo : public CMockMocker<Foo> { ... }
48 // Foo *p = CMockMocker<Foo>::cmock_get_instance();
63 static T *cmock_get_instance() { return instance; }
70 T *CMockMocker<T>::instance = NULL;
72 // Find the real implementation of a mocked function
74 cmock_lookup(const char *fname)
76 return dlsym(RTLD_NEXT, fname);
79 #define CMOCK_MOCK_FUNCTION0(c, n, F) \
80 static GMOCK_RESULT_(, F) (*__cmock_real_##c##_##n)() = \
81 (GMOCK_RESULT_(, F) (*)())cmock_lookup(#n); \
83 GMOCK_RESULT_(, F) n() { \
84 c *mock = c::cmock_get_instance(); \
89 if (__cmock_real_##c##_##n == NULL) { \
90 std::ostringstream msg; \
91 msg << "Error: Function " << #n; \
92 msg << " not found. Neither mock nor real function is present."; \
93 throw std::logic_error(msg.str()); \
95 return __cmock_real_##c##_##n(); \
98 #define CMOCK_MOCK_FUNCTION1(c, n, F) \
99 static GMOCK_RESULT_(, F) (*__cmock_real_##c##_##n)(GMOCK_ARG_(, 1, \
101 (GMOCK_RESULT_(, F) (*)(GMOCK_ARG_(, 1, F) cmock_a1))cmock_lookup(#n); \
103 GMOCK_RESULT_(, F) n(GMOCK_ARG_(, 1, F) cmock_a1) { \
104 c *mock = c::cmock_get_instance(); \
105 if (mock != NULL) { \
106 return mock->n(cmock_a1); \
109 if (__cmock_real_##c##_##n == NULL) { \
110 std::ostringstream msg; \
111 msg << "Error: Function " << #n; \
112 msg << " not found. Neither mock nor real function is present."; \
113 throw std::logic_error(msg.str()); \
115 return __cmock_real_##c##_##n(cmock_a1); \
118 #define CMOCK_MOCK_FUNCTION2(c, n, F) \
119 static GMOCK_RESULT_(, F) (*__cmock_real_##c##_##n)(GMOCK_ARG_(, 1, \
120 F) cmock_a1, GMOCK_ARG_(, 2, F) cmock_a2) = \
121 (GMOCK_RESULT_(, F) (*)(GMOCK_ARG_(, 1, F) cmock_a1, GMOCK_ARG_(, 2, \
122 F) cmock_a2))cmock_lookup(#n); \
124 GMOCK_RESULT_(, F) n(GMOCK_ARG_(, 1, F) cmock_a1, GMOCK_ARG_(, 2, \
126 c *mock = c::cmock_get_instance(); \
127 if (mock != NULL) { \
128 return mock->n(cmock_a1, cmock_a2); \
131 if (__cmock_real_##c##_##n == NULL) { \
132 std::ostringstream msg; \
133 msg << "Error: Function " << #n; \
134 msg << " not found. Neither mock nor real function is present."; \
135 throw std::logic_error(msg.str()); \
137 return __cmock_real_##c##_##n(cmock_a1, cmock_a2); \
140 #define CMOCK_MOCK_FUNCTION3(c, n, F) \
141 static GMOCK_RESULT_(, F) (*__cmock_real_##c##_##n)(GMOCK_ARG_(, 1, \
142 F) cmock_a1, GMOCK_ARG_(, 2, F) cmock_a2, GMOCK_ARG_(, 3, \
144 (GMOCK_RESULT_(, F) (*)(GMOCK_ARG_(, 1, F) cmock_a1, GMOCK_ARG_(, 2, \
145 F) cmock_a2, GMOCK_ARG_(, 3, F) cmock_a3))cmock_lookup(#n); \
147 GMOCK_RESULT_(, F) n(GMOCK_ARG_(, 1, F) cmock_a1, GMOCK_ARG_(, 2, \
148 F) cmock_a2, GMOCK_ARG_(, 3, F) cmock_a3) { \
149 c *mock = c::cmock_get_instance(); \
150 if (mock != NULL) { \
151 return mock->n(cmock_a1, cmock_a2, cmock_a3); \
154 if (__cmock_real_##c##_##n == NULL) { \
155 std::ostringstream msg; \
156 msg << "Error: Function " << #n; \
157 msg << " not found. Neither mock nor real function is present."; \
158 throw std::logic_error(msg.str()); \
160 return __cmock_real_##c##_##n(cmock_a1, cmock_a2, cmock_a3); \
163 #define CMOCK_MOCK_FUNCTION4(c, n, F) \
164 static GMOCK_RESULT_(, F) (*__cmock_real_##c##_##n)(GMOCK_ARG_(, 1, \
165 F) cmock_a1, GMOCK_ARG_(, 2, F) cmock_a2, GMOCK_ARG_(, 3, F) cmock_a3, \
166 GMOCK_ARG_(, 4, F) cmock_a4) = \
167 (GMOCK_RESULT_(, F) (*)(GMOCK_ARG_(, 1, F) cmock_a1, GMOCK_ARG_(, 2, \
168 F) cmock_a2, GMOCK_ARG_(, 3, F) cmock_a3, GMOCK_ARG_(, 4, \
169 F) cmock_a4))cmock_lookup(#n); \
171 GMOCK_RESULT_(, F) n(GMOCK_ARG_(, 1, F) cmock_a1, GMOCK_ARG_(, 2, \
172 F) cmock_a2, GMOCK_ARG_(, 3, F) cmock_a3, GMOCK_ARG_(, 4, \
174 c *mock = c::cmock_get_instance(); \
175 if (mock != NULL) { \
176 return mock->n(cmock_a1, cmock_a2, cmock_a3, cmock_a4); \
179 if (__cmock_real_##c##_##n == NULL) { \
180 std::ostringstream msg; \
181 msg << "Error: Function " << #n; \
182 msg << " not found. Neither mock nor real function is present."; \
183 throw std::logic_error(msg.str()); \
185 return __cmock_real_##c##_##n(cmock_a1, cmock_a2, cmock_a3, cmock_a4); \
188 #define CMOCK_MOCK_FUNCTION5(c, n, F) \
189 static GMOCK_RESULT_(, F) (*__cmock_real_##c##_##n)(GMOCK_ARG_(, 1, \
190 F) cmock_a1, GMOCK_ARG_(, 2, F) cmock_a2, GMOCK_ARG_(, 3, F) cmock_a3, \
191 GMOCK_ARG_(, 4, F) cmock_a4, GMOCK_ARG_(, 5, F) cmock_a5) = \
192 (GMOCK_RESULT_(, F) (*)(GMOCK_ARG_(, 1, F) cmock_a1, GMOCK_ARG_(, 2, \
193 F) cmock_a2, GMOCK_ARG_(, 3, F) cmock_a3, GMOCK_ARG_(, 4, F) cmock_a4, \
194 GMOCK_ARG_(, 5, F) cmock_a5))cmock_lookup(#n); \
196 GMOCK_RESULT_(, F) n(GMOCK_ARG_(, 1, F) cmock_a1, GMOCK_ARG_(, 2, \
197 F) cmock_a2, GMOCK_ARG_(, 3, F) cmock_a3, GMOCK_ARG_(, 4, F) cmock_a4, \
198 GMOCK_ARG_(, 5, F) cmock_a5) { \
199 c *mock = c::cmock_get_instance(); \
200 if (mock != NULL) { \
201 return mock->n(cmock_a1, cmock_a2, cmock_a3, cmock_a4, cmock_a5); \
204 if (__cmock_real_##c##_##n == NULL) { \
205 std::ostringstream msg; \
206 msg << "Error: Function " << #n; \
207 msg << " not found. Neither mock nor real function is present."; \
208 throw std::logic_error(msg.str()); \
210 return __cmock_real_##c##_##n(cmock_a1, cmock_a2, cmock_a3, cmock_a4, \
214 #define CMOCK_MOCK_FUNCTION6(c, n, F) \
215 static GMOCK_RESULT_(, F) (*__cmock_real_##c##_##n)(GMOCK_ARG_(, 1, \
216 F) cmock_a1, GMOCK_ARG_(, 2, F) cmock_a2, GMOCK_ARG_(, 3, F) cmock_a3, \
217 GMOCK_ARG_(, 4, F) cmock_a4, GMOCK_ARG_(, 5, F) cmock_a5, GMOCK_ARG_(, 6, \
219 (GMOCK_RESULT_(, F) (*)(GMOCK_ARG_(, 1, F) cmock_a1, GMOCK_ARG_(, 2, \
220 F) cmock_a2, GMOCK_ARG_(, 3, F) cmock_a3, GMOCK_ARG_(, 4, F) cmock_a4, \
221 GMOCK_ARG_(, 5, F) cmock_a5, GMOCK_ARG_(, 6, \
222 F) cmock_a6))cmock_lookup(#n); \
224 GMOCK_RESULT_(, F) n(GMOCK_ARG_(, 1, F) cmock_a1, GMOCK_ARG_(, 2, \
225 F) cmock_a2, GMOCK_ARG_(, 3, F) cmock_a3, GMOCK_ARG_(, 4, F) cmock_a4, \
226 GMOCK_ARG_(, 5, F) cmock_a5, GMOCK_ARG_(, 6, F) cmock_a6) { \
227 c *mock = c::cmock_get_instance(); \
228 if (mock != NULL) { \
229 return mock->n(cmock_a1, cmock_a2, cmock_a3, cmock_a4, cmock_a5, \
233 if (__cmock_real_##c##_##n == NULL) { \
234 std::ostringstream msg; \
235 msg << "Error: Function " << #n; \
236 msg << " not found. Neither mock nor real function is present."; \
237 throw std::logic_error(msg.str()); \
239 return __cmock_real_##c##_##n(cmock_a1, cmock_a2, cmock_a3, cmock_a4, \
240 cmock_a5, cmock_a6); \
243 #define CMOCK_MOCK_FUNCTION7(c, n, F) \
244 static GMOCK_RESULT_(, F) (*__cmock_real_##c##_##n)(GMOCK_ARG_(, 1, \
245 F) cmock_a1, GMOCK_ARG_(, 2, F) cmock_a2, GMOCK_ARG_(, 3, F) cmock_a3, \
246 GMOCK_ARG_(, 4, F) cmock_a4, GMOCK_ARG_(, 5, F) cmock_a5, GMOCK_ARG_(, 6, \
247 F) cmock_a6, GMOCK_ARG_(, 7, F) cmock_a7) = \
248 (GMOCK_RESULT_(, F) (*)(GMOCK_ARG_(, 1, F) cmock_a1, GMOCK_ARG_(, 2, \
249 F) cmock_a2, GMOCK_ARG_(, 3, F) cmock_a3, GMOCK_ARG_(, 4, F) cmock_a4, \
250 GMOCK_ARG_(, 5, F) cmock_a5, GMOCK_ARG_(, 6, F) cmock_a6, GMOCK_ARG_(, \
251 7, F) cmock_a7))cmock_lookup(#n); \
253 GMOCK_RESULT_(, F) n(GMOCK_ARG_(, 1, F) cmock_a1, GMOCK_ARG_(, 2, \
254 F) cmock_a2, GMOCK_ARG_(, 3, F) cmock_a3, GMOCK_ARG_(, 4, F) cmock_a4, \
255 GMOCK_ARG_(, 5, F) cmock_a5, GMOCK_ARG_(, 6, F) cmock_a6, GMOCK_ARG_(, 7, \
257 c *mock = c::cmock_get_instance(); \
258 if (mock != NULL) { \
259 return mock->n(cmock_a1, cmock_a2, cmock_a3, cmock_a4, cmock_a5, \
260 cmock_a6, cmock_a7); \
263 if (__cmock_real_##c##_##n == NULL) { \
264 std::ostringstream msg; \
265 msg << "Error: Function " << #n; \
266 msg << " not found. Neither mock nor real function is present."; \
267 throw std::logic_error(msg.str()); \
269 return __cmock_real_##c##_##n(cmock_a1, cmock_a2, cmock_a3, cmock_a4, \
270 cmock_a5, cmock_a6, cmock_a7); \
273 #define CMOCK_MOCK_FUNCTION8(c, n, F) \
274 static GMOCK_RESULT_(, F) (*__cmock_real_##c##_##n)(GMOCK_ARG_(, 1, \
275 F) cmock_a1, GMOCK_ARG_(, 2, F) cmock_a2, GMOCK_ARG_(, 3, F) cmock_a3, \
276 GMOCK_ARG_(, 4, F) cmock_a4, GMOCK_ARG_(, 5, F) cmock_a5, GMOCK_ARG_(, 6, \
277 F) cmock_a6, GMOCK_ARG_(, 7, F) cmock_a7, GMOCK_ARG_(, 8, \
279 (GMOCK_RESULT_(, F) (*)(GMOCK_ARG_(, 1, F) cmock_a1, GMOCK_ARG_(, 2, \
280 F) cmock_a2, GMOCK_ARG_(, 3, F) cmock_a3, GMOCK_ARG_(, 4, F) cmock_a4, \
281 GMOCK_ARG_(, 5, F) cmock_a5, GMOCK_ARG_(, 6, F) cmock_a6, GMOCK_ARG_(, \
282 7, F) cmock_a7, GMOCK_ARG_(, 8, F) cmock_a8))cmock_lookup(#n); \
284 GMOCK_RESULT_(, F) n(GMOCK_ARG_(, 1, F) cmock_a1, GMOCK_ARG_(, 2, \
285 F) cmock_a2, GMOCK_ARG_(, 3, F) cmock_a3, GMOCK_ARG_(, 4, F) cmock_a4, \
286 GMOCK_ARG_(, 5, F) cmock_a5, GMOCK_ARG_(, 6, F) cmock_a6, GMOCK_ARG_(, 7, \
287 F) cmock_a7, GMOCK_ARG_(, 8, F) cmock_a8) { \
288 c *mock = c::cmock_get_instance(); \
289 if (mock != NULL) { \
290 return mock->n(cmock_a1, cmock_a2, cmock_a3, cmock_a4, cmock_a5, \
291 cmock_a6, cmock_a7, cmock_a8); \
294 if (__cmock_real_##c##_##n == NULL) { \
295 std::ostringstream msg; \
296 msg << "Error: Function " << #n; \
297 msg << " not found. Neither mock nor real function is present."; \
298 throw std::logic_error(msg.str()); \
300 return __cmock_real_##c##_##n(cmock_a1, cmock_a2, cmock_a3, cmock_a4, \
301 cmock_a5, cmock_a6, cmock_a7, cmock_a8); \
304 #define CMOCK_MOCK_FUNCTION9(c, n, F) \
305 static GMOCK_RESULT_(, F) (*__cmock_real_##c##_##n)(GMOCK_ARG_(, 1, \
306 F) cmock_a1, GMOCK_ARG_(, 2, F) cmock_a2, GMOCK_ARG_(, 3, F) cmock_a3, \
307 GMOCK_ARG_(, 4, F) cmock_a4, GMOCK_ARG_(, 5, F) cmock_a5, GMOCK_ARG_(, 6, \
308 F) cmock_a6, GMOCK_ARG_(, 7, F) cmock_a7, GMOCK_ARG_(, 8, F) cmock_a8, \
309 GMOCK_ARG_(, 9, F) cmock_a9) = \
310 (GMOCK_RESULT_(, F) (*)(GMOCK_ARG_(, 1, F) cmock_a1, GMOCK_ARG_(, 2, \
311 F) cmock_a2, GMOCK_ARG_(, 3, F) cmock_a3, GMOCK_ARG_(, 4, F) cmock_a4, \
312 GMOCK_ARG_(, 5, F) cmock_a5, GMOCK_ARG_(, 6, F) cmock_a6, GMOCK_ARG_(, \
313 7, F) cmock_a7, GMOCK_ARG_(, 8, F) cmock_a8, GMOCK_ARG_(, 9, \
314 F) cmock_a9))cmock_lookup(#n); \
316 GMOCK_RESULT_(, F) n(GMOCK_ARG_(, 1, F) cmock_a1, GMOCK_ARG_(, 2, \
317 F) cmock_a2, GMOCK_ARG_(, 3, F) cmock_a3, GMOCK_ARG_(, 4, F) cmock_a4, \
318 GMOCK_ARG_(, 5, F) cmock_a5, GMOCK_ARG_(, 6, F) cmock_a6, GMOCK_ARG_(, 7, \
319 F) cmock_a7, GMOCK_ARG_(, 8, F) cmock_a8, GMOCK_ARG_(, 9, \
321 c *mock = c::cmock_get_instance(); \
322 if (mock != NULL) { \
323 return mock->n(cmock_a1, cmock_a2, cmock_a3, cmock_a4, cmock_a5, \
324 cmock_a6, cmock_a7, cmock_a8, cmock_a9); \
327 if (__cmock_real_##c##_##n == NULL) { \
328 std::ostringstream msg; \
329 msg << "Error: Function " << #n; \
330 msg << " not found. Neither mock nor real function is present."; \
331 throw std::logic_error(msg.str()); \
333 return __cmock_real_##c##_##n(cmock_a1, cmock_a2, cmock_a3, cmock_a4, \
334 cmock_a5, cmock_a6, cmock_a7, cmock_a8, cmock_a9); \
337 #define CMOCK_MOCK_FUNCTION10(c, n, F) \
338 static GMOCK_RESULT_(, F) (*__cmock_real_##c##_##n)(GMOCK_ARG_(, 1, \
339 F) cmock_a1, GMOCK_ARG_(, 2, F) cmock_a2, GMOCK_ARG_(, 3, F) cmock_a3, \
340 GMOCK_ARG_(, 4, F) cmock_a4, GMOCK_ARG_(, 5, F) cmock_a5, GMOCK_ARG_(, 6, \
341 F) cmock_a6, GMOCK_ARG_(, 7, F) cmock_a7, GMOCK_ARG_(, 8, F) cmock_a8, \
342 GMOCK_ARG_(, 9, F) cmock_a9, GMOCK_ARG_(, 10, F) cmock_a10) = \
343 (GMOCK_RESULT_(, F) (*)(GMOCK_ARG_(, 1, F) cmock_a1, GMOCK_ARG_(, 2, \
344 F) cmock_a2, GMOCK_ARG_(, 3, F) cmock_a3, GMOCK_ARG_(, 4, F) cmock_a4, \
345 GMOCK_ARG_(, 5, F) cmock_a5, GMOCK_ARG_(, 6, F) cmock_a6, GMOCK_ARG_(, \
346 7, F) cmock_a7, GMOCK_ARG_(, 8, F) cmock_a8, GMOCK_ARG_(, 9, \
347 F) cmock_a9, GMOCK_ARG_(, 10, F) cmock_a10))cmock_lookup(#n); \
349 GMOCK_RESULT_(, F) n(GMOCK_ARG_(, 1, F) cmock_a1, GMOCK_ARG_(, 2, \
350 F) cmock_a2, GMOCK_ARG_(, 3, F) cmock_a3, GMOCK_ARG_(, 4, F) cmock_a4, \
351 GMOCK_ARG_(, 5, F) cmock_a5, GMOCK_ARG_(, 6, F) cmock_a6, GMOCK_ARG_(, 7, \
352 F) cmock_a7, GMOCK_ARG_(, 8, F) cmock_a8, GMOCK_ARG_(, 9, F) cmock_a9, \
353 GMOCK_ARG_(, 10, F) cmock_a10) { \
354 c *mock = c::cmock_get_instance(); \
355 if (mock != NULL) { \
356 return mock->n(cmock_a1, cmock_a2, cmock_a3, cmock_a4, cmock_a5, \
357 cmock_a6, cmock_a7, cmock_a8, cmock_a9, cmock_a10); \
360 if (__cmock_real_##c##_##n == NULL) { \
361 std::ostringstream msg; \
362 msg << "Error: Function " << #n; \
363 msg << " not found. Neither mock nor real function is present."; \
364 throw std::logic_error(msg.str()); \
366 return __cmock_real_##c##_##n(cmock_a1, cmock_a2, cmock_a3, cmock_a4, \
367 cmock_a5, cmock_a6, cmock_a7, cmock_a8, cmock_a9, cmock_a10); \
370 #endif // CMOCK_INCLUDE_CMOCK_CMOCK_FUNCTION_CLASS_MOCKERS_H_