1 | // This file was GENERATED by command: |
2 | // pump.py gmock-generated-function-mockers.h.pump |
3 | // DO NOT EDIT BY HAND!!! |
4 | |
5 | // Copyright 2007, Google Inc. |
6 | // All rights reserved. |
7 | // |
8 | // Redistribution and use in source and binary forms, with or without |
9 | // modification, are permitted provided that the following conditions are |
10 | // met: |
11 | // |
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 |
17 | // distribution. |
18 | // * Neither the name of Google Inc. nor the names of its |
19 | // contributors may be used to endorse or promote products derived from |
20 | // this software without specific prior written permission. |
21 | // |
22 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
23 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
24 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
25 | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
26 | // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
27 | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
28 | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
29 | // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
30 | // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
31 | // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
32 | // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
33 | |
34 | |
35 | // Google Mock - a framework for writing C++ mock classes. |
36 | // |
37 | // This file implements function mockers of various arities. |
38 | |
39 | // GOOGLETEST_CM0002 DO NOT DELETE |
40 | |
41 | #ifndef GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_FUNCTION_MOCKERS_H_ |
42 | #define GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_FUNCTION_MOCKERS_H_ |
43 | |
44 | #include "gmock/gmock-spec-builders.h" |
45 | #include "gmock/internal/gmock-internal-utils.h" |
46 | |
47 | #if GTEST_HAS_STD_FUNCTION_ |
48 | # include <functional> |
49 | #endif |
50 | |
51 | namespace testing { |
52 | namespace internal { |
53 | |
54 | template <typename F> |
55 | class FunctionMockerBase; |
56 | |
57 | // Note: class FunctionMocker really belongs to the ::testing |
58 | // namespace. However if we define it in ::testing, MSVC will |
59 | // complain when classes in ::testing::internal declare it as a |
60 | // friend class template. To workaround this compiler bug, we define |
61 | // FunctionMocker in ::testing::internal and import it into ::testing. |
62 | template <typename F> |
63 | class FunctionMocker; |
64 | |
65 | template <typename R> |
66 | class FunctionMocker<R()> : public |
67 | internal::FunctionMockerBase<R()> { |
68 | public: |
69 | typedef R F(); |
70 | typedef typename internal::Function<F>::ArgumentTuple ArgumentTuple; |
71 | |
72 | MockSpec<F> With() { |
73 | return MockSpec<F>(this, ::testing::make_tuple()); |
74 | } |
75 | |
76 | R Invoke() { |
77 | // Even though gcc and MSVC don't enforce it, 'this->' is required |
78 | // by the C++ standard [14.6.4] here, as the base class type is |
79 | // dependent on the template argument (and thus shouldn't be |
80 | // looked into when resolving InvokeWith). |
81 | return this->InvokeWith(ArgumentTuple()); |
82 | } |
83 | }; |
84 | |
85 | template <typename R, typename A1> |
86 | class FunctionMocker<R(A1)> : public |
87 | internal::FunctionMockerBase<R(A1)> { |
88 | public: |
89 | typedef R F(A1); |
90 | typedef typename internal::Function<F>::ArgumentTuple ArgumentTuple; |
91 | |
92 | MockSpec<F> With(const Matcher<A1>& m1) { |
93 | return MockSpec<F>(this, ::testing::make_tuple(m1)); |
94 | } |
95 | |
96 | R Invoke(A1 a1) { |
97 | // Even though gcc and MSVC don't enforce it, 'this->' is required |
98 | // by the C++ standard [14.6.4] here, as the base class type is |
99 | // dependent on the template argument (and thus shouldn't be |
100 | // looked into when resolving InvokeWith). |
101 | return this->InvokeWith(ArgumentTuple(internal::forward<A1>(a1))); |
102 | } |
103 | }; |
104 | |
105 | template <typename R, typename A1, typename A2> |
106 | class FunctionMocker<R(A1, A2)> : public |
107 | internal::FunctionMockerBase<R(A1, A2)> { |
108 | public: |
109 | typedef R F(A1, A2); |
110 | typedef typename internal::Function<F>::ArgumentTuple ArgumentTuple; |
111 | |
112 | MockSpec<F> With(const Matcher<A1>& m1, const Matcher<A2>& m2) { |
113 | return MockSpec<F>(this, ::testing::make_tuple(m1, m2)); |
114 | } |
115 | |
116 | R Invoke(A1 a1, A2 a2) { |
117 | // Even though gcc and MSVC don't enforce it, 'this->' is required |
118 | // by the C++ standard [14.6.4] here, as the base class type is |
119 | // dependent on the template argument (and thus shouldn't be |
120 | // looked into when resolving InvokeWith). |
121 | return this->InvokeWith(ArgumentTuple(internal::forward<A1>(a1), |
122 | internal::forward<A2>(a2))); |
123 | } |
124 | }; |
125 | |
126 | template <typename R, typename A1, typename A2, typename A3> |
127 | class FunctionMocker<R(A1, A2, A3)> : public |
128 | internal::FunctionMockerBase<R(A1, A2, A3)> { |
129 | public: |
130 | typedef R F(A1, A2, A3); |
131 | typedef typename internal::Function<F>::ArgumentTuple ArgumentTuple; |
132 | |
133 | MockSpec<F> With(const Matcher<A1>& m1, const Matcher<A2>& m2, |
134 | const Matcher<A3>& m3) { |
135 | return MockSpec<F>(this, ::testing::make_tuple(m1, m2, m3)); |
136 | } |
137 | |
138 | R Invoke(A1 a1, A2 a2, A3 a3) { |
139 | // Even though gcc and MSVC don't enforce it, 'this->' is required |
140 | // by the C++ standard [14.6.4] here, as the base class type is |
141 | // dependent on the template argument (and thus shouldn't be |
142 | // looked into when resolving InvokeWith). |
143 | return this->InvokeWith(ArgumentTuple(internal::forward<A1>(a1), |
144 | internal::forward<A2>(a2), internal::forward<A3>(a3))); |
145 | } |
146 | }; |
147 | |
148 | template <typename R, typename A1, typename A2, typename A3, typename A4> |
149 | class FunctionMocker<R(A1, A2, A3, A4)> : public |
150 | internal::FunctionMockerBase<R(A1, A2, A3, A4)> { |
151 | public: |
152 | typedef R F(A1, A2, A3, A4); |
153 | typedef typename internal::Function<F>::ArgumentTuple ArgumentTuple; |
154 | |
155 | MockSpec<F> With(const Matcher<A1>& m1, const Matcher<A2>& m2, |
156 | const Matcher<A3>& m3, const Matcher<A4>& m4) { |
157 | return MockSpec<F>(this, ::testing::make_tuple(m1, m2, m3, m4)); |
158 | } |
159 | |
160 | R Invoke(A1 a1, A2 a2, A3 a3, A4 a4) { |
161 | // Even though gcc and MSVC don't enforce it, 'this->' is required |
162 | // by the C++ standard [14.6.4] here, as the base class type is |
163 | // dependent on the template argument (and thus shouldn't be |
164 | // looked into when resolving InvokeWith). |
165 | return this->InvokeWith(ArgumentTuple(internal::forward<A1>(a1), |
166 | internal::forward<A2>(a2), internal::forward<A3>(a3), |
167 | internal::forward<A4>(a4))); |
168 | } |
169 | }; |
170 | |
171 | template <typename R, typename A1, typename A2, typename A3, typename A4, |
172 | typename A5> |
173 | class FunctionMocker<R(A1, A2, A3, A4, A5)> : public |
174 | internal::FunctionMockerBase<R(A1, A2, A3, A4, A5)> { |
175 | public: |
176 | typedef R F(A1, A2, A3, A4, A5); |
177 | typedef typename internal::Function<F>::ArgumentTuple ArgumentTuple; |
178 | |
179 | MockSpec<F> With(const Matcher<A1>& m1, const Matcher<A2>& m2, |
180 | const Matcher<A3>& m3, const Matcher<A4>& m4, const Matcher<A5>& m5) { |
181 | return MockSpec<F>(this, ::testing::make_tuple(m1, m2, m3, m4, m5)); |
182 | } |
183 | |
184 | R Invoke(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) { |
185 | // Even though gcc and MSVC don't enforce it, 'this->' is required |
186 | // by the C++ standard [14.6.4] here, as the base class type is |
187 | // dependent on the template argument (and thus shouldn't be |
188 | // looked into when resolving InvokeWith). |
189 | return this->InvokeWith(ArgumentTuple(internal::forward<A1>(a1), |
190 | internal::forward<A2>(a2), internal::forward<A3>(a3), |
191 | internal::forward<A4>(a4), internal::forward<A5>(a5))); |
192 | } |
193 | }; |
194 | |
195 | template <typename R, typename A1, typename A2, typename A3, typename A4, |
196 | typename A5, typename A6> |
197 | class FunctionMocker<R(A1, A2, A3, A4, A5, A6)> : public |
198 | internal::FunctionMockerBase<R(A1, A2, A3, A4, A5, A6)> { |
199 | public: |
200 | typedef R F(A1, A2, A3, A4, A5, A6); |
201 | typedef typename internal::Function<F>::ArgumentTuple ArgumentTuple; |
202 | |
203 | MockSpec<F> With(const Matcher<A1>& m1, const Matcher<A2>& m2, |
204 | const Matcher<A3>& m3, const Matcher<A4>& m4, const Matcher<A5>& m5, |
205 | const Matcher<A6>& m6) { |
206 | return MockSpec<F>(this, ::testing::make_tuple(m1, m2, m3, m4, m5, m6)); |
207 | } |
208 | |
209 | R Invoke(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) { |
210 | // Even though gcc and MSVC don't enforce it, 'this->' is required |
211 | // by the C++ standard [14.6.4] here, as the base class type is |
212 | // dependent on the template argument (and thus shouldn't be |
213 | // looked into when resolving InvokeWith). |
214 | return this->InvokeWith(ArgumentTuple(internal::forward<A1>(a1), |
215 | internal::forward<A2>(a2), internal::forward<A3>(a3), |
216 | internal::forward<A4>(a4), internal::forward<A5>(a5), |
217 | internal::forward<A6>(a6))); |
218 | } |
219 | }; |
220 | |
221 | template <typename R, typename A1, typename A2, typename A3, typename A4, |
222 | typename A5, typename A6, typename A7> |
223 | class FunctionMocker<R(A1, A2, A3, A4, A5, A6, A7)> : public |
224 | internal::FunctionMockerBase<R(A1, A2, A3, A4, A5, A6, A7)> { |
225 | public: |
226 | typedef R F(A1, A2, A3, A4, A5, A6, A7); |
227 | typedef typename internal::Function<F>::ArgumentTuple ArgumentTuple; |
228 | |
229 | MockSpec<F> With(const Matcher<A1>& m1, const Matcher<A2>& m2, |
230 | const Matcher<A3>& m3, const Matcher<A4>& m4, const Matcher<A5>& m5, |
231 | const Matcher<A6>& m6, const Matcher<A7>& m7) { |
232 | return MockSpec<F>(this, ::testing::make_tuple(m1, m2, m3, m4, m5, m6, m7)); |
233 | } |
234 | |
235 | R Invoke(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) { |
236 | // Even though gcc and MSVC don't enforce it, 'this->' is required |
237 | // by the C++ standard [14.6.4] here, as the base class type is |
238 | // dependent on the template argument (and thus shouldn't be |
239 | // looked into when resolving InvokeWith). |
240 | return this->InvokeWith(ArgumentTuple(internal::forward<A1>(a1), |
241 | internal::forward<A2>(a2), internal::forward<A3>(a3), |
242 | internal::forward<A4>(a4), internal::forward<A5>(a5), |
243 | internal::forward<A6>(a6), internal::forward<A7>(a7))); |
244 | } |
245 | }; |
246 | |
247 | template <typename R, typename A1, typename A2, typename A3, typename A4, |
248 | typename A5, typename A6, typename A7, typename A8> |
249 | class FunctionMocker<R(A1, A2, A3, A4, A5, A6, A7, A8)> : public |
250 | internal::FunctionMockerBase<R(A1, A2, A3, A4, A5, A6, A7, A8)> { |
251 | public: |
252 | typedef R F(A1, A2, A3, A4, A5, A6, A7, A8); |
253 | typedef typename internal::Function<F>::ArgumentTuple ArgumentTuple; |
254 | |
255 | MockSpec<F> With(const Matcher<A1>& m1, const Matcher<A2>& m2, |
256 | const Matcher<A3>& m3, const Matcher<A4>& m4, const Matcher<A5>& m5, |
257 | const Matcher<A6>& m6, const Matcher<A7>& m7, const Matcher<A8>& m8) { |
258 | return MockSpec<F>(this, ::testing::make_tuple(m1, m2, m3, m4, m5, m6, m7, |
259 | m8)); |
260 | } |
261 | |
262 | R Invoke(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) { |
263 | // Even though gcc and MSVC don't enforce it, 'this->' is required |
264 | // by the C++ standard [14.6.4] here, as the base class type is |
265 | // dependent on the template argument (and thus shouldn't be |
266 | // looked into when resolving InvokeWith). |
267 | return this->InvokeWith(ArgumentTuple(internal::forward<A1>(a1), |
268 | internal::forward<A2>(a2), internal::forward<A3>(a3), |
269 | internal::forward<A4>(a4), internal::forward<A5>(a5), |
270 | internal::forward<A6>(a6), internal::forward<A7>(a7), |
271 | internal::forward<A8>(a8))); |
272 | } |
273 | }; |
274 | |
275 | template <typename R, typename A1, typename A2, typename A3, typename A4, |
276 | typename A5, typename A6, typename A7, typename A8, typename A9> |
277 | class FunctionMocker<R(A1, A2, A3, A4, A5, A6, A7, A8, A9)> : public |
278 | internal::FunctionMockerBase<R(A1, A2, A3, A4, A5, A6, A7, A8, A9)> { |
279 | public: |
280 | typedef R F(A1, A2, A3, A4, A5, A6, A7, A8, A9); |
281 | typedef typename internal::Function<F>::ArgumentTuple ArgumentTuple; |
282 | |
283 | MockSpec<F> With(const Matcher<A1>& m1, const Matcher<A2>& m2, |
284 | const Matcher<A3>& m3, const Matcher<A4>& m4, const Matcher<A5>& m5, |
285 | const Matcher<A6>& m6, const Matcher<A7>& m7, const Matcher<A8>& m8, |
286 | const Matcher<A9>& m9) { |
287 | return MockSpec<F>(this, ::testing::make_tuple(m1, m2, m3, m4, m5, m6, m7, |
288 | m8, m9)); |
289 | } |
290 | |
291 | R Invoke(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) { |
292 | // Even though gcc and MSVC don't enforce it, 'this->' is required |
293 | // by the C++ standard [14.6.4] here, as the base class type is |
294 | // dependent on the template argument (and thus shouldn't be |
295 | // looked into when resolving InvokeWith). |
296 | return this->InvokeWith(ArgumentTuple(internal::forward<A1>(a1), |
297 | internal::forward<A2>(a2), internal::forward<A3>(a3), |
298 | internal::forward<A4>(a4), internal::forward<A5>(a5), |
299 | internal::forward<A6>(a6), internal::forward<A7>(a7), |
300 | internal::forward<A8>(a8), internal::forward<A9>(a9))); |
301 | } |
302 | }; |
303 | |
304 | template <typename R, typename A1, typename A2, typename A3, typename A4, |
305 | typename A5, typename A6, typename A7, typename A8, typename A9, |
306 | typename A10> |
307 | class FunctionMocker<R(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)> : public |
308 | internal::FunctionMockerBase<R(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)> { |
309 | public: |
310 | typedef R F(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10); |
311 | typedef typename internal::Function<F>::ArgumentTuple ArgumentTuple; |
312 | |
313 | MockSpec<F> With(const Matcher<A1>& m1, const Matcher<A2>& m2, |
314 | const Matcher<A3>& m3, const Matcher<A4>& m4, const Matcher<A5>& m5, |
315 | const Matcher<A6>& m6, const Matcher<A7>& m7, const Matcher<A8>& m8, |
316 | const Matcher<A9>& m9, const Matcher<A10>& m10) { |
317 | return MockSpec<F>(this, ::testing::make_tuple(m1, m2, m3, m4, m5, m6, m7, |
318 | m8, m9, m10)); |
319 | } |
320 | |
321 | R Invoke(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, |
322 | A10 a10) { |
323 | // Even though gcc and MSVC don't enforce it, 'this->' is required |
324 | // by the C++ standard [14.6.4] here, as the base class type is |
325 | // dependent on the template argument (and thus shouldn't be |
326 | // looked into when resolving InvokeWith). |
327 | return this->InvokeWith(ArgumentTuple(internal::forward<A1>(a1), |
328 | internal::forward<A2>(a2), internal::forward<A3>(a3), |
329 | internal::forward<A4>(a4), internal::forward<A5>(a5), |
330 | internal::forward<A6>(a6), internal::forward<A7>(a7), |
331 | internal::forward<A8>(a8), internal::forward<A9>(a9), |
332 | internal::forward<A10>(a10))); |
333 | } |
334 | }; |
335 | |
336 | // Removes the given pointer; this is a helper for the expectation setter method |
337 | // for parameterless matchers. |
338 | // |
339 | // We want to make sure that the user cannot set a parameterless expectation on |
340 | // overloaded methods, including methods which are overloaded on const. Example: |
341 | // |
342 | // class MockClass { |
343 | // MOCK_METHOD0(GetName, string&()); |
344 | // MOCK_CONST_METHOD0(GetName, const string&()); |
345 | // }; |
346 | // |
347 | // TEST() { |
348 | // // This should be an error, as it's not clear which overload is expected. |
349 | // EXPECT_CALL(mock, GetName).WillOnce(ReturnRef(value)); |
350 | // } |
351 | // |
352 | // Here are the generated expectation-setter methods: |
353 | // |
354 | // class MockClass { |
355 | // // Overload 1 |
356 | // MockSpec<string&()> gmock_GetName() { ... } |
357 | // // Overload 2. Declared const so that the compiler will generate an |
358 | // // error when trying to resolve between this and overload 4 in |
359 | // // 'gmock_GetName(WithoutMatchers(), nullptr)'. |
360 | // MockSpec<string&()> gmock_GetName( |
361 | // const WithoutMatchers&, const Function<string&()>*) const { |
362 | // // Removes const from this, calls overload 1 |
363 | // return AdjustConstness_(this)->gmock_GetName(); |
364 | // } |
365 | // |
366 | // // Overload 3 |
367 | // const string& gmock_GetName() const { ... } |
368 | // // Overload 4 |
369 | // MockSpec<const string&()> gmock_GetName( |
370 | // const WithoutMatchers&, const Function<const string&()>*) const { |
371 | // // Does not remove const, calls overload 3 |
372 | // return AdjustConstness_const(this)->gmock_GetName(); |
373 | // } |
374 | // } |
375 | // |
376 | template <typename MockType> |
377 | const MockType* AdjustConstness_const(const MockType* mock) { |
378 | return mock; |
379 | } |
380 | |
381 | // Removes const from and returns the given pointer; this is a helper for the |
382 | // expectation setter method for parameterless matchers. |
383 | template <typename MockType> |
384 | MockType* AdjustConstness_(const MockType* mock) { |
385 | return const_cast<MockType*>(mock); |
386 | } |
387 | |
388 | } // namespace internal |
389 | |
390 | // The style guide prohibits "using" statements in a namespace scope |
391 | // inside a header file. However, the FunctionMocker class template |
392 | // is meant to be defined in the ::testing namespace. The following |
393 | // line is just a trick for working around a bug in MSVC 8.0, which |
394 | // cannot handle it if we define FunctionMocker in ::testing. |
395 | using internal::FunctionMocker; |
396 | |
397 | // GMOCK_RESULT_(tn, F) expands to the result type of function type F. |
398 | // We define this as a variadic macro in case F contains unprotected |
399 | // commas (the same reason that we use variadic macros in other places |
400 | // in this file). |
401 | // INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! |
402 | #define GMOCK_RESULT_(tn, ...) \ |
403 | tn ::testing::internal::Function<__VA_ARGS__>::Result |
404 | |
405 | // The type of argument N of the given function type. |
406 | // INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! |
407 | #define GMOCK_ARG_(tn, N, ...) \ |
408 | tn ::testing::internal::Function<__VA_ARGS__>::Argument##N |
409 | |
410 | // The matcher type for argument N of the given function type. |
411 | // INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! |
412 | #define GMOCK_MATCHER_(tn, N, ...) \ |
413 | const ::testing::Matcher<GMOCK_ARG_(tn, N, __VA_ARGS__)>& |
414 | |
415 | // The variable for mocking the given method. |
416 | // INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! |
417 | #define GMOCK_MOCKER_(arity, constness, Method) \ |
418 | GTEST_CONCAT_TOKEN_(gmock##constness##arity##_##Method##_, __LINE__) |
419 | |
420 | // INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! |
421 | #define GMOCK_METHOD0_(tn, constness, ct, Method, ...) \ |
422 | GMOCK_RESULT_(tn, __VA_ARGS__) ct Method() constness { \ |
423 | GTEST_COMPILE_ASSERT_( \ |
424 | (::testing::tuple_size<tn ::testing::internal::Function< \ |
425 | __VA_ARGS__>::ArgumentTuple>::value == 0), \ |
426 | this_method_does_not_take_0_arguments); \ |
427 | GMOCK_MOCKER_(0, constness, Method).SetOwnerAndName(this, #Method); \ |
428 | return GMOCK_MOCKER_(0, constness, Method).Invoke(); \ |
429 | } \ |
430 | ::testing::MockSpec<__VA_ARGS__> gmock_##Method() constness { \ |
431 | GMOCK_MOCKER_(0, constness, Method).RegisterOwner(this); \ |
432 | return GMOCK_MOCKER_(0, constness, Method).With(); \ |
433 | } \ |
434 | ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ |
435 | const ::testing::internal::WithoutMatchers&, \ |
436 | constness ::testing::internal::Function<__VA_ARGS__>*) const { \ |
437 | return ::testing::internal::AdjustConstness_##constness(this) \ |
438 | ->gmock_##Method(); \ |
439 | } \ |
440 | mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_(0, constness, \ |
441 | Method) |
442 | |
443 | // INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! |
444 | #define GMOCK_METHOD1_(tn, constness, ct, Method, ...) \ |
445 | GMOCK_RESULT_(tn, __VA_ARGS__) \ |
446 | ct Method(GMOCK_ARG_(tn, 1, __VA_ARGS__) gmock_a1) constness { \ |
447 | GTEST_COMPILE_ASSERT_( \ |
448 | (::testing::tuple_size<tn ::testing::internal::Function< \ |
449 | __VA_ARGS__>::ArgumentTuple>::value == 1), \ |
450 | this_method_does_not_take_1_argument); \ |
451 | GMOCK_MOCKER_(1, constness, Method).SetOwnerAndName(this, #Method); \ |
452 | return GMOCK_MOCKER_(1, constness, Method) \ |
453 | .Invoke(::testing::internal::forward<GMOCK_ARG_(tn, 1, __VA_ARGS__)>( \ |
454 | gmock_a1)); \ |
455 | } \ |
456 | ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ |
457 | GMOCK_MATCHER_(tn, 1, __VA_ARGS__) gmock_a1) constness { \ |
458 | GMOCK_MOCKER_(1, constness, Method).RegisterOwner(this); \ |
459 | return GMOCK_MOCKER_(1, constness, Method).With(gmock_a1); \ |
460 | } \ |
461 | ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ |
462 | const ::testing::internal::WithoutMatchers&, \ |
463 | constness ::testing::internal::Function<__VA_ARGS__>*) const { \ |
464 | return ::testing::internal::AdjustConstness_##constness(this) \ |
465 | ->gmock_##Method(::testing::A<GMOCK_ARG_(tn, 1, __VA_ARGS__)>()); \ |
466 | } \ |
467 | mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_(1, constness, \ |
468 | Method) |
469 | |
470 | // INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! |
471 | #define GMOCK_METHOD2_(tn, constness, ct, Method, ...) \ |
472 | GMOCK_RESULT_(tn, __VA_ARGS__) \ |
473 | ct Method(GMOCK_ARG_(tn, 1, __VA_ARGS__) gmock_a1, \ |
474 | GMOCK_ARG_(tn, 2, __VA_ARGS__) gmock_a2) constness { \ |
475 | GTEST_COMPILE_ASSERT_( \ |
476 | (::testing::tuple_size<tn ::testing::internal::Function< \ |
477 | __VA_ARGS__>::ArgumentTuple>::value == 2), \ |
478 | this_method_does_not_take_2_arguments); \ |
479 | GMOCK_MOCKER_(2, constness, Method).SetOwnerAndName(this, #Method); \ |
480 | return GMOCK_MOCKER_(2, constness, Method) \ |
481 | .Invoke(::testing::internal::forward<GMOCK_ARG_(tn, 1, __VA_ARGS__)>( \ |
482 | gmock_a1), \ |
483 | ::testing::internal::forward<GMOCK_ARG_(tn, 2, __VA_ARGS__)>( \ |
484 | gmock_a2)); \ |
485 | } \ |
486 | ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ |
487 | GMOCK_MATCHER_(tn, 1, __VA_ARGS__) gmock_a1, \ |
488 | GMOCK_MATCHER_(tn, 2, __VA_ARGS__) gmock_a2) constness { \ |
489 | GMOCK_MOCKER_(2, constness, Method).RegisterOwner(this); \ |
490 | return GMOCK_MOCKER_(2, constness, Method).With(gmock_a1, gmock_a2); \ |
491 | } \ |
492 | ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ |
493 | const ::testing::internal::WithoutMatchers&, \ |
494 | constness ::testing::internal::Function<__VA_ARGS__>*) const { \ |
495 | return ::testing::internal::AdjustConstness_##constness(this) \ |
496 | ->gmock_##Method(::testing::A<GMOCK_ARG_(tn, 1, __VA_ARGS__)>(), \ |
497 | ::testing::A<GMOCK_ARG_(tn, 2, __VA_ARGS__)>()); \ |
498 | } \ |
499 | mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_(2, constness, \ |
500 | Method) |
501 | |
502 | // INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! |
503 | #define GMOCK_METHOD3_(tn, constness, ct, Method, ...) \ |
504 | GMOCK_RESULT_(tn, __VA_ARGS__) \ |
505 | ct Method(GMOCK_ARG_(tn, 1, __VA_ARGS__) gmock_a1, \ |
506 | GMOCK_ARG_(tn, 2, __VA_ARGS__) gmock_a2, \ |
507 | GMOCK_ARG_(tn, 3, __VA_ARGS__) gmock_a3) constness { \ |
508 | GTEST_COMPILE_ASSERT_( \ |
509 | (::testing::tuple_size<tn ::testing::internal::Function< \ |
510 | __VA_ARGS__>::ArgumentTuple>::value == 3), \ |
511 | this_method_does_not_take_3_arguments); \ |
512 | GMOCK_MOCKER_(3, constness, Method).SetOwnerAndName(this, #Method); \ |
513 | return GMOCK_MOCKER_(3, constness, Method) \ |
514 | .Invoke(::testing::internal::forward<GMOCK_ARG_(tn, 1, __VA_ARGS__)>( \ |
515 | gmock_a1), \ |
516 | ::testing::internal::forward<GMOCK_ARG_(tn, 2, __VA_ARGS__)>( \ |
517 | gmock_a2), \ |
518 | ::testing::internal::forward<GMOCK_ARG_(tn, 3, __VA_ARGS__)>( \ |
519 | gmock_a3)); \ |
520 | } \ |
521 | ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ |
522 | GMOCK_MATCHER_(tn, 1, __VA_ARGS__) gmock_a1, \ |
523 | GMOCK_MATCHER_(tn, 2, __VA_ARGS__) gmock_a2, \ |
524 | GMOCK_MATCHER_(tn, 3, __VA_ARGS__) gmock_a3) constness { \ |
525 | GMOCK_MOCKER_(3, constness, Method).RegisterOwner(this); \ |
526 | return GMOCK_MOCKER_(3, constness, Method) \ |
527 | .With(gmock_a1, gmock_a2, gmock_a3); \ |
528 | } \ |
529 | ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ |
530 | const ::testing::internal::WithoutMatchers&, \ |
531 | constness ::testing::internal::Function<__VA_ARGS__>*) const { \ |
532 | return ::testing::internal::AdjustConstness_##constness(this) \ |
533 | ->gmock_##Method(::testing::A<GMOCK_ARG_(tn, 1, __VA_ARGS__)>(), \ |
534 | ::testing::A<GMOCK_ARG_(tn, 2, __VA_ARGS__)>(), \ |
535 | ::testing::A<GMOCK_ARG_(tn, 3, __VA_ARGS__)>()); \ |
536 | } \ |
537 | mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_(3, constness, \ |
538 | Method) |
539 | |
540 | // INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! |
541 | #define GMOCK_METHOD4_(tn, constness, ct, Method, ...) \ |
542 | GMOCK_RESULT_(tn, __VA_ARGS__) \ |
543 | ct Method(GMOCK_ARG_(tn, 1, __VA_ARGS__) gmock_a1, \ |
544 | GMOCK_ARG_(tn, 2, __VA_ARGS__) gmock_a2, \ |
545 | GMOCK_ARG_(tn, 3, __VA_ARGS__) gmock_a3, \ |
546 | GMOCK_ARG_(tn, 4, __VA_ARGS__) gmock_a4) constness { \ |
547 | GTEST_COMPILE_ASSERT_( \ |
548 | (::testing::tuple_size<tn ::testing::internal::Function< \ |
549 | __VA_ARGS__>::ArgumentTuple>::value == 4), \ |
550 | this_method_does_not_take_4_arguments); \ |
551 | GMOCK_MOCKER_(4, constness, Method).SetOwnerAndName(this, #Method); \ |
552 | return GMOCK_MOCKER_(4, constness, Method) \ |
553 | .Invoke(::testing::internal::forward<GMOCK_ARG_(tn, 1, __VA_ARGS__)>( \ |
554 | gmock_a1), \ |
555 | ::testing::internal::forward<GMOCK_ARG_(tn, 2, __VA_ARGS__)>( \ |
556 | gmock_a2), \ |
557 | ::testing::internal::forward<GMOCK_ARG_(tn, 3, __VA_ARGS__)>( \ |
558 | gmock_a3), \ |
559 | ::testing::internal::forward<GMOCK_ARG_(tn, 4, __VA_ARGS__)>( \ |
560 | gmock_a4)); \ |
561 | } \ |
562 | ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ |
563 | GMOCK_MATCHER_(tn, 1, __VA_ARGS__) gmock_a1, \ |
564 | GMOCK_MATCHER_(tn, 2, __VA_ARGS__) gmock_a2, \ |
565 | GMOCK_MATCHER_(tn, 3, __VA_ARGS__) gmock_a3, \ |
566 | GMOCK_MATCHER_(tn, 4, __VA_ARGS__) gmock_a4) constness { \ |
567 | GMOCK_MOCKER_(4, constness, Method).RegisterOwner(this); \ |
568 | return GMOCK_MOCKER_(4, constness, Method) \ |
569 | .With(gmock_a1, gmock_a2, gmock_a3, gmock_a4); \ |
570 | } \ |
571 | ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ |
572 | const ::testing::internal::WithoutMatchers&, \ |
573 | constness ::testing::internal::Function<__VA_ARGS__>*) const { \ |
574 | return ::testing::internal::AdjustConstness_##constness(this) \ |
575 | ->gmock_##Method(::testing::A<GMOCK_ARG_(tn, 1, __VA_ARGS__)>(), \ |
576 | ::testing::A<GMOCK_ARG_(tn, 2, __VA_ARGS__)>(), \ |
577 | ::testing::A<GMOCK_ARG_(tn, 3, __VA_ARGS__)>(), \ |
578 | ::testing::A<GMOCK_ARG_(tn, 4, __VA_ARGS__)>()); \ |
579 | } \ |
580 | mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_(4, constness, \ |
581 | Method) |
582 | |
583 | // INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! |
584 | #define GMOCK_METHOD5_(tn, constness, ct, Method, ...) \ |
585 | GMOCK_RESULT_(tn, __VA_ARGS__) \ |
586 | ct Method(GMOCK_ARG_(tn, 1, __VA_ARGS__) gmock_a1, \ |
587 | GMOCK_ARG_(tn, 2, __VA_ARGS__) gmock_a2, \ |
588 | GMOCK_ARG_(tn, 3, __VA_ARGS__) gmock_a3, \ |
589 | GMOCK_ARG_(tn, 4, __VA_ARGS__) gmock_a4, \ |
590 | GMOCK_ARG_(tn, 5, __VA_ARGS__) gmock_a5) constness { \ |
591 | GTEST_COMPILE_ASSERT_( \ |
592 | (::testing::tuple_size<tn ::testing::internal::Function< \ |
593 | __VA_ARGS__>::ArgumentTuple>::value == 5), \ |
594 | this_method_does_not_take_5_arguments); \ |
595 | GMOCK_MOCKER_(5, constness, Method).SetOwnerAndName(this, #Method); \ |
596 | return GMOCK_MOCKER_(5, constness, Method) \ |
597 | .Invoke(::testing::internal::forward<GMOCK_ARG_(tn, 1, __VA_ARGS__)>( \ |
598 | gmock_a1), \ |
599 | ::testing::internal::forward<GMOCK_ARG_(tn, 2, __VA_ARGS__)>( \ |
600 | gmock_a2), \ |
601 | ::testing::internal::forward<GMOCK_ARG_(tn, 3, __VA_ARGS__)>( \ |
602 | gmock_a3), \ |
603 | ::testing::internal::forward<GMOCK_ARG_(tn, 4, __VA_ARGS__)>( \ |
604 | gmock_a4), \ |
605 | ::testing::internal::forward<GMOCK_ARG_(tn, 5, __VA_ARGS__)>( \ |
606 | gmock_a5)); \ |
607 | } \ |
608 | ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ |
609 | GMOCK_MATCHER_(tn, 1, __VA_ARGS__) gmock_a1, \ |
610 | GMOCK_MATCHER_(tn, 2, __VA_ARGS__) gmock_a2, \ |
611 | GMOCK_MATCHER_(tn, 3, __VA_ARGS__) gmock_a3, \ |
612 | GMOCK_MATCHER_(tn, 4, __VA_ARGS__) gmock_a4, \ |
613 | GMOCK_MATCHER_(tn, 5, __VA_ARGS__) gmock_a5) constness { \ |
614 | GMOCK_MOCKER_(5, constness, Method).RegisterOwner(this); \ |
615 | return GMOCK_MOCKER_(5, constness, Method) \ |
616 | .With(gmock_a1, gmock_a2, gmock_a3, gmock_a4, gmock_a5); \ |
617 | } \ |
618 | ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ |
619 | const ::testing::internal::WithoutMatchers&, \ |
620 | constness ::testing::internal::Function<__VA_ARGS__>*) const { \ |
621 | return ::testing::internal::AdjustConstness_##constness(this) \ |
622 | ->gmock_##Method(::testing::A<GMOCK_ARG_(tn, 1, __VA_ARGS__)>(), \ |
623 | ::testing::A<GMOCK_ARG_(tn, 2, __VA_ARGS__)>(), \ |
624 | ::testing::A<GMOCK_ARG_(tn, 3, __VA_ARGS__)>(), \ |
625 | ::testing::A<GMOCK_ARG_(tn, 4, __VA_ARGS__)>(), \ |
626 | ::testing::A<GMOCK_ARG_(tn, 5, __VA_ARGS__)>()); \ |
627 | } \ |
628 | mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_(5, constness, \ |
629 | Method) |
630 | |
631 | // INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! |
632 | #define GMOCK_METHOD6_(tn, constness, ct, Method, ...) \ |
633 | GMOCK_RESULT_(tn, __VA_ARGS__) \ |
634 | ct Method(GMOCK_ARG_(tn, 1, __VA_ARGS__) gmock_a1, \ |
635 | GMOCK_ARG_(tn, 2, __VA_ARGS__) gmock_a2, \ |
636 | GMOCK_ARG_(tn, 3, __VA_ARGS__) gmock_a3, \ |
637 | GMOCK_ARG_(tn, 4, __VA_ARGS__) gmock_a4, \ |
638 | GMOCK_ARG_(tn, 5, __VA_ARGS__) gmock_a5, \ |
639 | GMOCK_ARG_(tn, 6, __VA_ARGS__) gmock_a6) constness { \ |
640 | GTEST_COMPILE_ASSERT_( \ |
641 | (::testing::tuple_size<tn ::testing::internal::Function< \ |
642 | __VA_ARGS__>::ArgumentTuple>::value == 6), \ |
643 | this_method_does_not_take_6_arguments); \ |
644 | GMOCK_MOCKER_(6, constness, Method).SetOwnerAndName(this, #Method); \ |
645 | return GMOCK_MOCKER_(6, constness, Method) \ |
646 | .Invoke(::testing::internal::forward<GMOCK_ARG_(tn, 1, __VA_ARGS__)>( \ |
647 | gmock_a1), \ |
648 | ::testing::internal::forward<GMOCK_ARG_(tn, 2, __VA_ARGS__)>( \ |
649 | gmock_a2), \ |
650 | ::testing::internal::forward<GMOCK_ARG_(tn, 3, __VA_ARGS__)>( \ |
651 | gmock_a3), \ |
652 | ::testing::internal::forward<GMOCK_ARG_(tn, 4, __VA_ARGS__)>( \ |
653 | gmock_a4), \ |
654 | ::testing::internal::forward<GMOCK_ARG_(tn, 5, __VA_ARGS__)>( \ |
655 | gmock_a5), \ |
656 | ::testing::internal::forward<GMOCK_ARG_(tn, 6, __VA_ARGS__)>( \ |
657 | gmock_a6)); \ |
658 | } \ |
659 | ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ |
660 | GMOCK_MATCHER_(tn, 1, __VA_ARGS__) gmock_a1, \ |
661 | GMOCK_MATCHER_(tn, 2, __VA_ARGS__) gmock_a2, \ |
662 | GMOCK_MATCHER_(tn, 3, __VA_ARGS__) gmock_a3, \ |
663 | GMOCK_MATCHER_(tn, 4, __VA_ARGS__) gmock_a4, \ |
664 | GMOCK_MATCHER_(tn, 5, __VA_ARGS__) gmock_a5, \ |
665 | GMOCK_MATCHER_(tn, 6, __VA_ARGS__) gmock_a6) constness { \ |
666 | GMOCK_MOCKER_(6, constness, Method).RegisterOwner(this); \ |
667 | return GMOCK_MOCKER_(6, constness, Method) \ |
668 | .With(gmock_a1, gmock_a2, gmock_a3, gmock_a4, gmock_a5, gmock_a6); \ |
669 | } \ |
670 | ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ |
671 | const ::testing::internal::WithoutMatchers&, \ |
672 | constness ::testing::internal::Function<__VA_ARGS__>*) const { \ |
673 | return ::testing::internal::AdjustConstness_##constness(this) \ |
674 | ->gmock_##Method(::testing::A<GMOCK_ARG_(tn, 1, __VA_ARGS__)>(), \ |
675 | ::testing::A<GMOCK_ARG_(tn, 2, __VA_ARGS__)>(), \ |
676 | ::testing::A<GMOCK_ARG_(tn, 3, __VA_ARGS__)>(), \ |
677 | ::testing::A<GMOCK_ARG_(tn, 4, __VA_ARGS__)>(), \ |
678 | ::testing::A<GMOCK_ARG_(tn, 5, __VA_ARGS__)>(), \ |
679 | ::testing::A<GMOCK_ARG_(tn, 6, __VA_ARGS__)>()); \ |
680 | } \ |
681 | mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_(6, constness, \ |
682 | Method) |
683 | |
684 | // INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! |
685 | #define GMOCK_METHOD7_(tn, constness, ct, Method, ...) \ |
686 | GMOCK_RESULT_(tn, __VA_ARGS__) \ |
687 | ct Method(GMOCK_ARG_(tn, 1, __VA_ARGS__) gmock_a1, \ |
688 | GMOCK_ARG_(tn, 2, __VA_ARGS__) gmock_a2, \ |
689 | GMOCK_ARG_(tn, 3, __VA_ARGS__) gmock_a3, \ |
690 | GMOCK_ARG_(tn, 4, __VA_ARGS__) gmock_a4, \ |
691 | GMOCK_ARG_(tn, 5, __VA_ARGS__) gmock_a5, \ |
692 | GMOCK_ARG_(tn, 6, __VA_ARGS__) gmock_a6, \ |
693 | GMOCK_ARG_(tn, 7, __VA_ARGS__) gmock_a7) constness { \ |
694 | GTEST_COMPILE_ASSERT_( \ |
695 | (::testing::tuple_size<tn ::testing::internal::Function< \ |
696 | __VA_ARGS__>::ArgumentTuple>::value == 7), \ |
697 | this_method_does_not_take_7_arguments); \ |
698 | GMOCK_MOCKER_(7, constness, Method).SetOwnerAndName(this, #Method); \ |
699 | return GMOCK_MOCKER_(7, constness, Method) \ |
700 | .Invoke(::testing::internal::forward<GMOCK_ARG_(tn, 1, __VA_ARGS__)>( \ |
701 | gmock_a1), \ |
702 | ::testing::internal::forward<GMOCK_ARG_(tn, 2, __VA_ARGS__)>( \ |
703 | gmock_a2), \ |
704 | ::testing::internal::forward<GMOCK_ARG_(tn, 3, __VA_ARGS__)>( \ |
705 | gmock_a3), \ |
706 | ::testing::internal::forward<GMOCK_ARG_(tn, 4, __VA_ARGS__)>( \ |
707 | gmock_a4), \ |
708 | ::testing::internal::forward<GMOCK_ARG_(tn, 5, __VA_ARGS__)>( \ |
709 | gmock_a5), \ |
710 | ::testing::internal::forward<GMOCK_ARG_(tn, 6, __VA_ARGS__)>( \ |
711 | gmock_a6), \ |
712 | ::testing::internal::forward<GMOCK_ARG_(tn, 7, __VA_ARGS__)>( \ |
713 | gmock_a7)); \ |
714 | } \ |
715 | ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ |
716 | GMOCK_MATCHER_(tn, 1, __VA_ARGS__) gmock_a1, \ |
717 | GMOCK_MATCHER_(tn, 2, __VA_ARGS__) gmock_a2, \ |
718 | GMOCK_MATCHER_(tn, 3, __VA_ARGS__) gmock_a3, \ |
719 | GMOCK_MATCHER_(tn, 4, __VA_ARGS__) gmock_a4, \ |
720 | GMOCK_MATCHER_(tn, 5, __VA_ARGS__) gmock_a5, \ |
721 | GMOCK_MATCHER_(tn, 6, __VA_ARGS__) gmock_a6, \ |
722 | GMOCK_MATCHER_(tn, 7, __VA_ARGS__) gmock_a7) constness { \ |
723 | GMOCK_MOCKER_(7, constness, Method).RegisterOwner(this); \ |
724 | return GMOCK_MOCKER_(7, constness, Method) \ |
725 | .With(gmock_a1, gmock_a2, gmock_a3, gmock_a4, gmock_a5, gmock_a6, \ |
726 | gmock_a7); \ |
727 | } \ |
728 | ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ |
729 | const ::testing::internal::WithoutMatchers&, \ |
730 | constness ::testing::internal::Function<__VA_ARGS__>*) const { \ |
731 | return ::testing::internal::AdjustConstness_##constness(this) \ |
732 | ->gmock_##Method(::testing::A<GMOCK_ARG_(tn, 1, __VA_ARGS__)>(), \ |
733 | ::testing::A<GMOCK_ARG_(tn, 2, __VA_ARGS__)>(), \ |
734 | ::testing::A<GMOCK_ARG_(tn, 3, __VA_ARGS__)>(), \ |
735 | ::testing::A<GMOCK_ARG_(tn, 4, __VA_ARGS__)>(), \ |
736 | ::testing::A<GMOCK_ARG_(tn, 5, __VA_ARGS__)>(), \ |
737 | ::testing::A<GMOCK_ARG_(tn, 6, __VA_ARGS__)>(), \ |
738 | ::testing::A<GMOCK_ARG_(tn, 7, __VA_ARGS__)>()); \ |
739 | } \ |
740 | mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_(7, constness, \ |
741 | Method) |
742 | |
743 | // INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! |
744 | #define GMOCK_METHOD8_(tn, constness, ct, Method, ...) \ |
745 | GMOCK_RESULT_(tn, __VA_ARGS__) \ |
746 | ct Method(GMOCK_ARG_(tn, 1, __VA_ARGS__) gmock_a1, \ |
747 | GMOCK_ARG_(tn, 2, __VA_ARGS__) gmock_a2, \ |
748 | GMOCK_ARG_(tn, 3, __VA_ARGS__) gmock_a3, \ |
749 | GMOCK_ARG_(tn, 4, __VA_ARGS__) gmock_a4, \ |
750 | GMOCK_ARG_(tn, 5, __VA_ARGS__) gmock_a5, \ |
751 | GMOCK_ARG_(tn, 6, __VA_ARGS__) gmock_a6, \ |
752 | GMOCK_ARG_(tn, 7, __VA_ARGS__) gmock_a7, \ |
753 | GMOCK_ARG_(tn, 8, __VA_ARGS__) gmock_a8) constness { \ |
754 | GTEST_COMPILE_ASSERT_( \ |
755 | (::testing::tuple_size<tn ::testing::internal::Function< \ |
756 | __VA_ARGS__>::ArgumentTuple>::value == 8), \ |
757 | this_method_does_not_take_8_arguments); \ |
758 | GMOCK_MOCKER_(8, constness, Method).SetOwnerAndName(this, #Method); \ |
759 | return GMOCK_MOCKER_(8, constness, Method) \ |
760 | .Invoke(::testing::internal::forward<GMOCK_ARG_(tn, 1, __VA_ARGS__)>( \ |
761 | gmock_a1), \ |
762 | ::testing::internal::forward<GMOCK_ARG_(tn, 2, __VA_ARGS__)>( \ |
763 | gmock_a2), \ |
764 | ::testing::internal::forward<GMOCK_ARG_(tn, 3, __VA_ARGS__)>( \ |
765 | gmock_a3), \ |
766 | ::testing::internal::forward<GMOCK_ARG_(tn, 4, __VA_ARGS__)>( \ |
767 | gmock_a4), \ |
768 | ::testing::internal::forward<GMOCK_ARG_(tn, 5, __VA_ARGS__)>( \ |
769 | gmock_a5), \ |
770 | ::testing::internal::forward<GMOCK_ARG_(tn, 6, __VA_ARGS__)>( \ |
771 | gmock_a6), \ |
772 | ::testing::internal::forward<GMOCK_ARG_(tn, 7, __VA_ARGS__)>( \ |
773 | gmock_a7), \ |
774 | ::testing::internal::forward<GMOCK_ARG_(tn, 8, __VA_ARGS__)>( \ |
775 | gmock_a8)); \ |
776 | } \ |
777 | ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ |
778 | GMOCK_MATCHER_(tn, 1, __VA_ARGS__) gmock_a1, \ |
779 | GMOCK_MATCHER_(tn, 2, __VA_ARGS__) gmock_a2, \ |
780 | GMOCK_MATCHER_(tn, 3, __VA_ARGS__) gmock_a3, \ |
781 | GMOCK_MATCHER_(tn, 4, __VA_ARGS__) gmock_a4, \ |
782 | GMOCK_MATCHER_(tn, 5, __VA_ARGS__) gmock_a5, \ |
783 | GMOCK_MATCHER_(tn, 6, __VA_ARGS__) gmock_a6, \ |
784 | GMOCK_MATCHER_(tn, 7, __VA_ARGS__) gmock_a7, \ |
785 | GMOCK_MATCHER_(tn, 8, __VA_ARGS__) gmock_a8) constness { \ |
786 | GMOCK_MOCKER_(8, constness, Method).RegisterOwner(this); \ |
787 | return GMOCK_MOCKER_(8, constness, Method) \ |
788 | .With(gmock_a1, gmock_a2, gmock_a3, gmock_a4, gmock_a5, gmock_a6, \ |
789 | gmock_a7, gmock_a8); \ |
790 | } \ |
791 | ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ |
792 | const ::testing::internal::WithoutMatchers&, \ |
793 | constness ::testing::internal::Function<__VA_ARGS__>*) const { \ |
794 | return ::testing::internal::AdjustConstness_##constness(this) \ |
795 | ->gmock_##Method(::testing::A<GMOCK_ARG_(tn, 1, __VA_ARGS__)>(), \ |
796 | ::testing::A<GMOCK_ARG_(tn, 2, __VA_ARGS__)>(), \ |
797 | ::testing::A<GMOCK_ARG_(tn, 3, __VA_ARGS__)>(), \ |
798 | ::testing::A<GMOCK_ARG_(tn, 4, __VA_ARGS__)>(), \ |
799 | ::testing::A<GMOCK_ARG_(tn, 5, __VA_ARGS__)>(), \ |
800 | ::testing::A<GMOCK_ARG_(tn, 6, __VA_ARGS__)>(), \ |
801 | ::testing::A<GMOCK_ARG_(tn, 7, __VA_ARGS__)>(), \ |
802 | ::testing::A<GMOCK_ARG_(tn, 8, __VA_ARGS__)>()); \ |
803 | } \ |
804 | mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_(8, constness, \ |
805 | Method) |
806 | |
807 | // INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! |
808 | #define GMOCK_METHOD9_(tn, constness, ct, Method, ...) \ |
809 | GMOCK_RESULT_(tn, __VA_ARGS__) \ |
810 | ct Method(GMOCK_ARG_(tn, 1, __VA_ARGS__) gmock_a1, \ |
811 | GMOCK_ARG_(tn, 2, __VA_ARGS__) gmock_a2, \ |
812 | GMOCK_ARG_(tn, 3, __VA_ARGS__) gmock_a3, \ |
813 | GMOCK_ARG_(tn, 4, __VA_ARGS__) gmock_a4, \ |
814 | GMOCK_ARG_(tn, 5, __VA_ARGS__) gmock_a5, \ |
815 | GMOCK_ARG_(tn, 6, __VA_ARGS__) gmock_a6, \ |
816 | GMOCK_ARG_(tn, 7, __VA_ARGS__) gmock_a7, \ |
817 | GMOCK_ARG_(tn, 8, __VA_ARGS__) gmock_a8, \ |
818 | GMOCK_ARG_(tn, 9, __VA_ARGS__) gmock_a9) constness { \ |
819 | GTEST_COMPILE_ASSERT_( \ |
820 | (::testing::tuple_size<tn ::testing::internal::Function< \ |
821 | __VA_ARGS__>::ArgumentTuple>::value == 9), \ |
822 | this_method_does_not_take_9_arguments); \ |
823 | GMOCK_MOCKER_(9, constness, Method).SetOwnerAndName(this, #Method); \ |
824 | return GMOCK_MOCKER_(9, constness, Method) \ |
825 | .Invoke(::testing::internal::forward<GMOCK_ARG_(tn, 1, __VA_ARGS__)>( \ |
826 | gmock_a1), \ |
827 | ::testing::internal::forward<GMOCK_ARG_(tn, 2, __VA_ARGS__)>( \ |
828 | gmock_a2), \ |
829 | ::testing::internal::forward<GMOCK_ARG_(tn, 3, __VA_ARGS__)>( \ |
830 | gmock_a3), \ |
831 | ::testing::internal::forward<GMOCK_ARG_(tn, 4, __VA_ARGS__)>( \ |
832 | gmock_a4), \ |
833 | ::testing::internal::forward<GMOCK_ARG_(tn, 5, __VA_ARGS__)>( \ |
834 | gmock_a5), \ |
835 | ::testing::internal::forward<GMOCK_ARG_(tn, 6, __VA_ARGS__)>( \ |
836 | gmock_a6), \ |
837 | ::testing::internal::forward<GMOCK_ARG_(tn, 7, __VA_ARGS__)>( \ |
838 | gmock_a7), \ |
839 | ::testing::internal::forward<GMOCK_ARG_(tn, 8, __VA_ARGS__)>( \ |
840 | gmock_a8), \ |
841 | ::testing::internal::forward<GMOCK_ARG_(tn, 9, __VA_ARGS__)>( \ |
842 | gmock_a9)); \ |
843 | } \ |
844 | ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ |
845 | GMOCK_MATCHER_(tn, 1, __VA_ARGS__) gmock_a1, \ |
846 | GMOCK_MATCHER_(tn, 2, __VA_ARGS__) gmock_a2, \ |
847 | GMOCK_MATCHER_(tn, 3, __VA_ARGS__) gmock_a3, \ |
848 | GMOCK_MATCHER_(tn, 4, __VA_ARGS__) gmock_a4, \ |
849 | GMOCK_MATCHER_(tn, 5, __VA_ARGS__) gmock_a5, \ |
850 | GMOCK_MATCHER_(tn, 6, __VA_ARGS__) gmock_a6, \ |
851 | GMOCK_MATCHER_(tn, 7, __VA_ARGS__) gmock_a7, \ |
852 | GMOCK_MATCHER_(tn, 8, __VA_ARGS__) gmock_a8, \ |
853 | GMOCK_MATCHER_(tn, 9, __VA_ARGS__) gmock_a9) constness { \ |
854 | GMOCK_MOCKER_(9, constness, Method).RegisterOwner(this); \ |
855 | return GMOCK_MOCKER_(9, constness, Method) \ |
856 | .With(gmock_a1, gmock_a2, gmock_a3, gmock_a4, gmock_a5, gmock_a6, \ |
857 | gmock_a7, gmock_a8, gmock_a9); \ |
858 | } \ |
859 | ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ |
860 | const ::testing::internal::WithoutMatchers&, \ |
861 | constness ::testing::internal::Function<__VA_ARGS__>*) const { \ |
862 | return ::testing::internal::AdjustConstness_##constness(this) \ |
863 | ->gmock_##Method(::testing::A<GMOCK_ARG_(tn, 1, __VA_ARGS__)>(), \ |
864 | ::testing::A<GMOCK_ARG_(tn, 2, __VA_ARGS__)>(), \ |
865 | ::testing::A<GMOCK_ARG_(tn, 3, __VA_ARGS__)>(), \ |
866 | ::testing::A<GMOCK_ARG_(tn, 4, __VA_ARGS__)>(), \ |
867 | ::testing::A<GMOCK_ARG_(tn, 5, __VA_ARGS__)>(), \ |
868 | ::testing::A<GMOCK_ARG_(tn, 6, __VA_ARGS__)>(), \ |
869 | ::testing::A<GMOCK_ARG_(tn, 7, __VA_ARGS__)>(), \ |
870 | ::testing::A<GMOCK_ARG_(tn, 8, __VA_ARGS__)>(), \ |
871 | ::testing::A<GMOCK_ARG_(tn, 9, __VA_ARGS__)>()); \ |
872 | } \ |
873 | mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_(9, constness, \ |
874 | Method) |
875 | |
876 | // INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! |
877 | #define GMOCK_METHOD10_(tn, constness, ct, Method, ...) \ |
878 | GMOCK_RESULT_(tn, __VA_ARGS__) \ |
879 | ct Method(GMOCK_ARG_(tn, 1, __VA_ARGS__) gmock_a1, \ |
880 | GMOCK_ARG_(tn, 2, __VA_ARGS__) gmock_a2, \ |
881 | GMOCK_ARG_(tn, 3, __VA_ARGS__) gmock_a3, \ |
882 | GMOCK_ARG_(tn, 4, __VA_ARGS__) gmock_a4, \ |
883 | GMOCK_ARG_(tn, 5, __VA_ARGS__) gmock_a5, \ |
884 | GMOCK_ARG_(tn, 6, __VA_ARGS__) gmock_a6, \ |
885 | GMOCK_ARG_(tn, 7, __VA_ARGS__) gmock_a7, \ |
886 | GMOCK_ARG_(tn, 8, __VA_ARGS__) gmock_a8, \ |
887 | GMOCK_ARG_(tn, 9, __VA_ARGS__) gmock_a9, \ |
888 | GMOCK_ARG_(tn, 10, __VA_ARGS__) gmock_a10) constness { \ |
889 | GTEST_COMPILE_ASSERT_( \ |
890 | (::testing::tuple_size<tn ::testing::internal::Function< \ |
891 | __VA_ARGS__>::ArgumentTuple>::value == 10), \ |
892 | this_method_does_not_take_10_arguments); \ |
893 | GMOCK_MOCKER_(10, constness, Method).SetOwnerAndName(this, #Method); \ |
894 | return GMOCK_MOCKER_(10, constness, Method) \ |
895 | .Invoke(::testing::internal::forward<GMOCK_ARG_(tn, 1, __VA_ARGS__)>( \ |
896 | gmock_a1), \ |
897 | ::testing::internal::forward<GMOCK_ARG_(tn, 2, __VA_ARGS__)>( \ |
898 | gmock_a2), \ |
899 | ::testing::internal::forward<GMOCK_ARG_(tn, 3, __VA_ARGS__)>( \ |
900 | gmock_a3), \ |
901 | ::testing::internal::forward<GMOCK_ARG_(tn, 4, __VA_ARGS__)>( \ |
902 | gmock_a4), \ |
903 | ::testing::internal::forward<GMOCK_ARG_(tn, 5, __VA_ARGS__)>( \ |
904 | gmock_a5), \ |
905 | ::testing::internal::forward<GMOCK_ARG_(tn, 6, __VA_ARGS__)>( \ |
906 | gmock_a6), \ |
907 | ::testing::internal::forward<GMOCK_ARG_(tn, 7, __VA_ARGS__)>( \ |
908 | gmock_a7), \ |
909 | ::testing::internal::forward<GMOCK_ARG_(tn, 8, __VA_ARGS__)>( \ |
910 | gmock_a8), \ |
911 | ::testing::internal::forward<GMOCK_ARG_(tn, 9, __VA_ARGS__)>( \ |
912 | gmock_a9), \ |
913 | ::testing::internal::forward<GMOCK_ARG_(tn, 10, __VA_ARGS__)>( \ |
914 | gmock_a10)); \ |
915 | } \ |
916 | ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ |
917 | GMOCK_MATCHER_(tn, 1, __VA_ARGS__) gmock_a1, \ |
918 | GMOCK_MATCHER_(tn, 2, __VA_ARGS__) gmock_a2, \ |
919 | GMOCK_MATCHER_(tn, 3, __VA_ARGS__) gmock_a3, \ |
920 | GMOCK_MATCHER_(tn, 4, __VA_ARGS__) gmock_a4, \ |
921 | GMOCK_MATCHER_(tn, 5, __VA_ARGS__) gmock_a5, \ |
922 | GMOCK_MATCHER_(tn, 6, __VA_ARGS__) gmock_a6, \ |
923 | GMOCK_MATCHER_(tn, 7, __VA_ARGS__) gmock_a7, \ |
924 | GMOCK_MATCHER_(tn, 8, __VA_ARGS__) gmock_a8, \ |
925 | GMOCK_MATCHER_(tn, 9, __VA_ARGS__) gmock_a9, \ |
926 | GMOCK_MATCHER_(tn, 10, __VA_ARGS__) gmock_a10) constness { \ |
927 | GMOCK_MOCKER_(10, constness, Method).RegisterOwner(this); \ |
928 | return GMOCK_MOCKER_(10, constness, Method) \ |
929 | .With(gmock_a1, gmock_a2, gmock_a3, gmock_a4, gmock_a5, gmock_a6, \ |
930 | gmock_a7, gmock_a8, gmock_a9, gmock_a10); \ |
931 | } \ |
932 | ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ |
933 | const ::testing::internal::WithoutMatchers&, \ |
934 | constness ::testing::internal::Function<__VA_ARGS__>*) const { \ |
935 | return ::testing::internal::AdjustConstness_##constness(this) \ |
936 | ->gmock_##Method(::testing::A<GMOCK_ARG_(tn, 1, __VA_ARGS__)>(), \ |
937 | ::testing::A<GMOCK_ARG_(tn, 2, __VA_ARGS__)>(), \ |
938 | ::testing::A<GMOCK_ARG_(tn, 3, __VA_ARGS__)>(), \ |
939 | ::testing::A<GMOCK_ARG_(tn, 4, __VA_ARGS__)>(), \ |
940 | ::testing::A<GMOCK_ARG_(tn, 5, __VA_ARGS__)>(), \ |
941 | ::testing::A<GMOCK_ARG_(tn, 6, __VA_ARGS__)>(), \ |
942 | ::testing::A<GMOCK_ARG_(tn, 7, __VA_ARGS__)>(), \ |
943 | ::testing::A<GMOCK_ARG_(tn, 8, __VA_ARGS__)>(), \ |
944 | ::testing::A<GMOCK_ARG_(tn, 9, __VA_ARGS__)>(), \ |
945 | ::testing::A<GMOCK_ARG_(tn, 10, __VA_ARGS__)>()); \ |
946 | } \ |
947 | mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_(10, constness, \ |
948 | Method) |
949 | |
950 | #define MOCK_METHOD0(m, ...) GMOCK_METHOD0_(, , , m, __VA_ARGS__) |
951 | #define MOCK_METHOD1(m, ...) GMOCK_METHOD1_(, , , m, __VA_ARGS__) |
952 | #define MOCK_METHOD2(m, ...) GMOCK_METHOD2_(, , , m, __VA_ARGS__) |
953 | #define MOCK_METHOD3(m, ...) GMOCK_METHOD3_(, , , m, __VA_ARGS__) |
954 | #define MOCK_METHOD4(m, ...) GMOCK_METHOD4_(, , , m, __VA_ARGS__) |
955 | #define MOCK_METHOD5(m, ...) GMOCK_METHOD5_(, , , m, __VA_ARGS__) |
956 | #define MOCK_METHOD6(m, ...) GMOCK_METHOD6_(, , , m, __VA_ARGS__) |
957 | #define MOCK_METHOD7(m, ...) GMOCK_METHOD7_(, , , m, __VA_ARGS__) |
958 | #define MOCK_METHOD8(m, ...) GMOCK_METHOD8_(, , , m, __VA_ARGS__) |
959 | #define MOCK_METHOD9(m, ...) GMOCK_METHOD9_(, , , m, __VA_ARGS__) |
960 | #define MOCK_METHOD10(m, ...) GMOCK_METHOD10_(, , , m, __VA_ARGS__) |
961 | |
962 | #define MOCK_CONST_METHOD0(m, ...) GMOCK_METHOD0_(, const, , m, __VA_ARGS__) |
963 | #define MOCK_CONST_METHOD1(m, ...) GMOCK_METHOD1_(, const, , m, __VA_ARGS__) |
964 | #define MOCK_CONST_METHOD2(m, ...) GMOCK_METHOD2_(, const, , m, __VA_ARGS__) |
965 | #define MOCK_CONST_METHOD3(m, ...) GMOCK_METHOD3_(, const, , m, __VA_ARGS__) |
966 | #define MOCK_CONST_METHOD4(m, ...) GMOCK_METHOD4_(, const, , m, __VA_ARGS__) |
967 | #define MOCK_CONST_METHOD5(m, ...) GMOCK_METHOD5_(, const, , m, __VA_ARGS__) |
968 | #define MOCK_CONST_METHOD6(m, ...) GMOCK_METHOD6_(, const, , m, __VA_ARGS__) |
969 | #define MOCK_CONST_METHOD7(m, ...) GMOCK_METHOD7_(, const, , m, __VA_ARGS__) |
970 | #define MOCK_CONST_METHOD8(m, ...) GMOCK_METHOD8_(, const, , m, __VA_ARGS__) |
971 | #define MOCK_CONST_METHOD9(m, ...) GMOCK_METHOD9_(, const, , m, __VA_ARGS__) |
972 | #define MOCK_CONST_METHOD10(m, ...) GMOCK_METHOD10_(, const, , m, __VA_ARGS__) |
973 | |
974 | #define MOCK_METHOD0_T(m, ...) GMOCK_METHOD0_(typename, , , m, __VA_ARGS__) |
975 | #define MOCK_METHOD1_T(m, ...) GMOCK_METHOD1_(typename, , , m, __VA_ARGS__) |
976 | #define MOCK_METHOD2_T(m, ...) GMOCK_METHOD2_(typename, , , m, __VA_ARGS__) |
977 | #define MOCK_METHOD3_T(m, ...) GMOCK_METHOD3_(typename, , , m, __VA_ARGS__) |
978 | #define MOCK_METHOD4_T(m, ...) GMOCK_METHOD4_(typename, , , m, __VA_ARGS__) |
979 | #define MOCK_METHOD5_T(m, ...) GMOCK_METHOD5_(typename, , , m, __VA_ARGS__) |
980 | #define MOCK_METHOD6_T(m, ...) GMOCK_METHOD6_(typename, , , m, __VA_ARGS__) |
981 | #define MOCK_METHOD7_T(m, ...) GMOCK_METHOD7_(typename, , , m, __VA_ARGS__) |
982 | #define MOCK_METHOD8_T(m, ...) GMOCK_METHOD8_(typename, , , m, __VA_ARGS__) |
983 | #define MOCK_METHOD9_T(m, ...) GMOCK_METHOD9_(typename, , , m, __VA_ARGS__) |
984 | #define MOCK_METHOD10_T(m, ...) GMOCK_METHOD10_(typename, , , m, __VA_ARGS__) |
985 | |
986 | #define MOCK_CONST_METHOD0_T(m, ...) \ |
987 | GMOCK_METHOD0_(typename, const, , m, __VA_ARGS__) |
988 | #define MOCK_CONST_METHOD1_T(m, ...) \ |
989 | GMOCK_METHOD1_(typename, const, , m, __VA_ARGS__) |
990 | #define MOCK_CONST_METHOD2_T(m, ...) \ |
991 | GMOCK_METHOD2_(typename, const, , m, __VA_ARGS__) |
992 | #define MOCK_CONST_METHOD3_T(m, ...) \ |
993 | GMOCK_METHOD3_(typename, const, , m, __VA_ARGS__) |
994 | #define MOCK_CONST_METHOD4_T(m, ...) \ |
995 | GMOCK_METHOD4_(typename, const, , m, __VA_ARGS__) |
996 | #define MOCK_CONST_METHOD5_T(m, ...) \ |
997 | GMOCK_METHOD5_(typename, const, , m, __VA_ARGS__) |
998 | #define MOCK_CONST_METHOD6_T(m, ...) \ |
999 | GMOCK_METHOD6_(typename, const, , m, __VA_ARGS__) |
1000 | #define MOCK_CONST_METHOD7_T(m, ...) \ |
1001 | GMOCK_METHOD7_(typename, const, , m, __VA_ARGS__) |
1002 | #define MOCK_CONST_METHOD8_T(m, ...) \ |
1003 | GMOCK_METHOD8_(typename, const, , m, __VA_ARGS__) |
1004 | #define MOCK_CONST_METHOD9_T(m, ...) \ |
1005 | GMOCK_METHOD9_(typename, const, , m, __VA_ARGS__) |
1006 | #define MOCK_CONST_METHOD10_T(m, ...) \ |
1007 | GMOCK_METHOD10_(typename, const, , m, __VA_ARGS__) |
1008 | |
1009 | #define MOCK_METHOD0_WITH_CALLTYPE(ct, m, ...) \ |
1010 | GMOCK_METHOD0_(, , ct, m, __VA_ARGS__) |
1011 | #define MOCK_METHOD1_WITH_CALLTYPE(ct, m, ...) \ |
1012 | GMOCK_METHOD1_(, , ct, m, __VA_ARGS__) |
1013 | #define MOCK_METHOD2_WITH_CALLTYPE(ct, m, ...) \ |
1014 | GMOCK_METHOD2_(, , ct, m, __VA_ARGS__) |
1015 | #define MOCK_METHOD3_WITH_CALLTYPE(ct, m, ...) \ |
1016 | GMOCK_METHOD3_(, , ct, m, __VA_ARGS__) |
1017 | #define MOCK_METHOD4_WITH_CALLTYPE(ct, m, ...) \ |
1018 | GMOCK_METHOD4_(, , ct, m, __VA_ARGS__) |
1019 | #define MOCK_METHOD5_WITH_CALLTYPE(ct, m, ...) \ |
1020 | GMOCK_METHOD5_(, , ct, m, __VA_ARGS__) |
1021 | #define MOCK_METHOD6_WITH_CALLTYPE(ct, m, ...) \ |
1022 | GMOCK_METHOD6_(, , ct, m, __VA_ARGS__) |
1023 | #define MOCK_METHOD7_WITH_CALLTYPE(ct, m, ...) \ |
1024 | GMOCK_METHOD7_(, , ct, m, __VA_ARGS__) |
1025 | #define MOCK_METHOD8_WITH_CALLTYPE(ct, m, ...) \ |
1026 | GMOCK_METHOD8_(, , ct, m, __VA_ARGS__) |
1027 | #define MOCK_METHOD9_WITH_CALLTYPE(ct, m, ...) \ |
1028 | GMOCK_METHOD9_(, , ct, m, __VA_ARGS__) |
1029 | #define MOCK_METHOD10_WITH_CALLTYPE(ct, m, ...) \ |
1030 | GMOCK_METHOD10_(, , ct, m, __VA_ARGS__) |
1031 | |
1032 | #define MOCK_CONST_METHOD0_WITH_CALLTYPE(ct, m, ...) \ |
1033 | GMOCK_METHOD0_(, const, ct, m, __VA_ARGS__) |
1034 | #define MOCK_CONST_METHOD1_WITH_CALLTYPE(ct, m, ...) \ |
1035 | GMOCK_METHOD1_(, const, ct, m, __VA_ARGS__) |
1036 | #define MOCK_CONST_METHOD2_WITH_CALLTYPE(ct, m, ...) \ |
1037 | GMOCK_METHOD2_(, const, ct, m, __VA_ARGS__) |
1038 | #define MOCK_CONST_METHOD3_WITH_CALLTYPE(ct, m, ...) \ |
1039 | GMOCK_METHOD3_(, const, ct, m, __VA_ARGS__) |
1040 | #define MOCK_CONST_METHOD4_WITH_CALLTYPE(ct, m, ...) \ |
1041 | GMOCK_METHOD4_(, const, ct, m, __VA_ARGS__) |
1042 | #define MOCK_CONST_METHOD5_WITH_CALLTYPE(ct, m, ...) \ |
1043 | GMOCK_METHOD5_(, const, ct, m, __VA_ARGS__) |
1044 | #define MOCK_CONST_METHOD6_WITH_CALLTYPE(ct, m, ...) \ |
1045 | GMOCK_METHOD6_(, const, ct, m, __VA_ARGS__) |
1046 | #define MOCK_CONST_METHOD7_WITH_CALLTYPE(ct, m, ...) \ |
1047 | GMOCK_METHOD7_(, const, ct, m, __VA_ARGS__) |
1048 | #define MOCK_CONST_METHOD8_WITH_CALLTYPE(ct, m, ...) \ |
1049 | GMOCK_METHOD8_(, const, ct, m, __VA_ARGS__) |
1050 | #define MOCK_CONST_METHOD9_WITH_CALLTYPE(ct, m, ...) \ |
1051 | GMOCK_METHOD9_(, const, ct, m, __VA_ARGS__) |
1052 | #define MOCK_CONST_METHOD10_WITH_CALLTYPE(ct, m, ...) \ |
1053 | GMOCK_METHOD10_(, const, ct, m, __VA_ARGS__) |
1054 | |
1055 | #define MOCK_METHOD0_T_WITH_CALLTYPE(ct, m, ...) \ |
1056 | GMOCK_METHOD0_(typename, , ct, m, __VA_ARGS__) |
1057 | #define MOCK_METHOD1_T_WITH_CALLTYPE(ct, m, ...) \ |
1058 | GMOCK_METHOD1_(typename, , ct, m, __VA_ARGS__) |
1059 | #define MOCK_METHOD2_T_WITH_CALLTYPE(ct, m, ...) \ |
1060 | GMOCK_METHOD2_(typename, , ct, m, __VA_ARGS__) |
1061 | #define MOCK_METHOD3_T_WITH_CALLTYPE(ct, m, ...) \ |
1062 | GMOCK_METHOD3_(typename, , ct, m, __VA_ARGS__) |
1063 | #define MOCK_METHOD4_T_WITH_CALLTYPE(ct, m, ...) \ |
1064 | GMOCK_METHOD4_(typename, , ct, m, __VA_ARGS__) |
1065 | #define MOCK_METHOD5_T_WITH_CALLTYPE(ct, m, ...) \ |
1066 | GMOCK_METHOD5_(typename, , ct, m, __VA_ARGS__) |
1067 | #define MOCK_METHOD6_T_WITH_CALLTYPE(ct, m, ...) \ |
1068 | GMOCK_METHOD6_(typename, , ct, m, __VA_ARGS__) |
1069 | #define MOCK_METHOD7_T_WITH_CALLTYPE(ct, m, ...) \ |
1070 | GMOCK_METHOD7_(typename, , ct, m, __VA_ARGS__) |
1071 | #define MOCK_METHOD8_T_WITH_CALLTYPE(ct, m, ...) \ |
1072 | GMOCK_METHOD8_(typename, , ct, m, __VA_ARGS__) |
1073 | #define MOCK_METHOD9_T_WITH_CALLTYPE(ct, m, ...) \ |
1074 | GMOCK_METHOD9_(typename, , ct, m, __VA_ARGS__) |
1075 | #define MOCK_METHOD10_T_WITH_CALLTYPE(ct, m, ...) \ |
1076 | GMOCK_METHOD10_(typename, , ct, m, __VA_ARGS__) |
1077 | |
1078 | #define MOCK_CONST_METHOD0_T_WITH_CALLTYPE(ct, m, ...) \ |
1079 | GMOCK_METHOD0_(typename, const, ct, m, __VA_ARGS__) |
1080 | #define MOCK_CONST_METHOD1_T_WITH_CALLTYPE(ct, m, ...) \ |
1081 | GMOCK_METHOD1_(typename, const, ct, m, __VA_ARGS__) |
1082 | #define MOCK_CONST_METHOD2_T_WITH_CALLTYPE(ct, m, ...) \ |
1083 | GMOCK_METHOD2_(typename, const, ct, m, __VA_ARGS__) |
1084 | #define MOCK_CONST_METHOD3_T_WITH_CALLTYPE(ct, m, ...) \ |
1085 | GMOCK_METHOD3_(typename, const, ct, m, __VA_ARGS__) |
1086 | #define MOCK_CONST_METHOD4_T_WITH_CALLTYPE(ct, m, ...) \ |
1087 | GMOCK_METHOD4_(typename, const, ct, m, __VA_ARGS__) |
1088 | #define MOCK_CONST_METHOD5_T_WITH_CALLTYPE(ct, m, ...) \ |
1089 | GMOCK_METHOD5_(typename, const, ct, m, __VA_ARGS__) |
1090 | #define MOCK_CONST_METHOD6_T_WITH_CALLTYPE(ct, m, ...) \ |
1091 | GMOCK_METHOD6_(typename, const, ct, m, __VA_ARGS__) |
1092 | #define MOCK_CONST_METHOD7_T_WITH_CALLTYPE(ct, m, ...) \ |
1093 | GMOCK_METHOD7_(typename, const, ct, m, __VA_ARGS__) |
1094 | #define MOCK_CONST_METHOD8_T_WITH_CALLTYPE(ct, m, ...) \ |
1095 | GMOCK_METHOD8_(typename, const, ct, m, __VA_ARGS__) |
1096 | #define MOCK_CONST_METHOD9_T_WITH_CALLTYPE(ct, m, ...) \ |
1097 | GMOCK_METHOD9_(typename, const, ct, m, __VA_ARGS__) |
1098 | #define MOCK_CONST_METHOD10_T_WITH_CALLTYPE(ct, m, ...) \ |
1099 | GMOCK_METHOD10_(typename, const, ct, m, __VA_ARGS__) |
1100 | |
1101 | // A MockFunction<F> class has one mock method whose type is F. It is |
1102 | // useful when you just want your test code to emit some messages and |
1103 | // have Google Mock verify the right messages are sent (and perhaps at |
1104 | // the right times). For example, if you are exercising code: |
1105 | // |
1106 | // Foo(1); |
1107 | // Foo(2); |
1108 | // Foo(3); |
1109 | // |
1110 | // and want to verify that Foo(1) and Foo(3) both invoke |
1111 | // mock.Bar("a"), but Foo(2) doesn't invoke anything, you can write: |
1112 | // |
1113 | // TEST(FooTest, InvokesBarCorrectly) { |
1114 | // MyMock mock; |
1115 | // MockFunction<void(string check_point_name)> check; |
1116 | // { |
1117 | // InSequence s; |
1118 | // |
1119 | // EXPECT_CALL(mock, Bar("a")); |
1120 | // EXPECT_CALL(check, Call("1")); |
1121 | // EXPECT_CALL(check, Call("2")); |
1122 | // EXPECT_CALL(mock, Bar("a")); |
1123 | // } |
1124 | // Foo(1); |
1125 | // check.Call("1"); |
1126 | // Foo(2); |
1127 | // check.Call("2"); |
1128 | // Foo(3); |
1129 | // } |
1130 | // |
1131 | // The expectation spec says that the first Bar("a") must happen |
1132 | // before check point "1", the second Bar("a") must happen after check |
1133 | // point "2", and nothing should happen between the two check |
1134 | // points. The explicit check points make it easy to tell which |
1135 | // Bar("a") is called by which call to Foo(). |
1136 | // |
1137 | // MockFunction<F> can also be used to exercise code that accepts |
1138 | // std::function<F> callbacks. To do so, use AsStdFunction() method |
1139 | // to create std::function proxy forwarding to original object's Call. |
1140 | // Example: |
1141 | // |
1142 | // TEST(FooTest, RunsCallbackWithBarArgument) { |
1143 | // MockFunction<int(string)> callback; |
1144 | // EXPECT_CALL(callback, Call("bar")).WillOnce(Return(1)); |
1145 | // Foo(callback.AsStdFunction()); |
1146 | // } |
1147 | template <typename F> |
1148 | class MockFunction; |
1149 | |
1150 | template <typename R> |
1151 | class MockFunction<R()> { |
1152 | public: |
1153 | MockFunction() {} |
1154 | |
1155 | MOCK_METHOD0_T(Call, R()); |
1156 | |
1157 | #if GTEST_HAS_STD_FUNCTION_ |
1158 | ::std::function<R()> AsStdFunction() { |
1159 | return [this]() -> R { |
1160 | return this->Call(); |
1161 | }; |
1162 | } |
1163 | #endif // GTEST_HAS_STD_FUNCTION_ |
1164 | |
1165 | private: |
1166 | GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); |
1167 | }; |
1168 | |
1169 | template <typename R, typename A0> |
1170 | class MockFunction<R(A0)> { |
1171 | public: |
1172 | MockFunction() {} |
1173 | |
1174 | MOCK_METHOD1_T(Call, R(A0)); |
1175 | |
1176 | #if GTEST_HAS_STD_FUNCTION_ |
1177 | ::std::function<R(A0)> AsStdFunction() { |
1178 | return [this](A0 a0) -> R { |
1179 | return this->Call(::std::move(a0)); |
1180 | }; |
1181 | } |
1182 | #endif // GTEST_HAS_STD_FUNCTION_ |
1183 | |
1184 | private: |
1185 | GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); |
1186 | }; |
1187 | |
1188 | template <typename R, typename A0, typename A1> |
1189 | class MockFunction<R(A0, A1)> { |
1190 | public: |
1191 | MockFunction() {} |
1192 | |
1193 | MOCK_METHOD2_T(Call, R(A0, A1)); |
1194 | |
1195 | #if GTEST_HAS_STD_FUNCTION_ |
1196 | ::std::function<R(A0, A1)> AsStdFunction() { |
1197 | return [this](A0 a0, A1 a1) -> R { |
1198 | return this->Call(::std::move(a0), ::std::move(a1)); |
1199 | }; |
1200 | } |
1201 | #endif // GTEST_HAS_STD_FUNCTION_ |
1202 | |
1203 | private: |
1204 | GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); |
1205 | }; |
1206 | |
1207 | template <typename R, typename A0, typename A1, typename A2> |
1208 | class MockFunction<R(A0, A1, A2)> { |
1209 | public: |
1210 | MockFunction() {} |
1211 | |
1212 | MOCK_METHOD3_T(Call, R(A0, A1, A2)); |
1213 | |
1214 | #if GTEST_HAS_STD_FUNCTION_ |
1215 | ::std::function<R(A0, A1, A2)> AsStdFunction() { |
1216 | return [this](A0 a0, A1 a1, A2 a2) -> R { |
1217 | return this->Call(::std::move(a0), ::std::move(a1), ::std::move(a2)); |
1218 | }; |
1219 | } |
1220 | #endif // GTEST_HAS_STD_FUNCTION_ |
1221 | |
1222 | private: |
1223 | GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); |
1224 | }; |
1225 | |
1226 | template <typename R, typename A0, typename A1, typename A2, typename A3> |
1227 | class MockFunction<R(A0, A1, A2, A3)> { |
1228 | public: |
1229 | MockFunction() {} |
1230 | |
1231 | MOCK_METHOD4_T(Call, R(A0, A1, A2, A3)); |
1232 | |
1233 | #if GTEST_HAS_STD_FUNCTION_ |
1234 | ::std::function<R(A0, A1, A2, A3)> AsStdFunction() { |
1235 | return [this](A0 a0, A1 a1, A2 a2, A3 a3) -> R { |
1236 | return this->Call(::std::move(a0), ::std::move(a1), ::std::move(a2), |
1237 | ::std::move(a3)); |
1238 | }; |
1239 | } |
1240 | #endif // GTEST_HAS_STD_FUNCTION_ |
1241 | |
1242 | private: |
1243 | GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); |
1244 | }; |
1245 | |
1246 | template <typename R, typename A0, typename A1, typename A2, typename A3, |
1247 | typename A4> |
1248 | class MockFunction<R(A0, A1, A2, A3, A4)> { |
1249 | public: |
1250 | MockFunction() {} |
1251 | |
1252 | MOCK_METHOD5_T(Call, R(A0, A1, A2, A3, A4)); |
1253 | |
1254 | #if GTEST_HAS_STD_FUNCTION_ |
1255 | ::std::function<R(A0, A1, A2, A3, A4)> AsStdFunction() { |
1256 | return [this](A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) -> R { |
1257 | return this->Call(::std::move(a0), ::std::move(a1), ::std::move(a2), |
1258 | ::std::move(a3), ::std::move(a4)); |
1259 | }; |
1260 | } |
1261 | #endif // GTEST_HAS_STD_FUNCTION_ |
1262 | |
1263 | private: |
1264 | GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); |
1265 | }; |
1266 | |
1267 | template <typename R, typename A0, typename A1, typename A2, typename A3, |
1268 | typename A4, typename A5> |
1269 | class MockFunction<R(A0, A1, A2, A3, A4, A5)> { |
1270 | public: |
1271 | MockFunction() {} |
1272 | |
1273 | MOCK_METHOD6_T(Call, R(A0, A1, A2, A3, A4, A5)); |
1274 | |
1275 | #if GTEST_HAS_STD_FUNCTION_ |
1276 | ::std::function<R(A0, A1, A2, A3, A4, A5)> AsStdFunction() { |
1277 | return [this](A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) -> R { |
1278 | return this->Call(::std::move(a0), ::std::move(a1), ::std::move(a2), |
1279 | ::std::move(a3), ::std::move(a4), ::std::move(a5)); |
1280 | }; |
1281 | } |
1282 | #endif // GTEST_HAS_STD_FUNCTION_ |
1283 | |
1284 | private: |
1285 | GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); |
1286 | }; |
1287 | |
1288 | template <typename R, typename A0, typename A1, typename A2, typename A3, |
1289 | typename A4, typename A5, typename A6> |
1290 | class MockFunction<R(A0, A1, A2, A3, A4, A5, A6)> { |
1291 | public: |
1292 | MockFunction() {} |
1293 | |
1294 | MOCK_METHOD7_T(Call, R(A0, A1, A2, A3, A4, A5, A6)); |
1295 | |
1296 | #if GTEST_HAS_STD_FUNCTION_ |
1297 | ::std::function<R(A0, A1, A2, A3, A4, A5, A6)> AsStdFunction() { |
1298 | return [this](A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) -> R { |
1299 | return this->Call(::std::move(a0), ::std::move(a1), ::std::move(a2), |
1300 | ::std::move(a3), ::std::move(a4), ::std::move(a5), ::std::move(a6)); |
1301 | }; |
1302 | } |
1303 | #endif // GTEST_HAS_STD_FUNCTION_ |
1304 | |
1305 | private: |
1306 | GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); |
1307 | }; |
1308 | |
1309 | template <typename R, typename A0, typename A1, typename A2, typename A3, |
1310 | typename A4, typename A5, typename A6, typename A7> |
1311 | class MockFunction<R(A0, A1, A2, A3, A4, A5, A6, A7)> { |
1312 | public: |
1313 | MockFunction() {} |
1314 | |
1315 | MOCK_METHOD8_T(Call, R(A0, A1, A2, A3, A4, A5, A6, A7)); |
1316 | |
1317 | #if GTEST_HAS_STD_FUNCTION_ |
1318 | ::std::function<R(A0, A1, A2, A3, A4, A5, A6, A7)> AsStdFunction() { |
1319 | return [this](A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) -> R { |
1320 | return this->Call(::std::move(a0), ::std::move(a1), ::std::move(a2), |
1321 | ::std::move(a3), ::std::move(a4), ::std::move(a5), ::std::move(a6), |
1322 | ::std::move(a7)); |
1323 | }; |
1324 | } |
1325 | #endif // GTEST_HAS_STD_FUNCTION_ |
1326 | |
1327 | private: |
1328 | GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); |
1329 | }; |
1330 | |
1331 | template <typename R, typename A0, typename A1, typename A2, typename A3, |
1332 | typename A4, typename A5, typename A6, typename A7, typename A8> |
1333 | class MockFunction<R(A0, A1, A2, A3, A4, A5, A6, A7, A8)> { |
1334 | public: |
1335 | MockFunction() {} |
1336 | |
1337 | MOCK_METHOD9_T(Call, R(A0, A1, A2, A3, A4, A5, A6, A7, A8)); |
1338 | |
1339 | #if GTEST_HAS_STD_FUNCTION_ |
1340 | ::std::function<R(A0, A1, A2, A3, A4, A5, A6, A7, A8)> AsStdFunction() { |
1341 | return [this](A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, |
1342 | A8 a8) -> R { |
1343 | return this->Call(::std::move(a0), ::std::move(a1), ::std::move(a2), |
1344 | ::std::move(a3), ::std::move(a4), ::std::move(a5), ::std::move(a6), |
1345 | ::std::move(a7), ::std::move(a8)); |
1346 | }; |
1347 | } |
1348 | #endif // GTEST_HAS_STD_FUNCTION_ |
1349 | |
1350 | private: |
1351 | GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); |
1352 | }; |
1353 | |
1354 | template <typename R, typename A0, typename A1, typename A2, typename A3, |
1355 | typename A4, typename A5, typename A6, typename A7, typename A8, |
1356 | typename A9> |
1357 | class MockFunction<R(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9)> { |
1358 | public: |
1359 | MockFunction() {} |
1360 | |
1361 | MOCK_METHOD10_T(Call, R(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9)); |
1362 | |
1363 | #if GTEST_HAS_STD_FUNCTION_ |
1364 | ::std::function<R(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9)> AsStdFunction() { |
1365 | return [this](A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, |
1366 | A8 a8, A9 a9) -> R { |
1367 | return this->Call(::std::move(a0), ::std::move(a1), ::std::move(a2), |
1368 | ::std::move(a3), ::std::move(a4), ::std::move(a5), ::std::move(a6), |
1369 | ::std::move(a7), ::std::move(a8), ::std::move(a9)); |
1370 | }; |
1371 | } |
1372 | #endif // GTEST_HAS_STD_FUNCTION_ |
1373 | |
1374 | private: |
1375 | GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); |
1376 | }; |
1377 | |
1378 | } // namespace testing |
1379 | |
1380 | #endif // GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_FUNCTION_MOCKERS_H_ |
1381 | |