1 | // This file was GENERATED by command: |
2 | // pump.py gmock-generated-actions.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 some commonly used variadic actions. |
38 | |
39 | // GOOGLETEST_CM0002 DO NOT DELETE |
40 | |
41 | #ifndef GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_ACTIONS_H_ |
42 | #define GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_ACTIONS_H_ |
43 | |
44 | #include <memory> |
45 | #include <utility> |
46 | |
47 | #include "gmock/gmock-actions.h" |
48 | #include "gmock/internal/gmock-port.h" |
49 | |
50 | namespace testing { |
51 | namespace internal { |
52 | |
53 | // A macro from the ACTION* family (defined later in this file) |
54 | // defines an action that can be used in a mock function. Typically, |
55 | // these actions only care about a subset of the arguments of the mock |
56 | // function. For example, if such an action only uses the second |
57 | // argument, it can be used in any mock function that takes >= 2 |
58 | // arguments where the type of the second argument is compatible. |
59 | // |
60 | // Therefore, the action implementation must be prepared to take more |
61 | // arguments than it needs. The ExcessiveArg type is used to |
62 | // represent those excessive arguments. In order to keep the compiler |
63 | // error messages tractable, we define it in the testing namespace |
64 | // instead of testing::internal. However, this is an INTERNAL TYPE |
65 | // and subject to change without notice, so a user MUST NOT USE THIS |
66 | // TYPE DIRECTLY. |
67 | struct ExcessiveArg {}; |
68 | |
69 | // A helper class needed for implementing the ACTION* macros. |
70 | template <typename Result, class Impl> |
71 | class ActionHelper { |
72 | public: |
73 | static Result Perform(Impl* impl, const ::std::tuple<>& args) { |
74 | return impl->template gmock_PerformImpl<>(args, ExcessiveArg(), |
75 | ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), |
76 | ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), |
77 | ExcessiveArg()); |
78 | } |
79 | |
80 | template <typename A0> |
81 | static Result Perform(Impl* impl, const ::std::tuple<A0>& args) { |
82 | return impl->template gmock_PerformImpl<A0>(args, std::get<0>(args), |
83 | ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), |
84 | ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), |
85 | ExcessiveArg()); |
86 | } |
87 | |
88 | template <typename A0, typename A1> |
89 | static Result Perform(Impl* impl, const ::std::tuple<A0, A1>& args) { |
90 | return impl->template gmock_PerformImpl<A0, A1>(args, std::get<0>(args), |
91 | std::get<1>(args), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), |
92 | ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), |
93 | ExcessiveArg()); |
94 | } |
95 | |
96 | template <typename A0, typename A1, typename A2> |
97 | static Result Perform(Impl* impl, const ::std::tuple<A0, A1, A2>& args) { |
98 | return impl->template gmock_PerformImpl<A0, A1, A2>(args, |
99 | std::get<0>(args), std::get<1>(args), std::get<2>(args), |
100 | ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), |
101 | ExcessiveArg(), ExcessiveArg(), ExcessiveArg()); |
102 | } |
103 | |
104 | template <typename A0, typename A1, typename A2, typename A3> |
105 | static Result Perform(Impl* impl, const ::std::tuple<A0, A1, A2, A3>& args) { |
106 | return impl->template gmock_PerformImpl<A0, A1, A2, A3>(args, |
107 | std::get<0>(args), std::get<1>(args), std::get<2>(args), |
108 | std::get<3>(args), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), |
109 | ExcessiveArg(), ExcessiveArg(), ExcessiveArg()); |
110 | } |
111 | |
112 | template <typename A0, typename A1, typename A2, typename A3, typename A4> |
113 | static Result Perform(Impl* impl, const ::std::tuple<A0, A1, A2, A3, |
114 | A4>& args) { |
115 | return impl->template gmock_PerformImpl<A0, A1, A2, A3, A4>(args, |
116 | std::get<0>(args), std::get<1>(args), std::get<2>(args), |
117 | std::get<3>(args), std::get<4>(args), ExcessiveArg(), ExcessiveArg(), |
118 | ExcessiveArg(), ExcessiveArg(), ExcessiveArg()); |
119 | } |
120 | |
121 | template <typename A0, typename A1, typename A2, typename A3, typename A4, |
122 | typename A5> |
123 | static Result Perform(Impl* impl, const ::std::tuple<A0, A1, A2, A3, A4, |
124 | A5>& args) { |
125 | return impl->template gmock_PerformImpl<A0, A1, A2, A3, A4, A5>(args, |
126 | std::get<0>(args), std::get<1>(args), std::get<2>(args), |
127 | std::get<3>(args), std::get<4>(args), std::get<5>(args), |
128 | ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg()); |
129 | } |
130 | |
131 | template <typename A0, typename A1, typename A2, typename A3, typename A4, |
132 | typename A5, typename A6> |
133 | static Result Perform(Impl* impl, const ::std::tuple<A0, A1, A2, A3, A4, A5, |
134 | A6>& args) { |
135 | return impl->template gmock_PerformImpl<A0, A1, A2, A3, A4, A5, A6>(args, |
136 | std::get<0>(args), std::get<1>(args), std::get<2>(args), |
137 | std::get<3>(args), std::get<4>(args), std::get<5>(args), |
138 | std::get<6>(args), ExcessiveArg(), ExcessiveArg(), ExcessiveArg()); |
139 | } |
140 | |
141 | template <typename A0, typename A1, typename A2, typename A3, typename A4, |
142 | typename A5, typename A6, typename A7> |
143 | static Result Perform(Impl* impl, const ::std::tuple<A0, A1, A2, A3, A4, A5, |
144 | A6, A7>& args) { |
145 | return impl->template gmock_PerformImpl<A0, A1, A2, A3, A4, A5, A6, |
146 | A7>(args, std::get<0>(args), std::get<1>(args), std::get<2>(args), |
147 | std::get<3>(args), std::get<4>(args), std::get<5>(args), |
148 | std::get<6>(args), std::get<7>(args), ExcessiveArg(), ExcessiveArg()); |
149 | } |
150 | |
151 | template <typename A0, typename A1, typename A2, typename A3, typename A4, |
152 | typename A5, typename A6, typename A7, typename A8> |
153 | static Result Perform(Impl* impl, const ::std::tuple<A0, A1, A2, A3, A4, A5, |
154 | A6, A7, A8>& args) { |
155 | return impl->template gmock_PerformImpl<A0, A1, A2, A3, A4, A5, A6, A7, |
156 | A8>(args, std::get<0>(args), std::get<1>(args), std::get<2>(args), |
157 | std::get<3>(args), std::get<4>(args), std::get<5>(args), |
158 | std::get<6>(args), std::get<7>(args), std::get<8>(args), |
159 | ExcessiveArg()); |
160 | } |
161 | |
162 | template <typename A0, typename A1, typename A2, typename A3, typename A4, |
163 | typename A5, typename A6, typename A7, typename A8, typename A9> |
164 | static Result Perform(Impl* impl, const ::std::tuple<A0, A1, A2, A3, A4, A5, |
165 | A6, A7, A8, A9>& args) { |
166 | return impl->template gmock_PerformImpl<A0, A1, A2, A3, A4, A5, A6, A7, A8, |
167 | A9>(args, std::get<0>(args), std::get<1>(args), std::get<2>(args), |
168 | std::get<3>(args), std::get<4>(args), std::get<5>(args), |
169 | std::get<6>(args), std::get<7>(args), std::get<8>(args), |
170 | std::get<9>(args)); |
171 | } |
172 | }; |
173 | |
174 | } // namespace internal |
175 | } // namespace testing |
176 | |
177 | // The ACTION* family of macros can be used in a namespace scope to |
178 | // define custom actions easily. The syntax: |
179 | // |
180 | // ACTION(name) { statements; } |
181 | // |
182 | // will define an action with the given name that executes the |
183 | // statements. The value returned by the statements will be used as |
184 | // the return value of the action. Inside the statements, you can |
185 | // refer to the K-th (0-based) argument of the mock function by |
186 | // 'argK', and refer to its type by 'argK_type'. For example: |
187 | // |
188 | // ACTION(IncrementArg1) { |
189 | // arg1_type temp = arg1; |
190 | // return ++(*temp); |
191 | // } |
192 | // |
193 | // allows you to write |
194 | // |
195 | // ...WillOnce(IncrementArg1()); |
196 | // |
197 | // You can also refer to the entire argument tuple and its type by |
198 | // 'args' and 'args_type', and refer to the mock function type and its |
199 | // return type by 'function_type' and 'return_type'. |
200 | // |
201 | // Note that you don't need to specify the types of the mock function |
202 | // arguments. However rest assured that your code is still type-safe: |
203 | // you'll get a compiler error if *arg1 doesn't support the ++ |
204 | // operator, or if the type of ++(*arg1) isn't compatible with the |
205 | // mock function's return type, for example. |
206 | // |
207 | // Sometimes you'll want to parameterize the action. For that you can use |
208 | // another macro: |
209 | // |
210 | // ACTION_P(name, param_name) { statements; } |
211 | // |
212 | // For example: |
213 | // |
214 | // ACTION_P(Add, n) { return arg0 + n; } |
215 | // |
216 | // will allow you to write: |
217 | // |
218 | // ...WillOnce(Add(5)); |
219 | // |
220 | // Note that you don't need to provide the type of the parameter |
221 | // either. If you need to reference the type of a parameter named |
222 | // 'foo', you can write 'foo_type'. For example, in the body of |
223 | // ACTION_P(Add, n) above, you can write 'n_type' to refer to the type |
224 | // of 'n'. |
225 | // |
226 | // We also provide ACTION_P2, ACTION_P3, ..., up to ACTION_P10 to support |
227 | // multi-parameter actions. |
228 | // |
229 | // For the purpose of typing, you can view |
230 | // |
231 | // ACTION_Pk(Foo, p1, ..., pk) { ... } |
232 | // |
233 | // as shorthand for |
234 | // |
235 | // template <typename p1_type, ..., typename pk_type> |
236 | // FooActionPk<p1_type, ..., pk_type> Foo(p1_type p1, ..., pk_type pk) { ... } |
237 | // |
238 | // In particular, you can provide the template type arguments |
239 | // explicitly when invoking Foo(), as in Foo<long, bool>(5, false); |
240 | // although usually you can rely on the compiler to infer the types |
241 | // for you automatically. You can assign the result of expression |
242 | // Foo(p1, ..., pk) to a variable of type FooActionPk<p1_type, ..., |
243 | // pk_type>. This can be useful when composing actions. |
244 | // |
245 | // You can also overload actions with different numbers of parameters: |
246 | // |
247 | // ACTION_P(Plus, a) { ... } |
248 | // ACTION_P2(Plus, a, b) { ... } |
249 | // |
250 | // While it's tempting to always use the ACTION* macros when defining |
251 | // a new action, you should also consider implementing ActionInterface |
252 | // or using MakePolymorphicAction() instead, especially if you need to |
253 | // use the action a lot. While these approaches require more work, |
254 | // they give you more control on the types of the mock function |
255 | // arguments and the action parameters, which in general leads to |
256 | // better compiler error messages that pay off in the long run. They |
257 | // also allow overloading actions based on parameter types (as opposed |
258 | // to just based on the number of parameters). |
259 | // |
260 | // CAVEAT: |
261 | // |
262 | // ACTION*() can only be used in a namespace scope as templates cannot be |
263 | // declared inside of a local class. |
264 | // Users can, however, define any local functors (e.g. a lambda) that |
265 | // can be used as actions. |
266 | // |
267 | // MORE INFORMATION: |
268 | // |
269 | // To learn more about using these macros, please search for 'ACTION' on |
270 | // https://github.com/google/googletest/blob/master/googlemock/docs/cook_book.md |
271 | |
272 | // An internal macro needed for implementing ACTION*(). |
273 | #define GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_\ |
274 | const args_type& args GTEST_ATTRIBUTE_UNUSED_, \ |
275 | const arg0_type& arg0 GTEST_ATTRIBUTE_UNUSED_, \ |
276 | const arg1_type& arg1 GTEST_ATTRIBUTE_UNUSED_, \ |
277 | const arg2_type& arg2 GTEST_ATTRIBUTE_UNUSED_, \ |
278 | const arg3_type& arg3 GTEST_ATTRIBUTE_UNUSED_, \ |
279 | const arg4_type& arg4 GTEST_ATTRIBUTE_UNUSED_, \ |
280 | const arg5_type& arg5 GTEST_ATTRIBUTE_UNUSED_, \ |
281 | const arg6_type& arg6 GTEST_ATTRIBUTE_UNUSED_, \ |
282 | const arg7_type& arg7 GTEST_ATTRIBUTE_UNUSED_, \ |
283 | const arg8_type& arg8 GTEST_ATTRIBUTE_UNUSED_, \ |
284 | const arg9_type& arg9 GTEST_ATTRIBUTE_UNUSED_ |
285 | |
286 | // Sometimes you want to give an action explicit template parameters |
287 | // that cannot be inferred from its value parameters. ACTION() and |
288 | // ACTION_P*() don't support that. ACTION_TEMPLATE() remedies that |
289 | // and can be viewed as an extension to ACTION() and ACTION_P*(). |
290 | // |
291 | // The syntax: |
292 | // |
293 | // ACTION_TEMPLATE(ActionName, |
294 | // HAS_m_TEMPLATE_PARAMS(kind1, name1, ..., kind_m, name_m), |
295 | // AND_n_VALUE_PARAMS(p1, ..., p_n)) { statements; } |
296 | // |
297 | // defines an action template that takes m explicit template |
298 | // parameters and n value parameters. name_i is the name of the i-th |
299 | // template parameter, and kind_i specifies whether it's a typename, |
300 | // an integral constant, or a template. p_i is the name of the i-th |
301 | // value parameter. |
302 | // |
303 | // Example: |
304 | // |
305 | // // DuplicateArg<k, T>(output) converts the k-th argument of the mock |
306 | // // function to type T and copies it to *output. |
307 | // ACTION_TEMPLATE(DuplicateArg, |
308 | // HAS_2_TEMPLATE_PARAMS(int, k, typename, T), |
309 | // AND_1_VALUE_PARAMS(output)) { |
310 | // *output = T(::std::get<k>(args)); |
311 | // } |
312 | // ... |
313 | // int n; |
314 | // EXPECT_CALL(mock, Foo(_, _)) |
315 | // .WillOnce(DuplicateArg<1, unsigned char>(&n)); |
316 | // |
317 | // To create an instance of an action template, write: |
318 | // |
319 | // ActionName<t1, ..., t_m>(v1, ..., v_n) |
320 | // |
321 | // where the ts are the template arguments and the vs are the value |
322 | // arguments. The value argument types are inferred by the compiler. |
323 | // If you want to explicitly specify the value argument types, you can |
324 | // provide additional template arguments: |
325 | // |
326 | // ActionName<t1, ..., t_m, u1, ..., u_k>(v1, ..., v_n) |
327 | // |
328 | // where u_i is the desired type of v_i. |
329 | // |
330 | // ACTION_TEMPLATE and ACTION/ACTION_P* can be overloaded on the |
331 | // number of value parameters, but not on the number of template |
332 | // parameters. Without the restriction, the meaning of the following |
333 | // is unclear: |
334 | // |
335 | // OverloadedAction<int, bool>(x); |
336 | // |
337 | // Are we using a single-template-parameter action where 'bool' refers |
338 | // to the type of x, or are we using a two-template-parameter action |
339 | // where the compiler is asked to infer the type of x? |
340 | // |
341 | // Implementation notes: |
342 | // |
343 | // GMOCK_INTERNAL_*_HAS_m_TEMPLATE_PARAMS and |
344 | // GMOCK_INTERNAL_*_AND_n_VALUE_PARAMS are internal macros for |
345 | // implementing ACTION_TEMPLATE. The main trick we use is to create |
346 | // new macro invocations when expanding a macro. For example, we have |
347 | // |
348 | // #define ACTION_TEMPLATE(name, template_params, value_params) |
349 | // ... GMOCK_INTERNAL_DECL_##template_params ... |
350 | // |
351 | // which causes ACTION_TEMPLATE(..., HAS_1_TEMPLATE_PARAMS(typename, T), ...) |
352 | // to expand to |
353 | // |
354 | // ... GMOCK_INTERNAL_DECL_HAS_1_TEMPLATE_PARAMS(typename, T) ... |
355 | // |
356 | // Since GMOCK_INTERNAL_DECL_HAS_1_TEMPLATE_PARAMS is a macro, the |
357 | // preprocessor will continue to expand it to |
358 | // |
359 | // ... typename T ... |
360 | // |
361 | // This technique conforms to the C++ standard and is portable. It |
362 | // allows us to implement action templates using O(N) code, where N is |
363 | // the maximum number of template/value parameters supported. Without |
364 | // using it, we'd have to devote O(N^2) amount of code to implement all |
365 | // combinations of m and n. |
366 | |
367 | // Declares the template parameters. |
368 | #define GMOCK_INTERNAL_DECL_HAS_1_TEMPLATE_PARAMS(kind0, name0) kind0 name0 |
369 | #define GMOCK_INTERNAL_DECL_HAS_2_TEMPLATE_PARAMS(kind0, name0, kind1, \ |
370 | name1) kind0 name0, kind1 name1 |
371 | #define GMOCK_INTERNAL_DECL_HAS_3_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ |
372 | kind2, name2) kind0 name0, kind1 name1, kind2 name2 |
373 | #define GMOCK_INTERNAL_DECL_HAS_4_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ |
374 | kind2, name2, kind3, name3) kind0 name0, kind1 name1, kind2 name2, \ |
375 | kind3 name3 |
376 | #define GMOCK_INTERNAL_DECL_HAS_5_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ |
377 | kind2, name2, kind3, name3, kind4, name4) kind0 name0, kind1 name1, \ |
378 | kind2 name2, kind3 name3, kind4 name4 |
379 | #define GMOCK_INTERNAL_DECL_HAS_6_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ |
380 | kind2, name2, kind3, name3, kind4, name4, kind5, name5) kind0 name0, \ |
381 | kind1 name1, kind2 name2, kind3 name3, kind4 name4, kind5 name5 |
382 | #define GMOCK_INTERNAL_DECL_HAS_7_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ |
383 | kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, \ |
384 | name6) kind0 name0, kind1 name1, kind2 name2, kind3 name3, kind4 name4, \ |
385 | kind5 name5, kind6 name6 |
386 | #define GMOCK_INTERNAL_DECL_HAS_8_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ |
387 | kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, name6, \ |
388 | kind7, name7) kind0 name0, kind1 name1, kind2 name2, kind3 name3, \ |
389 | kind4 name4, kind5 name5, kind6 name6, kind7 name7 |
390 | #define GMOCK_INTERNAL_DECL_HAS_9_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ |
391 | kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, name6, \ |
392 | kind7, name7, kind8, name8) kind0 name0, kind1 name1, kind2 name2, \ |
393 | kind3 name3, kind4 name4, kind5 name5, kind6 name6, kind7 name7, \ |
394 | kind8 name8 |
395 | #define GMOCK_INTERNAL_DECL_HAS_10_TEMPLATE_PARAMS(kind0, name0, kind1, \ |
396 | name1, kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, \ |
397 | name6, kind7, name7, kind8, name8, kind9, name9) kind0 name0, \ |
398 | kind1 name1, kind2 name2, kind3 name3, kind4 name4, kind5 name5, \ |
399 | kind6 name6, kind7 name7, kind8 name8, kind9 name9 |
400 | |
401 | // Lists the template parameters. |
402 | #define GMOCK_INTERNAL_LIST_HAS_1_TEMPLATE_PARAMS(kind0, name0) name0 |
403 | #define GMOCK_INTERNAL_LIST_HAS_2_TEMPLATE_PARAMS(kind0, name0, kind1, \ |
404 | name1) name0, name1 |
405 | #define GMOCK_INTERNAL_LIST_HAS_3_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ |
406 | kind2, name2) name0, name1, name2 |
407 | #define GMOCK_INTERNAL_LIST_HAS_4_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ |
408 | kind2, name2, kind3, name3) name0, name1, name2, name3 |
409 | #define GMOCK_INTERNAL_LIST_HAS_5_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ |
410 | kind2, name2, kind3, name3, kind4, name4) name0, name1, name2, name3, \ |
411 | name4 |
412 | #define GMOCK_INTERNAL_LIST_HAS_6_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ |
413 | kind2, name2, kind3, name3, kind4, name4, kind5, name5) name0, name1, \ |
414 | name2, name3, name4, name5 |
415 | #define GMOCK_INTERNAL_LIST_HAS_7_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ |
416 | kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, \ |
417 | name6) name0, name1, name2, name3, name4, name5, name6 |
418 | #define GMOCK_INTERNAL_LIST_HAS_8_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ |
419 | kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, name6, \ |
420 | kind7, name7) name0, name1, name2, name3, name4, name5, name6, name7 |
421 | #define GMOCK_INTERNAL_LIST_HAS_9_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ |
422 | kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, name6, \ |
423 | kind7, name7, kind8, name8) name0, name1, name2, name3, name4, name5, \ |
424 | name6, name7, name8 |
425 | #define GMOCK_INTERNAL_LIST_HAS_10_TEMPLATE_PARAMS(kind0, name0, kind1, \ |
426 | name1, kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, \ |
427 | name6, kind7, name7, kind8, name8, kind9, name9) name0, name1, name2, \ |
428 | name3, name4, name5, name6, name7, name8, name9 |
429 | |
430 | // Declares the types of value parameters. |
431 | #define GMOCK_INTERNAL_DECL_TYPE_AND_0_VALUE_PARAMS() |
432 | #define GMOCK_INTERNAL_DECL_TYPE_AND_1_VALUE_PARAMS(p0) , typename p0##_type |
433 | #define GMOCK_INTERNAL_DECL_TYPE_AND_2_VALUE_PARAMS(p0, p1) , \ |
434 | typename p0##_type, typename p1##_type |
435 | #define GMOCK_INTERNAL_DECL_TYPE_AND_3_VALUE_PARAMS(p0, p1, p2) , \ |
436 | typename p0##_type, typename p1##_type, typename p2##_type |
437 | #define GMOCK_INTERNAL_DECL_TYPE_AND_4_VALUE_PARAMS(p0, p1, p2, p3) , \ |
438 | typename p0##_type, typename p1##_type, typename p2##_type, \ |
439 | typename p3##_type |
440 | #define GMOCK_INTERNAL_DECL_TYPE_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) , \ |
441 | typename p0##_type, typename p1##_type, typename p2##_type, \ |
442 | typename p3##_type, typename p4##_type |
443 | #define GMOCK_INTERNAL_DECL_TYPE_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) , \ |
444 | typename p0##_type, typename p1##_type, typename p2##_type, \ |
445 | typename p3##_type, typename p4##_type, typename p5##_type |
446 | #define GMOCK_INTERNAL_DECL_TYPE_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ |
447 | p6) , typename p0##_type, typename p1##_type, typename p2##_type, \ |
448 | typename p3##_type, typename p4##_type, typename p5##_type, \ |
449 | typename p6##_type |
450 | #define GMOCK_INTERNAL_DECL_TYPE_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ |
451 | p6, p7) , typename p0##_type, typename p1##_type, typename p2##_type, \ |
452 | typename p3##_type, typename p4##_type, typename p5##_type, \ |
453 | typename p6##_type, typename p7##_type |
454 | #define GMOCK_INTERNAL_DECL_TYPE_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ |
455 | p6, p7, p8) , typename p0##_type, typename p1##_type, typename p2##_type, \ |
456 | typename p3##_type, typename p4##_type, typename p5##_type, \ |
457 | typename p6##_type, typename p7##_type, typename p8##_type |
458 | #define GMOCK_INTERNAL_DECL_TYPE_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ |
459 | p6, p7, p8, p9) , typename p0##_type, typename p1##_type, \ |
460 | typename p2##_type, typename p3##_type, typename p4##_type, \ |
461 | typename p5##_type, typename p6##_type, typename p7##_type, \ |
462 | typename p8##_type, typename p9##_type |
463 | |
464 | // Initializes the value parameters. |
465 | #define GMOCK_INTERNAL_INIT_AND_0_VALUE_PARAMS()\ |
466 | () |
467 | #define GMOCK_INTERNAL_INIT_AND_1_VALUE_PARAMS(p0)\ |
468 | (p0##_type gmock_p0) : p0(::std::move(gmock_p0)) |
469 | #define GMOCK_INTERNAL_INIT_AND_2_VALUE_PARAMS(p0, p1)\ |
470 | (p0##_type gmock_p0, p1##_type gmock_p1) : p0(::std::move(gmock_p0)), \ |
471 | p1(::std::move(gmock_p1)) |
472 | #define GMOCK_INTERNAL_INIT_AND_3_VALUE_PARAMS(p0, p1, p2)\ |
473 | (p0##_type gmock_p0, p1##_type gmock_p1, \ |
474 | p2##_type gmock_p2) : p0(::std::move(gmock_p0)), \ |
475 | p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)) |
476 | #define GMOCK_INTERNAL_INIT_AND_4_VALUE_PARAMS(p0, p1, p2, p3)\ |
477 | (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ |
478 | p3##_type gmock_p3) : p0(::std::move(gmock_p0)), \ |
479 | p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \ |
480 | p3(::std::move(gmock_p3)) |
481 | #define GMOCK_INTERNAL_INIT_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4)\ |
482 | (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ |
483 | p3##_type gmock_p3, p4##_type gmock_p4) : p0(::std::move(gmock_p0)), \ |
484 | p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \ |
485 | p3(::std::move(gmock_p3)), p4(::std::move(gmock_p4)) |
486 | #define GMOCK_INTERNAL_INIT_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5)\ |
487 | (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ |
488 | p3##_type gmock_p3, p4##_type gmock_p4, \ |
489 | p5##_type gmock_p5) : p0(::std::move(gmock_p0)), \ |
490 | p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \ |
491 | p3(::std::move(gmock_p3)), p4(::std::move(gmock_p4)), \ |
492 | p5(::std::move(gmock_p5)) |
493 | #define GMOCK_INTERNAL_INIT_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6)\ |
494 | (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ |
495 | p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ |
496 | p6##_type gmock_p6) : p0(::std::move(gmock_p0)), \ |
497 | p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \ |
498 | p3(::std::move(gmock_p3)), p4(::std::move(gmock_p4)), \ |
499 | p5(::std::move(gmock_p5)), p6(::std::move(gmock_p6)) |
500 | #define GMOCK_INTERNAL_INIT_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7)\ |
501 | (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ |
502 | p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ |
503 | p6##_type gmock_p6, p7##_type gmock_p7) : p0(::std::move(gmock_p0)), \ |
504 | p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \ |
505 | p3(::std::move(gmock_p3)), p4(::std::move(gmock_p4)), \ |
506 | p5(::std::move(gmock_p5)), p6(::std::move(gmock_p6)), \ |
507 | p7(::std::move(gmock_p7)) |
508 | #define GMOCK_INTERNAL_INIT_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ |
509 | p7, p8)\ |
510 | (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ |
511 | p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ |
512 | p6##_type gmock_p6, p7##_type gmock_p7, \ |
513 | p8##_type gmock_p8) : p0(::std::move(gmock_p0)), \ |
514 | p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \ |
515 | p3(::std::move(gmock_p3)), p4(::std::move(gmock_p4)), \ |
516 | p5(::std::move(gmock_p5)), p6(::std::move(gmock_p6)), \ |
517 | p7(::std::move(gmock_p7)), p8(::std::move(gmock_p8)) |
518 | #define GMOCK_INTERNAL_INIT_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ |
519 | p7, p8, p9)\ |
520 | (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ |
521 | p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ |
522 | p6##_type gmock_p6, p7##_type gmock_p7, p8##_type gmock_p8, \ |
523 | p9##_type gmock_p9) : p0(::std::move(gmock_p0)), \ |
524 | p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \ |
525 | p3(::std::move(gmock_p3)), p4(::std::move(gmock_p4)), \ |
526 | p5(::std::move(gmock_p5)), p6(::std::move(gmock_p6)), \ |
527 | p7(::std::move(gmock_p7)), p8(::std::move(gmock_p8)), \ |
528 | p9(::std::move(gmock_p9)) |
529 | |
530 | // Declares the fields for storing the value parameters. |
531 | #define GMOCK_INTERNAL_DEFN_AND_0_VALUE_PARAMS() |
532 | #define GMOCK_INTERNAL_DEFN_AND_1_VALUE_PARAMS(p0) p0##_type p0; |
533 | #define GMOCK_INTERNAL_DEFN_AND_2_VALUE_PARAMS(p0, p1) p0##_type p0; \ |
534 | p1##_type p1; |
535 | #define GMOCK_INTERNAL_DEFN_AND_3_VALUE_PARAMS(p0, p1, p2) p0##_type p0; \ |
536 | p1##_type p1; p2##_type p2; |
537 | #define GMOCK_INTERNAL_DEFN_AND_4_VALUE_PARAMS(p0, p1, p2, p3) p0##_type p0; \ |
538 | p1##_type p1; p2##_type p2; p3##_type p3; |
539 | #define GMOCK_INTERNAL_DEFN_AND_5_VALUE_PARAMS(p0, p1, p2, p3, \ |
540 | p4) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; p4##_type p4; |
541 | #define GMOCK_INTERNAL_DEFN_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, \ |
542 | p5) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; p4##_type p4; \ |
543 | p5##_type p5; |
544 | #define GMOCK_INTERNAL_DEFN_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ |
545 | p6) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; p4##_type p4; \ |
546 | p5##_type p5; p6##_type p6; |
547 | #define GMOCK_INTERNAL_DEFN_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ |
548 | p7) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; p4##_type p4; \ |
549 | p5##_type p5; p6##_type p6; p7##_type p7; |
550 | #define GMOCK_INTERNAL_DEFN_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ |
551 | p7, p8) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; \ |
552 | p4##_type p4; p5##_type p5; p6##_type p6; p7##_type p7; p8##_type p8; |
553 | #define GMOCK_INTERNAL_DEFN_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ |
554 | p7, p8, p9) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; \ |
555 | p4##_type p4; p5##_type p5; p6##_type p6; p7##_type p7; p8##_type p8; \ |
556 | p9##_type p9; |
557 | |
558 | // Lists the value parameters. |
559 | #define GMOCK_INTERNAL_LIST_AND_0_VALUE_PARAMS() |
560 | #define GMOCK_INTERNAL_LIST_AND_1_VALUE_PARAMS(p0) p0 |
561 | #define GMOCK_INTERNAL_LIST_AND_2_VALUE_PARAMS(p0, p1) p0, p1 |
562 | #define GMOCK_INTERNAL_LIST_AND_3_VALUE_PARAMS(p0, p1, p2) p0, p1, p2 |
563 | #define GMOCK_INTERNAL_LIST_AND_4_VALUE_PARAMS(p0, p1, p2, p3) p0, p1, p2, p3 |
564 | #define GMOCK_INTERNAL_LIST_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) p0, p1, \ |
565 | p2, p3, p4 |
566 | #define GMOCK_INTERNAL_LIST_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) p0, \ |
567 | p1, p2, p3, p4, p5 |
568 | #define GMOCK_INTERNAL_LIST_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ |
569 | p6) p0, p1, p2, p3, p4, p5, p6 |
570 | #define GMOCK_INTERNAL_LIST_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ |
571 | p7) p0, p1, p2, p3, p4, p5, p6, p7 |
572 | #define GMOCK_INTERNAL_LIST_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ |
573 | p7, p8) p0, p1, p2, p3, p4, p5, p6, p7, p8 |
574 | #define GMOCK_INTERNAL_LIST_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ |
575 | p7, p8, p9) p0, p1, p2, p3, p4, p5, p6, p7, p8, p9 |
576 | |
577 | // Lists the value parameter types. |
578 | #define GMOCK_INTERNAL_LIST_TYPE_AND_0_VALUE_PARAMS() |
579 | #define GMOCK_INTERNAL_LIST_TYPE_AND_1_VALUE_PARAMS(p0) , p0##_type |
580 | #define GMOCK_INTERNAL_LIST_TYPE_AND_2_VALUE_PARAMS(p0, p1) , p0##_type, \ |
581 | p1##_type |
582 | #define GMOCK_INTERNAL_LIST_TYPE_AND_3_VALUE_PARAMS(p0, p1, p2) , p0##_type, \ |
583 | p1##_type, p2##_type |
584 | #define GMOCK_INTERNAL_LIST_TYPE_AND_4_VALUE_PARAMS(p0, p1, p2, p3) , \ |
585 | p0##_type, p1##_type, p2##_type, p3##_type |
586 | #define GMOCK_INTERNAL_LIST_TYPE_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) , \ |
587 | p0##_type, p1##_type, p2##_type, p3##_type, p4##_type |
588 | #define GMOCK_INTERNAL_LIST_TYPE_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) , \ |
589 | p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, p5##_type |
590 | #define GMOCK_INTERNAL_LIST_TYPE_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ |
591 | p6) , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, p5##_type, \ |
592 | p6##_type |
593 | #define GMOCK_INTERNAL_LIST_TYPE_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ |
594 | p6, p7) , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ |
595 | p5##_type, p6##_type, p7##_type |
596 | #define GMOCK_INTERNAL_LIST_TYPE_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ |
597 | p6, p7, p8) , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ |
598 | p5##_type, p6##_type, p7##_type, p8##_type |
599 | #define GMOCK_INTERNAL_LIST_TYPE_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ |
600 | p6, p7, p8, p9) , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ |
601 | p5##_type, p6##_type, p7##_type, p8##_type, p9##_type |
602 | |
603 | // Declares the value parameters. |
604 | #define GMOCK_INTERNAL_DECL_AND_0_VALUE_PARAMS() |
605 | #define GMOCK_INTERNAL_DECL_AND_1_VALUE_PARAMS(p0) p0##_type p0 |
606 | #define GMOCK_INTERNAL_DECL_AND_2_VALUE_PARAMS(p0, p1) p0##_type p0, \ |
607 | p1##_type p1 |
608 | #define GMOCK_INTERNAL_DECL_AND_3_VALUE_PARAMS(p0, p1, p2) p0##_type p0, \ |
609 | p1##_type p1, p2##_type p2 |
610 | #define GMOCK_INTERNAL_DECL_AND_4_VALUE_PARAMS(p0, p1, p2, p3) p0##_type p0, \ |
611 | p1##_type p1, p2##_type p2, p3##_type p3 |
612 | #define GMOCK_INTERNAL_DECL_AND_5_VALUE_PARAMS(p0, p1, p2, p3, \ |
613 | p4) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4 |
614 | #define GMOCK_INTERNAL_DECL_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, \ |
615 | p5) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, \ |
616 | p5##_type p5 |
617 | #define GMOCK_INTERNAL_DECL_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ |
618 | p6) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, \ |
619 | p5##_type p5, p6##_type p6 |
620 | #define GMOCK_INTERNAL_DECL_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ |
621 | p7) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, \ |
622 | p5##_type p5, p6##_type p6, p7##_type p7 |
623 | #define GMOCK_INTERNAL_DECL_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ |
624 | p7, p8) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ |
625 | p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, p8##_type p8 |
626 | #define GMOCK_INTERNAL_DECL_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ |
627 | p7, p8, p9) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ |
628 | p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, p8##_type p8, \ |
629 | p9##_type p9 |
630 | |
631 | // The suffix of the class template implementing the action template. |
632 | #define GMOCK_INTERNAL_COUNT_AND_0_VALUE_PARAMS() |
633 | #define GMOCK_INTERNAL_COUNT_AND_1_VALUE_PARAMS(p0) P |
634 | #define GMOCK_INTERNAL_COUNT_AND_2_VALUE_PARAMS(p0, p1) P2 |
635 | #define GMOCK_INTERNAL_COUNT_AND_3_VALUE_PARAMS(p0, p1, p2) P3 |
636 | #define GMOCK_INTERNAL_COUNT_AND_4_VALUE_PARAMS(p0, p1, p2, p3) P4 |
637 | #define GMOCK_INTERNAL_COUNT_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) P5 |
638 | #define GMOCK_INTERNAL_COUNT_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) P6 |
639 | #define GMOCK_INTERNAL_COUNT_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6) P7 |
640 | #define GMOCK_INTERNAL_COUNT_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ |
641 | p7) P8 |
642 | #define GMOCK_INTERNAL_COUNT_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ |
643 | p7, p8) P9 |
644 | #define GMOCK_INTERNAL_COUNT_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ |
645 | p7, p8, p9) P10 |
646 | |
647 | // The name of the class template implementing the action template. |
648 | #define GMOCK_ACTION_CLASS_(name, value_params)\ |
649 | GTEST_CONCAT_TOKEN_(name##Action, GMOCK_INTERNAL_COUNT_##value_params) |
650 | |
651 | #define ACTION_TEMPLATE(name, template_params, value_params)\ |
652 | template <GMOCK_INTERNAL_DECL_##template_params\ |
653 | GMOCK_INTERNAL_DECL_TYPE_##value_params>\ |
654 | class GMOCK_ACTION_CLASS_(name, value_params) {\ |
655 | public:\ |
656 | explicit GMOCK_ACTION_CLASS_(name, value_params)\ |
657 | GMOCK_INTERNAL_INIT_##value_params {}\ |
658 | template <typename F>\ |
659 | class gmock_Impl : public ::testing::ActionInterface<F> {\ |
660 | public:\ |
661 | typedef F function_type;\ |
662 | typedef typename ::testing::internal::Function<F>::Result return_type;\ |
663 | typedef typename ::testing::internal::Function<F>::ArgumentTuple\ |
664 | args_type;\ |
665 | explicit gmock_Impl GMOCK_INTERNAL_INIT_##value_params {}\ |
666 | virtual return_type Perform(const args_type& args) {\ |
667 | return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ |
668 | Perform(this, args);\ |
669 | }\ |
670 | template <typename arg0_type, typename arg1_type, typename arg2_type, \ |
671 | typename arg3_type, typename arg4_type, typename arg5_type, \ |
672 | typename arg6_type, typename arg7_type, typename arg8_type, \ |
673 | typename arg9_type>\ |
674 | return_type gmock_PerformImpl(const args_type& args, \ |
675 | const arg0_type& arg0, const arg1_type& arg1, \ |
676 | const arg2_type& arg2, const arg3_type& arg3, \ |
677 | const arg4_type& arg4, const arg5_type& arg5, \ |
678 | const arg6_type& arg6, const arg7_type& arg7, \ |
679 | const arg8_type& arg8, const arg9_type& arg9) const;\ |
680 | GMOCK_INTERNAL_DEFN_##value_params\ |
681 | private:\ |
682 | GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ |
683 | };\ |
684 | template <typename F> operator ::testing::Action<F>() const {\ |
685 | return ::testing::Action<F>(\ |
686 | new gmock_Impl<F>(GMOCK_INTERNAL_LIST_##value_params));\ |
687 | }\ |
688 | GMOCK_INTERNAL_DEFN_##value_params\ |
689 | private:\ |
690 | GTEST_DISALLOW_ASSIGN_(GMOCK_ACTION_CLASS_(name, value_params));\ |
691 | };\ |
692 | template <GMOCK_INTERNAL_DECL_##template_params\ |
693 | GMOCK_INTERNAL_DECL_TYPE_##value_params>\ |
694 | inline GMOCK_ACTION_CLASS_(name, value_params)<\ |
695 | GMOCK_INTERNAL_LIST_##template_params\ |
696 | GMOCK_INTERNAL_LIST_TYPE_##value_params> name(\ |
697 | GMOCK_INTERNAL_DECL_##value_params) {\ |
698 | return GMOCK_ACTION_CLASS_(name, value_params)<\ |
699 | GMOCK_INTERNAL_LIST_##template_params\ |
700 | GMOCK_INTERNAL_LIST_TYPE_##value_params>(\ |
701 | GMOCK_INTERNAL_LIST_##value_params);\ |
702 | }\ |
703 | template <GMOCK_INTERNAL_DECL_##template_params\ |
704 | GMOCK_INTERNAL_DECL_TYPE_##value_params>\ |
705 | template <typename F>\ |
706 | template <typename arg0_type, typename arg1_type, typename arg2_type, \ |
707 | typename arg3_type, typename arg4_type, typename arg5_type, \ |
708 | typename arg6_type, typename arg7_type, typename arg8_type, \ |
709 | typename arg9_type>\ |
710 | typename ::testing::internal::Function<F>::Result\ |
711 | GMOCK_ACTION_CLASS_(name, value_params)<\ |
712 | GMOCK_INTERNAL_LIST_##template_params\ |
713 | GMOCK_INTERNAL_LIST_TYPE_##value_params>::gmock_Impl<F>::\ |
714 | gmock_PerformImpl(\ |
715 | GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const |
716 | |
717 | #define ACTION(name)\ |
718 | class name##Action {\ |
719 | public:\ |
720 | name##Action() {}\ |
721 | template <typename F>\ |
722 | class gmock_Impl : public ::testing::ActionInterface<F> {\ |
723 | public:\ |
724 | typedef F function_type;\ |
725 | typedef typename ::testing::internal::Function<F>::Result return_type;\ |
726 | typedef typename ::testing::internal::Function<F>::ArgumentTuple\ |
727 | args_type;\ |
728 | gmock_Impl() {}\ |
729 | virtual return_type Perform(const args_type& args) {\ |
730 | return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ |
731 | Perform(this, args);\ |
732 | }\ |
733 | template <typename arg0_type, typename arg1_type, typename arg2_type, \ |
734 | typename arg3_type, typename arg4_type, typename arg5_type, \ |
735 | typename arg6_type, typename arg7_type, typename arg8_type, \ |
736 | typename arg9_type>\ |
737 | return_type gmock_PerformImpl(const args_type& args, \ |
738 | const arg0_type& arg0, const arg1_type& arg1, \ |
739 | const arg2_type& arg2, const arg3_type& arg3, \ |
740 | const arg4_type& arg4, const arg5_type& arg5, \ |
741 | const arg6_type& arg6, const arg7_type& arg7, \ |
742 | const arg8_type& arg8, const arg9_type& arg9) const;\ |
743 | private:\ |
744 | GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ |
745 | };\ |
746 | template <typename F> operator ::testing::Action<F>() const {\ |
747 | return ::testing::Action<F>(new gmock_Impl<F>());\ |
748 | }\ |
749 | private:\ |
750 | GTEST_DISALLOW_ASSIGN_(name##Action);\ |
751 | };\ |
752 | inline name##Action name() {\ |
753 | return name##Action();\ |
754 | }\ |
755 | template <typename F>\ |
756 | template <typename arg0_type, typename arg1_type, typename arg2_type, \ |
757 | typename arg3_type, typename arg4_type, typename arg5_type, \ |
758 | typename arg6_type, typename arg7_type, typename arg8_type, \ |
759 | typename arg9_type>\ |
760 | typename ::testing::internal::Function<F>::Result\ |
761 | name##Action::gmock_Impl<F>::gmock_PerformImpl(\ |
762 | GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const |
763 | |
764 | #define ACTION_P(name, p0)\ |
765 | template <typename p0##_type>\ |
766 | class name##ActionP {\ |
767 | public:\ |
768 | explicit name##ActionP(p0##_type gmock_p0) : \ |
769 | p0(::std::forward<p0##_type>(gmock_p0)) {}\ |
770 | template <typename F>\ |
771 | class gmock_Impl : public ::testing::ActionInterface<F> {\ |
772 | public:\ |
773 | typedef F function_type;\ |
774 | typedef typename ::testing::internal::Function<F>::Result return_type;\ |
775 | typedef typename ::testing::internal::Function<F>::ArgumentTuple\ |
776 | args_type;\ |
777 | explicit gmock_Impl(p0##_type gmock_p0) : \ |
778 | p0(::std::forward<p0##_type>(gmock_p0)) {}\ |
779 | virtual return_type Perform(const args_type& args) {\ |
780 | return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ |
781 | Perform(this, args);\ |
782 | }\ |
783 | template <typename arg0_type, typename arg1_type, typename arg2_type, \ |
784 | typename arg3_type, typename arg4_type, typename arg5_type, \ |
785 | typename arg6_type, typename arg7_type, typename arg8_type, \ |
786 | typename arg9_type>\ |
787 | return_type gmock_PerformImpl(const args_type& args, \ |
788 | const arg0_type& arg0, const arg1_type& arg1, \ |
789 | const arg2_type& arg2, const arg3_type& arg3, \ |
790 | const arg4_type& arg4, const arg5_type& arg5, \ |
791 | const arg6_type& arg6, const arg7_type& arg7, \ |
792 | const arg8_type& arg8, const arg9_type& arg9) const;\ |
793 | p0##_type p0;\ |
794 | private:\ |
795 | GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ |
796 | };\ |
797 | template <typename F> operator ::testing::Action<F>() const {\ |
798 | return ::testing::Action<F>(new gmock_Impl<F>(p0));\ |
799 | }\ |
800 | p0##_type p0;\ |
801 | private:\ |
802 | GTEST_DISALLOW_ASSIGN_(name##ActionP);\ |
803 | };\ |
804 | template <typename p0##_type>\ |
805 | inline name##ActionP<p0##_type> name(p0##_type p0) {\ |
806 | return name##ActionP<p0##_type>(p0);\ |
807 | }\ |
808 | template <typename p0##_type>\ |
809 | template <typename F>\ |
810 | template <typename arg0_type, typename arg1_type, typename arg2_type, \ |
811 | typename arg3_type, typename arg4_type, typename arg5_type, \ |
812 | typename arg6_type, typename arg7_type, typename arg8_type, \ |
813 | typename arg9_type>\ |
814 | typename ::testing::internal::Function<F>::Result\ |
815 | name##ActionP<p0##_type>::gmock_Impl<F>::gmock_PerformImpl(\ |
816 | GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const |
817 | |
818 | #define ACTION_P2(name, p0, p1)\ |
819 | template <typename p0##_type, typename p1##_type>\ |
820 | class name##ActionP2 {\ |
821 | public:\ |
822 | name##ActionP2(p0##_type gmock_p0, \ |
823 | p1##_type gmock_p1) : p0(::std::forward<p0##_type>(gmock_p0)), \ |
824 | p1(::std::forward<p1##_type>(gmock_p1)) {}\ |
825 | template <typename F>\ |
826 | class gmock_Impl : public ::testing::ActionInterface<F> {\ |
827 | public:\ |
828 | typedef F function_type;\ |
829 | typedef typename ::testing::internal::Function<F>::Result return_type;\ |
830 | typedef typename ::testing::internal::Function<F>::ArgumentTuple\ |
831 | args_type;\ |
832 | gmock_Impl(p0##_type gmock_p0, \ |
833 | p1##_type gmock_p1) : p0(::std::forward<p0##_type>(gmock_p0)), \ |
834 | p1(::std::forward<p1##_type>(gmock_p1)) {}\ |
835 | virtual return_type Perform(const args_type& args) {\ |
836 | return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ |
837 | Perform(this, args);\ |
838 | }\ |
839 | template <typename arg0_type, typename arg1_type, typename arg2_type, \ |
840 | typename arg3_type, typename arg4_type, typename arg5_type, \ |
841 | typename arg6_type, typename arg7_type, typename arg8_type, \ |
842 | typename arg9_type>\ |
843 | return_type gmock_PerformImpl(const args_type& args, \ |
844 | const arg0_type& arg0, const arg1_type& arg1, \ |
845 | const arg2_type& arg2, const arg3_type& arg3, \ |
846 | const arg4_type& arg4, const arg5_type& arg5, \ |
847 | const arg6_type& arg6, const arg7_type& arg7, \ |
848 | const arg8_type& arg8, const arg9_type& arg9) const;\ |
849 | p0##_type p0;\ |
850 | p1##_type p1;\ |
851 | private:\ |
852 | GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ |
853 | };\ |
854 | template <typename F> operator ::testing::Action<F>() const {\ |
855 | return ::testing::Action<F>(new gmock_Impl<F>(p0, p1));\ |
856 | }\ |
857 | p0##_type p0;\ |
858 | p1##_type p1;\ |
859 | private:\ |
860 | GTEST_DISALLOW_ASSIGN_(name##ActionP2);\ |
861 | };\ |
862 | template <typename p0##_type, typename p1##_type>\ |
863 | inline name##ActionP2<p0##_type, p1##_type> name(p0##_type p0, \ |
864 | p1##_type p1) {\ |
865 | return name##ActionP2<p0##_type, p1##_type>(p0, p1);\ |
866 | }\ |
867 | template <typename p0##_type, typename p1##_type>\ |
868 | template <typename F>\ |
869 | template <typename arg0_type, typename arg1_type, typename arg2_type, \ |
870 | typename arg3_type, typename arg4_type, typename arg5_type, \ |
871 | typename arg6_type, typename arg7_type, typename arg8_type, \ |
872 | typename arg9_type>\ |
873 | typename ::testing::internal::Function<F>::Result\ |
874 | name##ActionP2<p0##_type, p1##_type>::gmock_Impl<F>::gmock_PerformImpl(\ |
875 | GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const |
876 | |
877 | #define ACTION_P3(name, p0, p1, p2)\ |
878 | template <typename p0##_type, typename p1##_type, typename p2##_type>\ |
879 | class name##ActionP3 {\ |
880 | public:\ |
881 | name##ActionP3(p0##_type gmock_p0, p1##_type gmock_p1, \ |
882 | p2##_type gmock_p2) : p0(::std::forward<p0##_type>(gmock_p0)), \ |
883 | p1(::std::forward<p1##_type>(gmock_p1)), \ |
884 | p2(::std::forward<p2##_type>(gmock_p2)) {}\ |
885 | template <typename F>\ |
886 | class gmock_Impl : public ::testing::ActionInterface<F> {\ |
887 | public:\ |
888 | typedef F function_type;\ |
889 | typedef typename ::testing::internal::Function<F>::Result return_type;\ |
890 | typedef typename ::testing::internal::Function<F>::ArgumentTuple\ |
891 | args_type;\ |
892 | gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, \ |
893 | p2##_type gmock_p2) : p0(::std::forward<p0##_type>(gmock_p0)), \ |
894 | p1(::std::forward<p1##_type>(gmock_p1)), \ |
895 | p2(::std::forward<p2##_type>(gmock_p2)) {}\ |
896 | virtual return_type Perform(const args_type& args) {\ |
897 | return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ |
898 | Perform(this, args);\ |
899 | }\ |
900 | template <typename arg0_type, typename arg1_type, typename arg2_type, \ |
901 | typename arg3_type, typename arg4_type, typename arg5_type, \ |
902 | typename arg6_type, typename arg7_type, typename arg8_type, \ |
903 | typename arg9_type>\ |
904 | return_type gmock_PerformImpl(const args_type& args, \ |
905 | const arg0_type& arg0, const arg1_type& arg1, \ |
906 | const arg2_type& arg2, const arg3_type& arg3, \ |
907 | const arg4_type& arg4, const arg5_type& arg5, \ |
908 | const arg6_type& arg6, const arg7_type& arg7, \ |
909 | const arg8_type& arg8, const arg9_type& arg9) const;\ |
910 | p0##_type p0;\ |
911 | p1##_type p1;\ |
912 | p2##_type p2;\ |
913 | private:\ |
914 | GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ |
915 | };\ |
916 | template <typename F> operator ::testing::Action<F>() const {\ |
917 | return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2));\ |
918 | }\ |
919 | p0##_type p0;\ |
920 | p1##_type p1;\ |
921 | p2##_type p2;\ |
922 | private:\ |
923 | GTEST_DISALLOW_ASSIGN_(name##ActionP3);\ |
924 | };\ |
925 | template <typename p0##_type, typename p1##_type, typename p2##_type>\ |
926 | inline name##ActionP3<p0##_type, p1##_type, p2##_type> name(p0##_type p0, \ |
927 | p1##_type p1, p2##_type p2) {\ |
928 | return name##ActionP3<p0##_type, p1##_type, p2##_type>(p0, p1, p2);\ |
929 | }\ |
930 | template <typename p0##_type, typename p1##_type, typename p2##_type>\ |
931 | template <typename F>\ |
932 | template <typename arg0_type, typename arg1_type, typename arg2_type, \ |
933 | typename arg3_type, typename arg4_type, typename arg5_type, \ |
934 | typename arg6_type, typename arg7_type, typename arg8_type, \ |
935 | typename arg9_type>\ |
936 | typename ::testing::internal::Function<F>::Result\ |
937 | name##ActionP3<p0##_type, p1##_type, \ |
938 | p2##_type>::gmock_Impl<F>::gmock_PerformImpl(\ |
939 | GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const |
940 | |
941 | #define ACTION_P4(name, p0, p1, p2, p3)\ |
942 | template <typename p0##_type, typename p1##_type, typename p2##_type, \ |
943 | typename p3##_type>\ |
944 | class name##ActionP4 {\ |
945 | public:\ |
946 | name##ActionP4(p0##_type gmock_p0, p1##_type gmock_p1, \ |
947 | p2##_type gmock_p2, \ |
948 | p3##_type gmock_p3) : p0(::std::forward<p0##_type>(gmock_p0)), \ |
949 | p1(::std::forward<p1##_type>(gmock_p1)), \ |
950 | p2(::std::forward<p2##_type>(gmock_p2)), \ |
951 | p3(::std::forward<p3##_type>(gmock_p3)) {}\ |
952 | template <typename F>\ |
953 | class gmock_Impl : public ::testing::ActionInterface<F> {\ |
954 | public:\ |
955 | typedef F function_type;\ |
956 | typedef typename ::testing::internal::Function<F>::Result return_type;\ |
957 | typedef typename ::testing::internal::Function<F>::ArgumentTuple\ |
958 | args_type;\ |
959 | gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ |
960 | p3##_type gmock_p3) : p0(::std::forward<p0##_type>(gmock_p0)), \ |
961 | p1(::std::forward<p1##_type>(gmock_p1)), \ |
962 | p2(::std::forward<p2##_type>(gmock_p2)), \ |
963 | p3(::std::forward<p3##_type>(gmock_p3)) {}\ |
964 | virtual return_type Perform(const args_type& args) {\ |
965 | return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ |
966 | Perform(this, args);\ |
967 | }\ |
968 | template <typename arg0_type, typename arg1_type, typename arg2_type, \ |
969 | typename arg3_type, typename arg4_type, typename arg5_type, \ |
970 | typename arg6_type, typename arg7_type, typename arg8_type, \ |
971 | typename arg9_type>\ |
972 | return_type gmock_PerformImpl(const args_type& args, \ |
973 | const arg0_type& arg0, const arg1_type& arg1, \ |
974 | const arg2_type& arg2, const arg3_type& arg3, \ |
975 | const arg4_type& arg4, const arg5_type& arg5, \ |
976 | const arg6_type& arg6, const arg7_type& arg7, \ |
977 | const arg8_type& arg8, const arg9_type& arg9) const;\ |
978 | p0##_type p0;\ |
979 | p1##_type p1;\ |
980 | p2##_type p2;\ |
981 | p3##_type p3;\ |
982 | private:\ |
983 | GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ |
984 | };\ |
985 | template <typename F> operator ::testing::Action<F>() const {\ |
986 | return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3));\ |
987 | }\ |
988 | p0##_type p0;\ |
989 | p1##_type p1;\ |
990 | p2##_type p2;\ |
991 | p3##_type p3;\ |
992 | private:\ |
993 | GTEST_DISALLOW_ASSIGN_(name##ActionP4);\ |
994 | };\ |
995 | template <typename p0##_type, typename p1##_type, typename p2##_type, \ |
996 | typename p3##_type>\ |
997 | inline name##ActionP4<p0##_type, p1##_type, p2##_type, \ |
998 | p3##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, \ |
999 | p3##_type p3) {\ |
1000 | return name##ActionP4<p0##_type, p1##_type, p2##_type, p3##_type>(p0, p1, \ |
1001 | p2, p3);\ |
1002 | }\ |
1003 | template <typename p0##_type, typename p1##_type, typename p2##_type, \ |
1004 | typename p3##_type>\ |
1005 | template <typename F>\ |
1006 | template <typename arg0_type, typename arg1_type, typename arg2_type, \ |
1007 | typename arg3_type, typename arg4_type, typename arg5_type, \ |
1008 | typename arg6_type, typename arg7_type, typename arg8_type, \ |
1009 | typename arg9_type>\ |
1010 | typename ::testing::internal::Function<F>::Result\ |
1011 | name##ActionP4<p0##_type, p1##_type, p2##_type, \ |
1012 | p3##_type>::gmock_Impl<F>::gmock_PerformImpl(\ |
1013 | GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const |
1014 | |
1015 | #define ACTION_P5(name, p0, p1, p2, p3, p4)\ |
1016 | template <typename p0##_type, typename p1##_type, typename p2##_type, \ |
1017 | typename p3##_type, typename p4##_type>\ |
1018 | class name##ActionP5 {\ |
1019 | public:\ |
1020 | name##ActionP5(p0##_type gmock_p0, p1##_type gmock_p1, \ |
1021 | p2##_type gmock_p2, p3##_type gmock_p3, \ |
1022 | p4##_type gmock_p4) : p0(::std::forward<p0##_type>(gmock_p0)), \ |
1023 | p1(::std::forward<p1##_type>(gmock_p1)), \ |
1024 | p2(::std::forward<p2##_type>(gmock_p2)), \ |
1025 | p3(::std::forward<p3##_type>(gmock_p3)), \ |
1026 | p4(::std::forward<p4##_type>(gmock_p4)) {}\ |
1027 | template <typename F>\ |
1028 | class gmock_Impl : public ::testing::ActionInterface<F> {\ |
1029 | public:\ |
1030 | typedef F function_type;\ |
1031 | typedef typename ::testing::internal::Function<F>::Result return_type;\ |
1032 | typedef typename ::testing::internal::Function<F>::ArgumentTuple\ |
1033 | args_type;\ |
1034 | gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ |
1035 | p3##_type gmock_p3, \ |
1036 | p4##_type gmock_p4) : p0(::std::forward<p0##_type>(gmock_p0)), \ |
1037 | p1(::std::forward<p1##_type>(gmock_p1)), \ |
1038 | p2(::std::forward<p2##_type>(gmock_p2)), \ |
1039 | p3(::std::forward<p3##_type>(gmock_p3)), \ |
1040 | p4(::std::forward<p4##_type>(gmock_p4)) {}\ |
1041 | virtual return_type Perform(const args_type& args) {\ |
1042 | return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ |
1043 | Perform(this, args);\ |
1044 | }\ |
1045 | template <typename arg0_type, typename arg1_type, typename arg2_type, \ |
1046 | typename arg3_type, typename arg4_type, typename arg5_type, \ |
1047 | typename arg6_type, typename arg7_type, typename arg8_type, \ |
1048 | typename arg9_type>\ |
1049 | return_type gmock_PerformImpl(const args_type& args, \ |
1050 | const arg0_type& arg0, const arg1_type& arg1, \ |
1051 | const arg2_type& arg2, const arg3_type& arg3, \ |
1052 | const arg4_type& arg4, const arg5_type& arg5, \ |
1053 | const arg6_type& arg6, const arg7_type& arg7, \ |
1054 | const arg8_type& arg8, const arg9_type& arg9) const;\ |
1055 | p0##_type p0;\ |
1056 | p1##_type p1;\ |
1057 | p2##_type p2;\ |
1058 | p3##_type p3;\ |
1059 | p4##_type p4;\ |
1060 | private:\ |
1061 | GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ |
1062 | };\ |
1063 | template <typename F> operator ::testing::Action<F>() const {\ |
1064 | return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4));\ |
1065 | }\ |
1066 | p0##_type p0;\ |
1067 | p1##_type p1;\ |
1068 | p2##_type p2;\ |
1069 | p3##_type p3;\ |
1070 | p4##_type p4;\ |
1071 | private:\ |
1072 | GTEST_DISALLOW_ASSIGN_(name##ActionP5);\ |
1073 | };\ |
1074 | template <typename p0##_type, typename p1##_type, typename p2##_type, \ |
1075 | typename p3##_type, typename p4##_type>\ |
1076 | inline name##ActionP5<p0##_type, p1##_type, p2##_type, p3##_type, \ |
1077 | p4##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ |
1078 | p4##_type p4) {\ |
1079 | return name##ActionP5<p0##_type, p1##_type, p2##_type, p3##_type, \ |
1080 | p4##_type>(p0, p1, p2, p3, p4);\ |
1081 | }\ |
1082 | template <typename p0##_type, typename p1##_type, typename p2##_type, \ |
1083 | typename p3##_type, typename p4##_type>\ |
1084 | template <typename F>\ |
1085 | template <typename arg0_type, typename arg1_type, typename arg2_type, \ |
1086 | typename arg3_type, typename arg4_type, typename arg5_type, \ |
1087 | typename arg6_type, typename arg7_type, typename arg8_type, \ |
1088 | typename arg9_type>\ |
1089 | typename ::testing::internal::Function<F>::Result\ |
1090 | name##ActionP5<p0##_type, p1##_type, p2##_type, p3##_type, \ |
1091 | p4##_type>::gmock_Impl<F>::gmock_PerformImpl(\ |
1092 | GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const |
1093 | |
1094 | #define ACTION_P6(name, p0, p1, p2, p3, p4, p5)\ |
1095 | template <typename p0##_type, typename p1##_type, typename p2##_type, \ |
1096 | typename p3##_type, typename p4##_type, typename p5##_type>\ |
1097 | class name##ActionP6 {\ |
1098 | public:\ |
1099 | name##ActionP6(p0##_type gmock_p0, p1##_type gmock_p1, \ |
1100 | p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ |
1101 | p5##_type gmock_p5) : p0(::std::forward<p0##_type>(gmock_p0)), \ |
1102 | p1(::std::forward<p1##_type>(gmock_p1)), \ |
1103 | p2(::std::forward<p2##_type>(gmock_p2)), \ |
1104 | p3(::std::forward<p3##_type>(gmock_p3)), \ |
1105 | p4(::std::forward<p4##_type>(gmock_p4)), \ |
1106 | p5(::std::forward<p5##_type>(gmock_p5)) {}\ |
1107 | template <typename F>\ |
1108 | class gmock_Impl : public ::testing::ActionInterface<F> {\ |
1109 | public:\ |
1110 | typedef F function_type;\ |
1111 | typedef typename ::testing::internal::Function<F>::Result return_type;\ |
1112 | typedef typename ::testing::internal::Function<F>::ArgumentTuple\ |
1113 | args_type;\ |
1114 | gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ |
1115 | p3##_type gmock_p3, p4##_type gmock_p4, \ |
1116 | p5##_type gmock_p5) : p0(::std::forward<p0##_type>(gmock_p0)), \ |
1117 | p1(::std::forward<p1##_type>(gmock_p1)), \ |
1118 | p2(::std::forward<p2##_type>(gmock_p2)), \ |
1119 | p3(::std::forward<p3##_type>(gmock_p3)), \ |
1120 | p4(::std::forward<p4##_type>(gmock_p4)), \ |
1121 | p5(::std::forward<p5##_type>(gmock_p5)) {}\ |
1122 | virtual return_type Perform(const args_type& args) {\ |
1123 | return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ |
1124 | Perform(this, args);\ |
1125 | }\ |
1126 | template <typename arg0_type, typename arg1_type, typename arg2_type, \ |
1127 | typename arg3_type, typename arg4_type, typename arg5_type, \ |
1128 | typename arg6_type, typename arg7_type, typename arg8_type, \ |
1129 | typename arg9_type>\ |
1130 | return_type gmock_PerformImpl(const args_type& args, \ |
1131 | const arg0_type& arg0, const arg1_type& arg1, \ |
1132 | const arg2_type& arg2, const arg3_type& arg3, \ |
1133 | const arg4_type& arg4, const arg5_type& arg5, \ |
1134 | const arg6_type& arg6, const arg7_type& arg7, \ |
1135 | const arg8_type& arg8, const arg9_type& arg9) const;\ |
1136 | p0##_type p0;\ |
1137 | p1##_type p1;\ |
1138 | p2##_type p2;\ |
1139 | p3##_type p3;\ |
1140 | p4##_type p4;\ |
1141 | p5##_type p5;\ |
1142 | private:\ |
1143 | GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ |
1144 | };\ |
1145 | template <typename F> operator ::testing::Action<F>() const {\ |
1146 | return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4, p5));\ |
1147 | }\ |
1148 | p0##_type p0;\ |
1149 | p1##_type p1;\ |
1150 | p2##_type p2;\ |
1151 | p3##_type p3;\ |
1152 | p4##_type p4;\ |
1153 | p5##_type p5;\ |
1154 | private:\ |
1155 | GTEST_DISALLOW_ASSIGN_(name##ActionP6);\ |
1156 | };\ |
1157 | template <typename p0##_type, typename p1##_type, typename p2##_type, \ |
1158 | typename p3##_type, typename p4##_type, typename p5##_type>\ |
1159 | inline name##ActionP6<p0##_type, p1##_type, p2##_type, p3##_type, \ |
1160 | p4##_type, p5##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, \ |
1161 | p3##_type p3, p4##_type p4, p5##_type p5) {\ |
1162 | return name##ActionP6<p0##_type, p1##_type, p2##_type, p3##_type, \ |
1163 | p4##_type, p5##_type>(p0, p1, p2, p3, p4, p5);\ |
1164 | }\ |
1165 | template <typename p0##_type, typename p1##_type, typename p2##_type, \ |
1166 | typename p3##_type, typename p4##_type, typename p5##_type>\ |
1167 | template <typename F>\ |
1168 | template <typename arg0_type, typename arg1_type, typename arg2_type, \ |
1169 | typename arg3_type, typename arg4_type, typename arg5_type, \ |
1170 | typename arg6_type, typename arg7_type, typename arg8_type, \ |
1171 | typename arg9_type>\ |
1172 | typename ::testing::internal::Function<F>::Result\ |
1173 | name##ActionP6<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ |
1174 | p5##_type>::gmock_Impl<F>::gmock_PerformImpl(\ |
1175 | GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const |
1176 | |
1177 | #define ACTION_P7(name, p0, p1, p2, p3, p4, p5, p6)\ |
1178 | template <typename p0##_type, typename p1##_type, typename p2##_type, \ |
1179 | typename p3##_type, typename p4##_type, typename p5##_type, \ |
1180 | typename p6##_type>\ |
1181 | class name##ActionP7 {\ |
1182 | public:\ |
1183 | name##ActionP7(p0##_type gmock_p0, p1##_type gmock_p1, \ |
1184 | p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ |
1185 | p5##_type gmock_p5, \ |
1186 | p6##_type gmock_p6) : p0(::std::forward<p0##_type>(gmock_p0)), \ |
1187 | p1(::std::forward<p1##_type>(gmock_p1)), \ |
1188 | p2(::std::forward<p2##_type>(gmock_p2)), \ |
1189 | p3(::std::forward<p3##_type>(gmock_p3)), \ |
1190 | p4(::std::forward<p4##_type>(gmock_p4)), \ |
1191 | p5(::std::forward<p5##_type>(gmock_p5)), \ |
1192 | p6(::std::forward<p6##_type>(gmock_p6)) {}\ |
1193 | template <typename F>\ |
1194 | class gmock_Impl : public ::testing::ActionInterface<F> {\ |
1195 | public:\ |
1196 | typedef F function_type;\ |
1197 | typedef typename ::testing::internal::Function<F>::Result return_type;\ |
1198 | typedef typename ::testing::internal::Function<F>::ArgumentTuple\ |
1199 | args_type;\ |
1200 | gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ |
1201 | p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ |
1202 | p6##_type gmock_p6) : p0(::std::forward<p0##_type>(gmock_p0)), \ |
1203 | p1(::std::forward<p1##_type>(gmock_p1)), \ |
1204 | p2(::std::forward<p2##_type>(gmock_p2)), \ |
1205 | p3(::std::forward<p3##_type>(gmock_p3)), \ |
1206 | p4(::std::forward<p4##_type>(gmock_p4)), \ |
1207 | p5(::std::forward<p5##_type>(gmock_p5)), \ |
1208 | p6(::std::forward<p6##_type>(gmock_p6)) {}\ |
1209 | virtual return_type Perform(const args_type& args) {\ |
1210 | return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ |
1211 | Perform(this, args);\ |
1212 | }\ |
1213 | template <typename arg0_type, typename arg1_type, typename arg2_type, \ |
1214 | typename arg3_type, typename arg4_type, typename arg5_type, \ |
1215 | typename arg6_type, typename arg7_type, typename arg8_type, \ |
1216 | typename arg9_type>\ |
1217 | return_type gmock_PerformImpl(const args_type& args, \ |
1218 | const arg0_type& arg0, const arg1_type& arg1, \ |
1219 | const arg2_type& arg2, const arg3_type& arg3, \ |
1220 | const arg4_type& arg4, const arg5_type& arg5, \ |
1221 | const arg6_type& arg6, const arg7_type& arg7, \ |
1222 | const arg8_type& arg8, const arg9_type& arg9) const;\ |
1223 | p0##_type p0;\ |
1224 | p1##_type p1;\ |
1225 | p2##_type p2;\ |
1226 | p3##_type p3;\ |
1227 | p4##_type p4;\ |
1228 | p5##_type p5;\ |
1229 | p6##_type p6;\ |
1230 | private:\ |
1231 | GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ |
1232 | };\ |
1233 | template <typename F> operator ::testing::Action<F>() const {\ |
1234 | return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4, p5, \ |
1235 | p6));\ |
1236 | }\ |
1237 | p0##_type p0;\ |
1238 | p1##_type p1;\ |
1239 | p2##_type p2;\ |
1240 | p3##_type p3;\ |
1241 | p4##_type p4;\ |
1242 | p5##_type p5;\ |
1243 | p6##_type p6;\ |
1244 | private:\ |
1245 | GTEST_DISALLOW_ASSIGN_(name##ActionP7);\ |
1246 | };\ |
1247 | template <typename p0##_type, typename p1##_type, typename p2##_type, \ |
1248 | typename p3##_type, typename p4##_type, typename p5##_type, \ |
1249 | typename p6##_type>\ |
1250 | inline name##ActionP7<p0##_type, p1##_type, p2##_type, p3##_type, \ |
1251 | p4##_type, p5##_type, p6##_type> name(p0##_type p0, p1##_type p1, \ |
1252 | p2##_type p2, p3##_type p3, p4##_type p4, p5##_type p5, \ |
1253 | p6##_type p6) {\ |
1254 | return name##ActionP7<p0##_type, p1##_type, p2##_type, p3##_type, \ |
1255 | p4##_type, p5##_type, p6##_type>(p0, p1, p2, p3, p4, p5, p6);\ |
1256 | }\ |
1257 | template <typename p0##_type, typename p1##_type, typename p2##_type, \ |
1258 | typename p3##_type, typename p4##_type, typename p5##_type, \ |
1259 | typename p6##_type>\ |
1260 | template <typename F>\ |
1261 | template <typename arg0_type, typename arg1_type, typename arg2_type, \ |
1262 | typename arg3_type, typename arg4_type, typename arg5_type, \ |
1263 | typename arg6_type, typename arg7_type, typename arg8_type, \ |
1264 | typename arg9_type>\ |
1265 | typename ::testing::internal::Function<F>::Result\ |
1266 | name##ActionP7<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ |
1267 | p5##_type, p6##_type>::gmock_Impl<F>::gmock_PerformImpl(\ |
1268 | GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const |
1269 | |
1270 | #define ACTION_P8(name, p0, p1, p2, p3, p4, p5, p6, p7)\ |
1271 | template <typename p0##_type, typename p1##_type, typename p2##_type, \ |
1272 | typename p3##_type, typename p4##_type, typename p5##_type, \ |
1273 | typename p6##_type, typename p7##_type>\ |
1274 | class name##ActionP8 {\ |
1275 | public:\ |
1276 | name##ActionP8(p0##_type gmock_p0, p1##_type gmock_p1, \ |
1277 | p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ |
1278 | p5##_type gmock_p5, p6##_type gmock_p6, \ |
1279 | p7##_type gmock_p7) : p0(::std::forward<p0##_type>(gmock_p0)), \ |
1280 | p1(::std::forward<p1##_type>(gmock_p1)), \ |
1281 | p2(::std::forward<p2##_type>(gmock_p2)), \ |
1282 | p3(::std::forward<p3##_type>(gmock_p3)), \ |
1283 | p4(::std::forward<p4##_type>(gmock_p4)), \ |
1284 | p5(::std::forward<p5##_type>(gmock_p5)), \ |
1285 | p6(::std::forward<p6##_type>(gmock_p6)), \ |
1286 | p7(::std::forward<p7##_type>(gmock_p7)) {}\ |
1287 | template <typename F>\ |
1288 | class gmock_Impl : public ::testing::ActionInterface<F> {\ |
1289 | public:\ |
1290 | typedef F function_type;\ |
1291 | typedef typename ::testing::internal::Function<F>::Result return_type;\ |
1292 | typedef typename ::testing::internal::Function<F>::ArgumentTuple\ |
1293 | args_type;\ |
1294 | gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ |
1295 | p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ |
1296 | p6##_type gmock_p6, \ |
1297 | p7##_type gmock_p7) : p0(::std::forward<p0##_type>(gmock_p0)), \ |
1298 | p1(::std::forward<p1##_type>(gmock_p1)), \ |
1299 | p2(::std::forward<p2##_type>(gmock_p2)), \ |
1300 | p3(::std::forward<p3##_type>(gmock_p3)), \ |
1301 | p4(::std::forward<p4##_type>(gmock_p4)), \ |
1302 | p5(::std::forward<p5##_type>(gmock_p5)), \ |
1303 | p6(::std::forward<p6##_type>(gmock_p6)), \ |
1304 | p7(::std::forward<p7##_type>(gmock_p7)) {}\ |
1305 | virtual return_type Perform(const args_type& args) {\ |
1306 | return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ |
1307 | Perform(this, args);\ |
1308 | }\ |
1309 | template <typename arg0_type, typename arg1_type, typename arg2_type, \ |
1310 | typename arg3_type, typename arg4_type, typename arg5_type, \ |
1311 | typename arg6_type, typename arg7_type, typename arg8_type, \ |
1312 | typename arg9_type>\ |
1313 | return_type gmock_PerformImpl(const args_type& args, \ |
1314 | const arg0_type& arg0, const arg1_type& arg1, \ |
1315 | const arg2_type& arg2, const arg3_type& arg3, \ |
1316 | const arg4_type& arg4, const arg5_type& arg5, \ |
1317 | const arg6_type& arg6, const arg7_type& arg7, \ |
1318 | const arg8_type& arg8, const arg9_type& arg9) const;\ |
1319 | p0##_type p0;\ |
1320 | p1##_type p1;\ |
1321 | p2##_type p2;\ |
1322 | p3##_type p3;\ |
1323 | p4##_type p4;\ |
1324 | p5##_type p5;\ |
1325 | p6##_type p6;\ |
1326 | p7##_type p7;\ |
1327 | private:\ |
1328 | GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ |
1329 | };\ |
1330 | template <typename F> operator ::testing::Action<F>() const {\ |
1331 | return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4, p5, \ |
1332 | p6, p7));\ |
1333 | }\ |
1334 | p0##_type p0;\ |
1335 | p1##_type p1;\ |
1336 | p2##_type p2;\ |
1337 | p3##_type p3;\ |
1338 | p4##_type p4;\ |
1339 | p5##_type p5;\ |
1340 | p6##_type p6;\ |
1341 | p7##_type p7;\ |
1342 | private:\ |
1343 | GTEST_DISALLOW_ASSIGN_(name##ActionP8);\ |
1344 | };\ |
1345 | template <typename p0##_type, typename p1##_type, typename p2##_type, \ |
1346 | typename p3##_type, typename p4##_type, typename p5##_type, \ |
1347 | typename p6##_type, typename p7##_type>\ |
1348 | inline name##ActionP8<p0##_type, p1##_type, p2##_type, p3##_type, \ |
1349 | p4##_type, p5##_type, p6##_type, p7##_type> name(p0##_type p0, \ |
1350 | p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, p5##_type p5, \ |
1351 | p6##_type p6, p7##_type p7) {\ |
1352 | return name##ActionP8<p0##_type, p1##_type, p2##_type, p3##_type, \ |
1353 | p4##_type, p5##_type, p6##_type, p7##_type>(p0, p1, p2, p3, p4, p5, \ |
1354 | p6, p7);\ |
1355 | }\ |
1356 | template <typename p0##_type, typename p1##_type, typename p2##_type, \ |
1357 | typename p3##_type, typename p4##_type, typename p5##_type, \ |
1358 | typename p6##_type, typename p7##_type>\ |
1359 | template <typename F>\ |
1360 | template <typename arg0_type, typename arg1_type, typename arg2_type, \ |
1361 | typename arg3_type, typename arg4_type, typename arg5_type, \ |
1362 | typename arg6_type, typename arg7_type, typename arg8_type, \ |
1363 | typename arg9_type>\ |
1364 | typename ::testing::internal::Function<F>::Result\ |
1365 | name##ActionP8<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ |
1366 | p5##_type, p6##_type, \ |
1367 | p7##_type>::gmock_Impl<F>::gmock_PerformImpl(\ |
1368 | GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const |
1369 | |
1370 | #define ACTION_P9(name, p0, p1, p2, p3, p4, p5, p6, p7, p8)\ |
1371 | template <typename p0##_type, typename p1##_type, typename p2##_type, \ |
1372 | typename p3##_type, typename p4##_type, typename p5##_type, \ |
1373 | typename p6##_type, typename p7##_type, typename p8##_type>\ |
1374 | class name##ActionP9 {\ |
1375 | public:\ |
1376 | name##ActionP9(p0##_type gmock_p0, p1##_type gmock_p1, \ |
1377 | p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ |
1378 | p5##_type gmock_p5, p6##_type gmock_p6, p7##_type gmock_p7, \ |
1379 | p8##_type gmock_p8) : p0(::std::forward<p0##_type>(gmock_p0)), \ |
1380 | p1(::std::forward<p1##_type>(gmock_p1)), \ |
1381 | p2(::std::forward<p2##_type>(gmock_p2)), \ |
1382 | p3(::std::forward<p3##_type>(gmock_p3)), \ |
1383 | p4(::std::forward<p4##_type>(gmock_p4)), \ |
1384 | p5(::std::forward<p5##_type>(gmock_p5)), \ |
1385 | p6(::std::forward<p6##_type>(gmock_p6)), \ |
1386 | p7(::std::forward<p7##_type>(gmock_p7)), \ |
1387 | p8(::std::forward<p8##_type>(gmock_p8)) {}\ |
1388 | template <typename F>\ |
1389 | class gmock_Impl : public ::testing::ActionInterface<F> {\ |
1390 | public:\ |
1391 | typedef F function_type;\ |
1392 | typedef typename ::testing::internal::Function<F>::Result return_type;\ |
1393 | typedef typename ::testing::internal::Function<F>::ArgumentTuple\ |
1394 | args_type;\ |
1395 | gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ |
1396 | p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ |
1397 | p6##_type gmock_p6, p7##_type gmock_p7, \ |
1398 | p8##_type gmock_p8) : p0(::std::forward<p0##_type>(gmock_p0)), \ |
1399 | p1(::std::forward<p1##_type>(gmock_p1)), \ |
1400 | p2(::std::forward<p2##_type>(gmock_p2)), \ |
1401 | p3(::std::forward<p3##_type>(gmock_p3)), \ |
1402 | p4(::std::forward<p4##_type>(gmock_p4)), \ |
1403 | p5(::std::forward<p5##_type>(gmock_p5)), \ |
1404 | p6(::std::forward<p6##_type>(gmock_p6)), \ |
1405 | p7(::std::forward<p7##_type>(gmock_p7)), \ |
1406 | p8(::std::forward<p8##_type>(gmock_p8)) {}\ |
1407 | virtual return_type Perform(const args_type& args) {\ |
1408 | return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ |
1409 | Perform(this, args);\ |
1410 | }\ |
1411 | template <typename arg0_type, typename arg1_type, typename arg2_type, \ |
1412 | typename arg3_type, typename arg4_type, typename arg5_type, \ |
1413 | typename arg6_type, typename arg7_type, typename arg8_type, \ |
1414 | typename arg9_type>\ |
1415 | return_type gmock_PerformImpl(const args_type& args, \ |
1416 | const arg0_type& arg0, const arg1_type& arg1, \ |
1417 | const arg2_type& arg2, const arg3_type& arg3, \ |
1418 | const arg4_type& arg4, const arg5_type& arg5, \ |
1419 | const arg6_type& arg6, const arg7_type& arg7, \ |
1420 | const arg8_type& arg8, const arg9_type& arg9) const;\ |
1421 | p0##_type p0;\ |
1422 | p1##_type p1;\ |
1423 | p2##_type p2;\ |
1424 | p3##_type p3;\ |
1425 | p4##_type p4;\ |
1426 | p5##_type p5;\ |
1427 | p6##_type p6;\ |
1428 | p7##_type p7;\ |
1429 | p8##_type p8;\ |
1430 | private:\ |
1431 | GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ |
1432 | };\ |
1433 | template <typename F> operator ::testing::Action<F>() const {\ |
1434 | return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4, p5, \ |
1435 | p6, p7, p8));\ |
1436 | }\ |
1437 | p0##_type p0;\ |
1438 | p1##_type p1;\ |
1439 | p2##_type p2;\ |
1440 | p3##_type p3;\ |
1441 | p4##_type p4;\ |
1442 | p5##_type p5;\ |
1443 | p6##_type p6;\ |
1444 | p7##_type p7;\ |
1445 | p8##_type p8;\ |
1446 | private:\ |
1447 | GTEST_DISALLOW_ASSIGN_(name##ActionP9);\ |
1448 | };\ |
1449 | template <typename p0##_type, typename p1##_type, typename p2##_type, \ |
1450 | typename p3##_type, typename p4##_type, typename p5##_type, \ |
1451 | typename p6##_type, typename p7##_type, typename p8##_type>\ |
1452 | inline name##ActionP9<p0##_type, p1##_type, p2##_type, p3##_type, \ |
1453 | p4##_type, p5##_type, p6##_type, p7##_type, \ |
1454 | p8##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ |
1455 | p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, \ |
1456 | p8##_type p8) {\ |
1457 | return name##ActionP9<p0##_type, p1##_type, p2##_type, p3##_type, \ |
1458 | p4##_type, p5##_type, p6##_type, p7##_type, p8##_type>(p0, p1, p2, \ |
1459 | p3, p4, p5, p6, p7, p8);\ |
1460 | }\ |
1461 | template <typename p0##_type, typename p1##_type, typename p2##_type, \ |
1462 | typename p3##_type, typename p4##_type, typename p5##_type, \ |
1463 | typename p6##_type, typename p7##_type, typename p8##_type>\ |
1464 | template <typename F>\ |
1465 | template <typename arg0_type, typename arg1_type, typename arg2_type, \ |
1466 | typename arg3_type, typename arg4_type, typename arg5_type, \ |
1467 | typename arg6_type, typename arg7_type, typename arg8_type, \ |
1468 | typename arg9_type>\ |
1469 | typename ::testing::internal::Function<F>::Result\ |
1470 | name##ActionP9<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ |
1471 | p5##_type, p6##_type, p7##_type, \ |
1472 | p8##_type>::gmock_Impl<F>::gmock_PerformImpl(\ |
1473 | GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const |
1474 | |
1475 | #define ACTION_P10(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)\ |
1476 | template <typename p0##_type, typename p1##_type, typename p2##_type, \ |
1477 | typename p3##_type, typename p4##_type, typename p5##_type, \ |
1478 | typename p6##_type, typename p7##_type, typename p8##_type, \ |
1479 | typename p9##_type>\ |
1480 | class name##ActionP10 {\ |
1481 | public:\ |
1482 | name##ActionP10(p0##_type gmock_p0, p1##_type gmock_p1, \ |
1483 | p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ |
1484 | p5##_type gmock_p5, p6##_type gmock_p6, p7##_type gmock_p7, \ |
1485 | p8##_type gmock_p8, \ |
1486 | p9##_type gmock_p9) : p0(::std::forward<p0##_type>(gmock_p0)), \ |
1487 | p1(::std::forward<p1##_type>(gmock_p1)), \ |
1488 | p2(::std::forward<p2##_type>(gmock_p2)), \ |
1489 | p3(::std::forward<p3##_type>(gmock_p3)), \ |
1490 | p4(::std::forward<p4##_type>(gmock_p4)), \ |
1491 | p5(::std::forward<p5##_type>(gmock_p5)), \ |
1492 | p6(::std::forward<p6##_type>(gmock_p6)), \ |
1493 | p7(::std::forward<p7##_type>(gmock_p7)), \ |
1494 | p8(::std::forward<p8##_type>(gmock_p8)), \ |
1495 | p9(::std::forward<p9##_type>(gmock_p9)) {}\ |
1496 | template <typename F>\ |
1497 | class gmock_Impl : public ::testing::ActionInterface<F> {\ |
1498 | public:\ |
1499 | typedef F function_type;\ |
1500 | typedef typename ::testing::internal::Function<F>::Result return_type;\ |
1501 | typedef typename ::testing::internal::Function<F>::ArgumentTuple\ |
1502 | args_type;\ |
1503 | gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ |
1504 | p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ |
1505 | p6##_type gmock_p6, p7##_type gmock_p7, p8##_type gmock_p8, \ |
1506 | p9##_type gmock_p9) : p0(::std::forward<p0##_type>(gmock_p0)), \ |
1507 | p1(::std::forward<p1##_type>(gmock_p1)), \ |
1508 | p2(::std::forward<p2##_type>(gmock_p2)), \ |
1509 | p3(::std::forward<p3##_type>(gmock_p3)), \ |
1510 | p4(::std::forward<p4##_type>(gmock_p4)), \ |
1511 | p5(::std::forward<p5##_type>(gmock_p5)), \ |
1512 | p6(::std::forward<p6##_type>(gmock_p6)), \ |
1513 | p7(::std::forward<p7##_type>(gmock_p7)), \ |
1514 | p8(::std::forward<p8##_type>(gmock_p8)), \ |
1515 | p9(::std::forward<p9##_type>(gmock_p9)) {}\ |
1516 | virtual return_type Perform(const args_type& args) {\ |
1517 | return ::testing::internal::ActionHelper<return_type, gmock_Impl>::\ |
1518 | Perform(this, args);\ |
1519 | }\ |
1520 | template <typename arg0_type, typename arg1_type, typename arg2_type, \ |
1521 | typename arg3_type, typename arg4_type, typename arg5_type, \ |
1522 | typename arg6_type, typename arg7_type, typename arg8_type, \ |
1523 | typename arg9_type>\ |
1524 | return_type gmock_PerformImpl(const args_type& args, \ |
1525 | const arg0_type& arg0, const arg1_type& arg1, \ |
1526 | const arg2_type& arg2, const arg3_type& arg3, \ |
1527 | const arg4_type& arg4, const arg5_type& arg5, \ |
1528 | const arg6_type& arg6, const arg7_type& arg7, \ |
1529 | const arg8_type& arg8, const arg9_type& arg9) const;\ |
1530 | p0##_type p0;\ |
1531 | p1##_type p1;\ |
1532 | p2##_type p2;\ |
1533 | p3##_type p3;\ |
1534 | p4##_type p4;\ |
1535 | p5##_type p5;\ |
1536 | p6##_type p6;\ |
1537 | p7##_type p7;\ |
1538 | p8##_type p8;\ |
1539 | p9##_type p9;\ |
1540 | private:\ |
1541 | GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ |
1542 | };\ |
1543 | template <typename F> operator ::testing::Action<F>() const {\ |
1544 | return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4, p5, \ |
1545 | p6, p7, p8, p9));\ |
1546 | }\ |
1547 | p0##_type p0;\ |
1548 | p1##_type p1;\ |
1549 | p2##_type p2;\ |
1550 | p3##_type p3;\ |
1551 | p4##_type p4;\ |
1552 | p5##_type p5;\ |
1553 | p6##_type p6;\ |
1554 | p7##_type p7;\ |
1555 | p8##_type p8;\ |
1556 | p9##_type p9;\ |
1557 | private:\ |
1558 | GTEST_DISALLOW_ASSIGN_(name##ActionP10);\ |
1559 | };\ |
1560 | template <typename p0##_type, typename p1##_type, typename p2##_type, \ |
1561 | typename p3##_type, typename p4##_type, typename p5##_type, \ |
1562 | typename p6##_type, typename p7##_type, typename p8##_type, \ |
1563 | typename p9##_type>\ |
1564 | inline name##ActionP10<p0##_type, p1##_type, p2##_type, p3##_type, \ |
1565 | p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, \ |
1566 | p9##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ |
1567 | p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, p8##_type p8, \ |
1568 | p9##_type p9) {\ |
1569 | return name##ActionP10<p0##_type, p1##_type, p2##_type, p3##_type, \ |
1570 | p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, p9##_type>(p0, \ |
1571 | p1, p2, p3, p4, p5, p6, p7, p8, p9);\ |
1572 | }\ |
1573 | template <typename p0##_type, typename p1##_type, typename p2##_type, \ |
1574 | typename p3##_type, typename p4##_type, typename p5##_type, \ |
1575 | typename p6##_type, typename p7##_type, typename p8##_type, \ |
1576 | typename p9##_type>\ |
1577 | template <typename F>\ |
1578 | template <typename arg0_type, typename arg1_type, typename arg2_type, \ |
1579 | typename arg3_type, typename arg4_type, typename arg5_type, \ |
1580 | typename arg6_type, typename arg7_type, typename arg8_type, \ |
1581 | typename arg9_type>\ |
1582 | typename ::testing::internal::Function<F>::Result\ |
1583 | name##ActionP10<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ |
1584 | p5##_type, p6##_type, p7##_type, p8##_type, \ |
1585 | p9##_type>::gmock_Impl<F>::gmock_PerformImpl(\ |
1586 | GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const |
1587 | |
1588 | namespace testing { |
1589 | |
1590 | |
1591 | // The ACTION*() macros trigger warning C4100 (unreferenced formal |
1592 | // parameter) in MSVC with -W4. Unfortunately they cannot be fixed in |
1593 | // the macro definition, as the warnings are generated when the macro |
1594 | // is expanded and macro expansion cannot contain #pragma. Therefore |
1595 | // we suppress them here. |
1596 | #ifdef _MSC_VER |
1597 | # pragma warning(push) |
1598 | # pragma warning(disable:4100) |
1599 | #endif |
1600 | |
1601 | // Various overloads for InvokeArgument<N>(). |
1602 | // |
1603 | // The InvokeArgument<N>(a1, a2, ..., a_k) action invokes the N-th |
1604 | // (0-based) argument, which must be a k-ary callable, of the mock |
1605 | // function, with arguments a1, a2, ..., a_k. |
1606 | // |
1607 | // Notes: |
1608 | // |
1609 | // 1. The arguments are passed by value by default. If you need to |
1610 | // pass an argument by reference, wrap it inside ByRef(). For |
1611 | // example, |
1612 | // |
1613 | // InvokeArgument<1>(5, string("Hello"), ByRef(foo)) |
1614 | // |
1615 | // passes 5 and string("Hello") by value, and passes foo by |
1616 | // reference. |
1617 | // |
1618 | // 2. If the callable takes an argument by reference but ByRef() is |
1619 | // not used, it will receive the reference to a copy of the value, |
1620 | // instead of the original value. For example, when the 0-th |
1621 | // argument of the mock function takes a const string&, the action |
1622 | // |
1623 | // InvokeArgument<0>(string("Hello")) |
1624 | // |
1625 | // makes a copy of the temporary string("Hello") object and passes a |
1626 | // reference of the copy, instead of the original temporary object, |
1627 | // to the callable. This makes it easy for a user to define an |
1628 | // InvokeArgument action from temporary values and have it performed |
1629 | // later. |
1630 | |
1631 | namespace internal { |
1632 | namespace invoke_argument { |
1633 | |
1634 | // Appears in InvokeArgumentAdl's argument list to help avoid |
1635 | // accidental calls to user functions of the same name. |
1636 | struct AdlTag {}; |
1637 | |
1638 | // InvokeArgumentAdl - a helper for InvokeArgument. |
1639 | // The basic overloads are provided here for generic functors. |
1640 | // Overloads for other custom-callables are provided in the |
1641 | // internal/custom/callback-actions.h header. |
1642 | |
1643 | template <typename R, typename F> |
1644 | R InvokeArgumentAdl(AdlTag, F f) { |
1645 | return f(); |
1646 | } |
1647 | template <typename R, typename F, typename A1> |
1648 | R InvokeArgumentAdl(AdlTag, F f, A1 a1) { |
1649 | return f(a1); |
1650 | } |
1651 | template <typename R, typename F, typename A1, typename A2> |
1652 | R InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2) { |
1653 | return f(a1, a2); |
1654 | } |
1655 | template <typename R, typename F, typename A1, typename A2, typename A3> |
1656 | R InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2, A3 a3) { |
1657 | return f(a1, a2, a3); |
1658 | } |
1659 | template <typename R, typename F, typename A1, typename A2, typename A3, |
1660 | typename A4> |
1661 | R InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2, A3 a3, A4 a4) { |
1662 | return f(a1, a2, a3, a4); |
1663 | } |
1664 | template <typename R, typename F, typename A1, typename A2, typename A3, |
1665 | typename A4, typename A5> |
1666 | R InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) { |
1667 | return f(a1, a2, a3, a4, a5); |
1668 | } |
1669 | template <typename R, typename F, typename A1, typename A2, typename A3, |
1670 | typename A4, typename A5, typename A6> |
1671 | R InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) { |
1672 | return f(a1, a2, a3, a4, a5, a6); |
1673 | } |
1674 | template <typename R, typename F, typename A1, typename A2, typename A3, |
1675 | typename A4, typename A5, typename A6, typename A7> |
1676 | R InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, |
1677 | A7 a7) { |
1678 | return f(a1, a2, a3, a4, a5, a6, a7); |
1679 | } |
1680 | template <typename R, typename F, typename A1, typename A2, typename A3, |
1681 | typename A4, typename A5, typename A6, typename A7, typename A8> |
1682 | R InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, |
1683 | A7 a7, A8 a8) { |
1684 | return f(a1, a2, a3, a4, a5, a6, a7, a8); |
1685 | } |
1686 | template <typename R, typename F, typename A1, typename A2, typename A3, |
1687 | typename A4, typename A5, typename A6, typename A7, typename A8, |
1688 | typename A9> |
1689 | R InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, |
1690 | A7 a7, A8 a8, A9 a9) { |
1691 | return f(a1, a2, a3, a4, a5, a6, a7, a8, a9); |
1692 | } |
1693 | template <typename R, typename F, typename A1, typename A2, typename A3, |
1694 | typename A4, typename A5, typename A6, typename A7, typename A8, |
1695 | typename A9, typename A10> |
1696 | R InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, |
1697 | A7 a7, A8 a8, A9 a9, A10 a10) { |
1698 | return f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); |
1699 | } |
1700 | } // namespace invoke_argument |
1701 | } // namespace internal |
1702 | |
1703 | ACTION_TEMPLATE(InvokeArgument, |
1704 | HAS_1_TEMPLATE_PARAMS(int, k), |
1705 | AND_0_VALUE_PARAMS()) { |
1706 | using internal::invoke_argument::InvokeArgumentAdl; |
1707 | return InvokeArgumentAdl<return_type>( |
1708 | internal::invoke_argument::AdlTag(), |
1709 | ::std::get<k>(args)); |
1710 | } |
1711 | |
1712 | ACTION_TEMPLATE(InvokeArgument, |
1713 | HAS_1_TEMPLATE_PARAMS(int, k), |
1714 | AND_1_VALUE_PARAMS(p0)) { |
1715 | using internal::invoke_argument::InvokeArgumentAdl; |
1716 | return InvokeArgumentAdl<return_type>( |
1717 | internal::invoke_argument::AdlTag(), |
1718 | ::std::get<k>(args), p0); |
1719 | } |
1720 | |
1721 | ACTION_TEMPLATE(InvokeArgument, |
1722 | HAS_1_TEMPLATE_PARAMS(int, k), |
1723 | AND_2_VALUE_PARAMS(p0, p1)) { |
1724 | using internal::invoke_argument::InvokeArgumentAdl; |
1725 | return InvokeArgumentAdl<return_type>( |
1726 | internal::invoke_argument::AdlTag(), |
1727 | ::std::get<k>(args), p0, p1); |
1728 | } |
1729 | |
1730 | ACTION_TEMPLATE(InvokeArgument, |
1731 | HAS_1_TEMPLATE_PARAMS(int, k), |
1732 | AND_3_VALUE_PARAMS(p0, p1, p2)) { |
1733 | using internal::invoke_argument::InvokeArgumentAdl; |
1734 | return InvokeArgumentAdl<return_type>( |
1735 | internal::invoke_argument::AdlTag(), |
1736 | ::std::get<k>(args), p0, p1, p2); |
1737 | } |
1738 | |
1739 | ACTION_TEMPLATE(InvokeArgument, |
1740 | HAS_1_TEMPLATE_PARAMS(int, k), |
1741 | AND_4_VALUE_PARAMS(p0, p1, p2, p3)) { |
1742 | using internal::invoke_argument::InvokeArgumentAdl; |
1743 | return InvokeArgumentAdl<return_type>( |
1744 | internal::invoke_argument::AdlTag(), |
1745 | ::std::get<k>(args), p0, p1, p2, p3); |
1746 | } |
1747 | |
1748 | ACTION_TEMPLATE(InvokeArgument, |
1749 | HAS_1_TEMPLATE_PARAMS(int, k), |
1750 | AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4)) { |
1751 | using internal::invoke_argument::InvokeArgumentAdl; |
1752 | return InvokeArgumentAdl<return_type>( |
1753 | internal::invoke_argument::AdlTag(), |
1754 | ::std::get<k>(args), p0, p1, p2, p3, p4); |
1755 | } |
1756 | |
1757 | ACTION_TEMPLATE(InvokeArgument, |
1758 | HAS_1_TEMPLATE_PARAMS(int, k), |
1759 | AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5)) { |
1760 | using internal::invoke_argument::InvokeArgumentAdl; |
1761 | return InvokeArgumentAdl<return_type>( |
1762 | internal::invoke_argument::AdlTag(), |
1763 | ::std::get<k>(args), p0, p1, p2, p3, p4, p5); |
1764 | } |
1765 | |
1766 | ACTION_TEMPLATE(InvokeArgument, |
1767 | HAS_1_TEMPLATE_PARAMS(int, k), |
1768 | AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6)) { |
1769 | using internal::invoke_argument::InvokeArgumentAdl; |
1770 | return InvokeArgumentAdl<return_type>( |
1771 | internal::invoke_argument::AdlTag(), |
1772 | ::std::get<k>(args), p0, p1, p2, p3, p4, p5, p6); |
1773 | } |
1774 | |
1775 | ACTION_TEMPLATE(InvokeArgument, |
1776 | HAS_1_TEMPLATE_PARAMS(int, k), |
1777 | AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7)) { |
1778 | using internal::invoke_argument::InvokeArgumentAdl; |
1779 | return InvokeArgumentAdl<return_type>( |
1780 | internal::invoke_argument::AdlTag(), |
1781 | ::std::get<k>(args), p0, p1, p2, p3, p4, p5, p6, p7); |
1782 | } |
1783 | |
1784 | ACTION_TEMPLATE(InvokeArgument, |
1785 | HAS_1_TEMPLATE_PARAMS(int, k), |
1786 | AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, p8)) { |
1787 | using internal::invoke_argument::InvokeArgumentAdl; |
1788 | return InvokeArgumentAdl<return_type>( |
1789 | internal::invoke_argument::AdlTag(), |
1790 | ::std::get<k>(args), p0, p1, p2, p3, p4, p5, p6, p7, p8); |
1791 | } |
1792 | |
1793 | ACTION_TEMPLATE(InvokeArgument, |
1794 | HAS_1_TEMPLATE_PARAMS(int, k), |
1795 | AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)) { |
1796 | using internal::invoke_argument::InvokeArgumentAdl; |
1797 | return InvokeArgumentAdl<return_type>( |
1798 | internal::invoke_argument::AdlTag(), |
1799 | ::std::get<k>(args), p0, p1, p2, p3, p4, p5, p6, p7, p8, p9); |
1800 | } |
1801 | |
1802 | // Various overloads for ReturnNew<T>(). |
1803 | // |
1804 | // The ReturnNew<T>(a1, a2, ..., a_k) action returns a pointer to a new |
1805 | // instance of type T, constructed on the heap with constructor arguments |
1806 | // a1, a2, ..., and a_k. The caller assumes ownership of the returned value. |
1807 | ACTION_TEMPLATE(ReturnNew, |
1808 | HAS_1_TEMPLATE_PARAMS(typename, T), |
1809 | AND_0_VALUE_PARAMS()) { |
1810 | return new T(); |
1811 | } |
1812 | |
1813 | ACTION_TEMPLATE(ReturnNew, |
1814 | HAS_1_TEMPLATE_PARAMS(typename, T), |
1815 | AND_1_VALUE_PARAMS(p0)) { |
1816 | return new T(p0); |
1817 | } |
1818 | |
1819 | ACTION_TEMPLATE(ReturnNew, |
1820 | HAS_1_TEMPLATE_PARAMS(typename, T), |
1821 | AND_2_VALUE_PARAMS(p0, p1)) { |
1822 | return new T(p0, p1); |
1823 | } |
1824 | |
1825 | ACTION_TEMPLATE(ReturnNew, |
1826 | HAS_1_TEMPLATE_PARAMS(typename, T), |
1827 | AND_3_VALUE_PARAMS(p0, p1, p2)) { |
1828 | return new T(p0, p1, p2); |
1829 | } |
1830 | |
1831 | ACTION_TEMPLATE(ReturnNew, |
1832 | HAS_1_TEMPLATE_PARAMS(typename, T), |
1833 | AND_4_VALUE_PARAMS(p0, p1, p2, p3)) { |
1834 | return new T(p0, p1, p2, p3); |
1835 | } |
1836 | |
1837 | ACTION_TEMPLATE(ReturnNew, |
1838 | HAS_1_TEMPLATE_PARAMS(typename, T), |
1839 | AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4)) { |
1840 | return new T(p0, p1, p2, p3, p4); |
1841 | } |
1842 | |
1843 | ACTION_TEMPLATE(ReturnNew, |
1844 | HAS_1_TEMPLATE_PARAMS(typename, T), |
1845 | AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5)) { |
1846 | return new T(p0, p1, p2, p3, p4, p5); |
1847 | } |
1848 | |
1849 | ACTION_TEMPLATE(ReturnNew, |
1850 | HAS_1_TEMPLATE_PARAMS(typename, T), |
1851 | AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6)) { |
1852 | return new T(p0, p1, p2, p3, p4, p5, p6); |
1853 | } |
1854 | |
1855 | ACTION_TEMPLATE(ReturnNew, |
1856 | HAS_1_TEMPLATE_PARAMS(typename, T), |
1857 | AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7)) { |
1858 | return new T(p0, p1, p2, p3, p4, p5, p6, p7); |
1859 | } |
1860 | |
1861 | ACTION_TEMPLATE(ReturnNew, |
1862 | HAS_1_TEMPLATE_PARAMS(typename, T), |
1863 | AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, p8)) { |
1864 | return new T(p0, p1, p2, p3, p4, p5, p6, p7, p8); |
1865 | } |
1866 | |
1867 | ACTION_TEMPLATE(ReturnNew, |
1868 | HAS_1_TEMPLATE_PARAMS(typename, T), |
1869 | AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)) { |
1870 | return new T(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9); |
1871 | } |
1872 | |
1873 | #ifdef _MSC_VER |
1874 | # pragma warning(pop) |
1875 | #endif |
1876 | |
1877 | } // namespace testing |
1878 | |
1879 | // Include any custom callback actions added by the local installation. |
1880 | // We must include this header at the end to make sure it can use the |
1881 | // declarations from this file. |
1882 | #include "gmock/internal/custom/gmock-generated-actions.h" |
1883 | |
1884 | #endif // GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_ACTIONS_H_ |
1885 | |