gmock-generated-actions.h (85417B)
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_