1 // This file was GENERATED by command: 2 // pump.py gmock-generated-matchers.h.pump 3 // DO NOT EDIT BY HAND!!! 4 5 // Copyright 2008, 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 // Google Mock - a framework for writing C++ mock classes. 35 // 36 // This file implements some commonly used variadic matchers. 37 38 // GOOGLETEST_CM0002 DO NOT DELETE 39 40 #ifndef GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_MATCHERS_H_ 41 #define GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_MATCHERS_H_ 42 43 #include <iterator> 44 #include <sstream> 45 #include <string> 46 #include <utility> 47 #include <vector> 48 #include "gmock/gmock-matchers.h" 49 50 // The MATCHER* family of macros can be used in a namespace scope to 51 // define custom matchers easily. 52 // 53 // Basic Usage 54 // =========== 55 // 56 // The syntax 57 // 58 // MATCHER(name, description_string) { statements; } 59 // 60 // defines a matcher with the given name that executes the statements, 61 // which must return a bool to indicate if the match succeeds. Inside 62 // the statements, you can refer to the value being matched by 'arg', 63 // and refer to its type by 'arg_type'. 64 // 65 // The description string documents what the matcher does, and is used 66 // to generate the failure message when the match fails. Since a 67 // MATCHER() is usually defined in a header file shared by multiple 68 // C++ source files, we require the description to be a C-string 69 // literal to avoid possible side effects. It can be empty, in which 70 // case we'll use the sequence of words in the matcher name as the 71 // description. 72 // 73 // For example: 74 // 75 // MATCHER(IsEven, "") { return (arg % 2) == 0; } 76 // 77 // allows you to write 78 // 79 // // Expects mock_foo.Bar(n) to be called where n is even. 80 // EXPECT_CALL(mock_foo, Bar(IsEven())); 81 // 82 // or, 83 // 84 // // Verifies that the value of some_expression is even. 85 // EXPECT_THAT(some_expression, IsEven()); 86 // 87 // If the above assertion fails, it will print something like: 88 // 89 // Value of: some_expression 90 // Expected: is even 91 // Actual: 7 92 // 93 // where the description "is even" is automatically calculated from the 94 // matcher name IsEven. 95 // 96 // Argument Type 97 // ============= 98 // 99 // Note that the type of the value being matched (arg_type) is 100 // determined by the context in which you use the matcher and is 101 // supplied to you by the compiler, so you don't need to worry about 102 // declaring it (nor can you). This allows the matcher to be 103 // polymorphic. For example, IsEven() can be used to match any type 104 // where the value of "(arg % 2) == 0" can be implicitly converted to 105 // a bool. In the "Bar(IsEven())" example above, if method Bar() 106 // takes an int, 'arg_type' will be int; if it takes an unsigned long, 107 // 'arg_type' will be unsigned long; and so on. 108 // 109 // Parameterizing Matchers 110 // ======================= 111 // 112 // Sometimes you'll want to parameterize the matcher. For that you 113 // can use another macro: 114 // 115 // MATCHER_P(name, param_name, description_string) { statements; } 116 // 117 // For example: 118 // 119 // MATCHER_P(HasAbsoluteValue, value, "") { return abs(arg) == value; } 120 // 121 // will allow you to write: 122 // 123 // EXPECT_THAT(Blah("a"), HasAbsoluteValue(n)); 124 // 125 // which may lead to this message (assuming n is 10): 126 // 127 // Value of: Blah("a") 128 // Expected: has absolute value 10 129 // Actual: -9 130 // 131 // Note that both the matcher description and its parameter are 132 // printed, making the message human-friendly. 133 // 134 // In the matcher definition body, you can write 'foo_type' to 135 // reference the type of a parameter named 'foo'. For example, in the 136 // body of MATCHER_P(HasAbsoluteValue, value) above, you can write 137 // 'value_type' to refer to the type of 'value'. 138 // 139 // We also provide MATCHER_P2, MATCHER_P3, ..., up to MATCHER_P10 to 140 // support multi-parameter matchers. 141 // 142 // Describing Parameterized Matchers 143 // ================================= 144 // 145 // The last argument to MATCHER*() is a string-typed expression. The 146 // expression can reference all of the matcher's parameters and a 147 // special bool-typed variable named 'negation'. When 'negation' is 148 // false, the expression should evaluate to the matcher's description; 149 // otherwise it should evaluate to the description of the negation of 150 // the matcher. For example, 151 // 152 // using testing::PrintToString; 153 // 154 // MATCHER_P2(InClosedRange, low, hi, 155 // std::string(negation ? "is not" : "is") + " in range [" + 156 // PrintToString(low) + ", " + PrintToString(hi) + "]") { 157 // return low <= arg && arg <= hi; 158 // } 159 // ... 160 // EXPECT_THAT(3, InClosedRange(4, 6)); 161 // EXPECT_THAT(3, Not(InClosedRange(2, 4))); 162 // 163 // would generate two failures that contain the text: 164 // 165 // Expected: is in range [4, 6] 166 // ... 167 // Expected: is not in range [2, 4] 168 // 169 // If you specify "" as the description, the failure message will 170 // contain the sequence of words in the matcher name followed by the 171 // parameter values printed as a tuple. For example, 172 // 173 // MATCHER_P2(InClosedRange, low, hi, "") { ... } 174 // ... 175 // EXPECT_THAT(3, InClosedRange(4, 6)); 176 // EXPECT_THAT(3, Not(InClosedRange(2, 4))); 177 // 178 // would generate two failures that contain the text: 179 // 180 // Expected: in closed range (4, 6) 181 // ... 182 // Expected: not (in closed range (2, 4)) 183 // 184 // Types of Matcher Parameters 185 // =========================== 186 // 187 // For the purpose of typing, you can view 188 // 189 // MATCHER_Pk(Foo, p1, ..., pk, description_string) { ... } 190 // 191 // as shorthand for 192 // 193 // template <typename p1_type, ..., typename pk_type> 194 // FooMatcherPk<p1_type, ..., pk_type> 195 // Foo(p1_type p1, ..., pk_type pk) { ... } 196 // 197 // When you write Foo(v1, ..., vk), the compiler infers the types of 198 // the parameters v1, ..., and vk for you. If you are not happy with 199 // the result of the type inference, you can specify the types by 200 // explicitly instantiating the template, as in Foo<long, bool>(5, 201 // false). As said earlier, you don't get to (or need to) specify 202 // 'arg_type' as that's determined by the context in which the matcher 203 // is used. You can assign the result of expression Foo(p1, ..., pk) 204 // to a variable of type FooMatcherPk<p1_type, ..., pk_type>. This 205 // can be useful when composing matchers. 206 // 207 // While you can instantiate a matcher template with reference types, 208 // passing the parameters by pointer usually makes your code more 209 // readable. If, however, you still want to pass a parameter by 210 // reference, be aware that in the failure message generated by the 211 // matcher you will see the value of the referenced object but not its 212 // address. 213 // 214 // Explaining Match Results 215 // ======================== 216 // 217 // Sometimes the matcher description alone isn't enough to explain why 218 // the match has failed or succeeded. For example, when expecting a 219 // long string, it can be very helpful to also print the diff between 220 // the expected string and the actual one. To achieve that, you can 221 // optionally stream additional information to a special variable 222 // named result_listener, whose type is a pointer to class 223 // MatchResultListener: 224 // 225 // MATCHER_P(EqualsLongString, str, "") { 226 // if (arg == str) return true; 227 // 228 // *result_listener << "the difference: " 229 /// << DiffStrings(str, arg); 230 // return false; 231 // } 232 // 233 // Overloading Matchers 234 // ==================== 235 // 236 // You can overload matchers with different numbers of parameters: 237 // 238 // MATCHER_P(Blah, a, description_string1) { ... } 239 // MATCHER_P2(Blah, a, b, description_string2) { ... } 240 // 241 // Caveats 242 // ======= 243 // 244 // When defining a new matcher, you should also consider implementing 245 // MatcherInterface or using MakePolymorphicMatcher(). These 246 // approaches require more work than the MATCHER* macros, but also 247 // give you more control on the types of the value being matched and 248 // the matcher parameters, which may leads to better compiler error 249 // messages when the matcher is used wrong. They also allow 250 // overloading matchers based on parameter types (as opposed to just 251 // based on the number of parameters). 252 // 253 // MATCHER*() can only be used in a namespace scope as templates cannot be 254 // declared inside of a local class. 255 // 256 // More Information 257 // ================ 258 // 259 // To learn more about using these macros, please search for 'MATCHER' 260 // on 261 // https://github.com/google/googletest/blob/master/googlemock/docs/cook_book.md 262 263 #define MATCHER(name, description)\ 264 class name##Matcher {\ 265 public:\ 266 template <typename arg_type>\ 267 class gmock_Impl : public ::testing::MatcherInterface<\ 268 GTEST_REFERENCE_TO_CONST_(arg_type)> {\ 269 public:\ 270 gmock_Impl()\ 271 {}\ 272 bool MatchAndExplain(\ 273 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 274 ::testing::MatchResultListener* result_listener) const override;\ 275 void DescribeTo(::std::ostream* gmock_os) const override {\ 276 *gmock_os << FormatDescription(false);\ 277 }\ 278 void DescribeNegationTo(::std::ostream* gmock_os) const override {\ 279 *gmock_os << FormatDescription(true);\ 280 }\ 281 private:\ 282 ::std::string FormatDescription(bool negation) const {\ 283 ::std::string gmock_description = (description);\ 284 if (!gmock_description.empty()) {\ 285 return gmock_description;\ 286 }\ 287 return ::testing::internal::FormatMatcherDescription(\ 288 negation, #name, \ 289 ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 290 ::std::tuple<>()));\ 291 }\ 292 };\ 293 template <typename arg_type>\ 294 operator ::testing::Matcher<arg_type>() const {\ 295 return ::testing::Matcher<arg_type>(\ 296 new gmock_Impl<arg_type>());\ 297 }\ 298 name##Matcher() {\ 299 }\ 300 private:\ 301 };\ 302 inline name##Matcher name() {\ 303 return name##Matcher();\ 304 }\ 305 template <typename arg_type>\ 306 bool name##Matcher::gmock_Impl<arg_type>::MatchAndExplain(\ 307 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 308 ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 309 const 310 311 #define MATCHER_P(name, p0, description)\ 312 template <typename p0##_type>\ 313 class name##MatcherP {\ 314 public:\ 315 template <typename arg_type>\ 316 class gmock_Impl : public ::testing::MatcherInterface<\ 317 GTEST_REFERENCE_TO_CONST_(arg_type)> {\ 318 public:\ 319 explicit gmock_Impl(p0##_type gmock_p0)\ 320 : p0(::std::move(gmock_p0)) {}\ 321 bool MatchAndExplain(\ 322 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 323 ::testing::MatchResultListener* result_listener) const override;\ 324 void DescribeTo(::std::ostream* gmock_os) const override {\ 325 *gmock_os << FormatDescription(false);\ 326 }\ 327 void DescribeNegationTo(::std::ostream* gmock_os) const override {\ 328 *gmock_os << FormatDescription(true);\ 329 }\ 330 p0##_type const p0;\ 331 private:\ 332 ::std::string FormatDescription(bool negation) const {\ 333 ::std::string gmock_description = (description);\ 334 if (!gmock_description.empty()) {\ 335 return gmock_description;\ 336 }\ 337 return ::testing::internal::FormatMatcherDescription(\ 338 negation, #name, \ 339 ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 340 ::std::tuple<p0##_type>(p0)));\ 341 }\ 342 };\ 343 template <typename arg_type>\ 344 operator ::testing::Matcher<arg_type>() const {\ 345 return ::testing::Matcher<arg_type>(\ 346 new gmock_Impl<arg_type>(p0));\ 347 }\ 348 explicit name##MatcherP(p0##_type gmock_p0) : p0(::std::move(gmock_p0)) {\ 349 }\ 350 p0##_type const p0;\ 351 private:\ 352 };\ 353 template <typename p0##_type>\ 354 inline name##MatcherP<p0##_type> name(p0##_type p0) {\ 355 return name##MatcherP<p0##_type>(p0);\ 356 }\ 357 template <typename p0##_type>\ 358 template <typename arg_type>\ 359 bool name##MatcherP<p0##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 360 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 361 ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 362 const 363 364 #define MATCHER_P2(name, p0, p1, description)\ 365 template <typename p0##_type, typename p1##_type>\ 366 class name##MatcherP2 {\ 367 public:\ 368 template <typename arg_type>\ 369 class gmock_Impl : public ::testing::MatcherInterface<\ 370 GTEST_REFERENCE_TO_CONST_(arg_type)> {\ 371 public:\ 372 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1)\ 373 : p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1)) {}\ 374 bool MatchAndExplain(\ 375 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 376 ::testing::MatchResultListener* result_listener) const override;\ 377 void DescribeTo(::std::ostream* gmock_os) const override {\ 378 *gmock_os << FormatDescription(false);\ 379 }\ 380 void DescribeNegationTo(::std::ostream* gmock_os) const override {\ 381 *gmock_os << FormatDescription(true);\ 382 }\ 383 p0##_type const p0;\ 384 p1##_type const p1;\ 385 private:\ 386 ::std::string FormatDescription(bool negation) const {\ 387 ::std::string gmock_description = (description);\ 388 if (!gmock_description.empty()) {\ 389 return gmock_description;\ 390 }\ 391 return ::testing::internal::FormatMatcherDescription(\ 392 negation, #name, \ 393 ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 394 ::std::tuple<p0##_type, p1##_type>(p0, p1)));\ 395 }\ 396 };\ 397 template <typename arg_type>\ 398 operator ::testing::Matcher<arg_type>() const {\ 399 return ::testing::Matcher<arg_type>(\ 400 new gmock_Impl<arg_type>(p0, p1));\ 401 }\ 402 name##MatcherP2(p0##_type gmock_p0, \ 403 p1##_type gmock_p1) : p0(::std::move(gmock_p0)), \ 404 p1(::std::move(gmock_p1)) {\ 405 }\ 406 p0##_type const p0;\ 407 p1##_type const p1;\ 408 private:\ 409 };\ 410 template <typename p0##_type, typename p1##_type>\ 411 inline name##MatcherP2<p0##_type, p1##_type> name(p0##_type p0, \ 412 p1##_type p1) {\ 413 return name##MatcherP2<p0##_type, p1##_type>(p0, p1);\ 414 }\ 415 template <typename p0##_type, typename p1##_type>\ 416 template <typename arg_type>\ 417 bool name##MatcherP2<p0##_type, \ 418 p1##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 419 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 420 ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 421 const 422 423 #define MATCHER_P3(name, p0, p1, p2, description)\ 424 template <typename p0##_type, typename p1##_type, typename p2##_type>\ 425 class name##MatcherP3 {\ 426 public:\ 427 template <typename arg_type>\ 428 class gmock_Impl : public ::testing::MatcherInterface<\ 429 GTEST_REFERENCE_TO_CONST_(arg_type)> {\ 430 public:\ 431 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2)\ 432 : p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1)), \ 433 p2(::std::move(gmock_p2)) {}\ 434 bool MatchAndExplain(\ 435 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 436 ::testing::MatchResultListener* result_listener) const override;\ 437 void DescribeTo(::std::ostream* gmock_os) const override {\ 438 *gmock_os << FormatDescription(false);\ 439 }\ 440 void DescribeNegationTo(::std::ostream* gmock_os) const override {\ 441 *gmock_os << FormatDescription(true);\ 442 }\ 443 p0##_type const p0;\ 444 p1##_type const p1;\ 445 p2##_type const p2;\ 446 private:\ 447 ::std::string FormatDescription(bool negation) const {\ 448 ::std::string gmock_description = (description);\ 449 if (!gmock_description.empty()) {\ 450 return gmock_description;\ 451 }\ 452 return ::testing::internal::FormatMatcherDescription(\ 453 negation, #name, \ 454 ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 455 ::std::tuple<p0##_type, p1##_type, p2##_type>(p0, p1, p2)));\ 456 }\ 457 };\ 458 template <typename arg_type>\ 459 operator ::testing::Matcher<arg_type>() const {\ 460 return ::testing::Matcher<arg_type>(\ 461 new gmock_Impl<arg_type>(p0, p1, p2));\ 462 }\ 463 name##MatcherP3(p0##_type gmock_p0, p1##_type gmock_p1, \ 464 p2##_type gmock_p2) : p0(::std::move(gmock_p0)), \ 465 p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)) {\ 466 }\ 467 p0##_type const p0;\ 468 p1##_type const p1;\ 469 p2##_type const p2;\ 470 private:\ 471 };\ 472 template <typename p0##_type, typename p1##_type, typename p2##_type>\ 473 inline name##MatcherP3<p0##_type, p1##_type, p2##_type> name(p0##_type p0, \ 474 p1##_type p1, p2##_type p2) {\ 475 return name##MatcherP3<p0##_type, p1##_type, p2##_type>(p0, p1, p2);\ 476 }\ 477 template <typename p0##_type, typename p1##_type, typename p2##_type>\ 478 template <typename arg_type>\ 479 bool name##MatcherP3<p0##_type, p1##_type, \ 480 p2##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 481 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 482 ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 483 const 484 485 #define MATCHER_P4(name, p0, p1, p2, p3, description)\ 486 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 487 typename p3##_type>\ 488 class name##MatcherP4 {\ 489 public:\ 490 template <typename arg_type>\ 491 class gmock_Impl : public ::testing::MatcherInterface<\ 492 GTEST_REFERENCE_TO_CONST_(arg_type)> {\ 493 public:\ 494 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 495 p3##_type gmock_p3)\ 496 : p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1)), \ 497 p2(::std::move(gmock_p2)), p3(::std::move(gmock_p3)) {}\ 498 bool MatchAndExplain(\ 499 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 500 ::testing::MatchResultListener* result_listener) const override;\ 501 void DescribeTo(::std::ostream* gmock_os) const override {\ 502 *gmock_os << FormatDescription(false);\ 503 }\ 504 void DescribeNegationTo(::std::ostream* gmock_os) const override {\ 505 *gmock_os << FormatDescription(true);\ 506 }\ 507 p0##_type const p0;\ 508 p1##_type const p1;\ 509 p2##_type const p2;\ 510 p3##_type const p3;\ 511 private:\ 512 ::std::string FormatDescription(bool negation) const {\ 513 ::std::string gmock_description = (description);\ 514 if (!gmock_description.empty()) {\ 515 return gmock_description;\ 516 }\ 517 return ::testing::internal::FormatMatcherDescription(\ 518 negation, #name, \ 519 ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 520 ::std::tuple<p0##_type, p1##_type, p2##_type, p3##_type>(p0, \ 521 p1, p2, p3)));\ 522 }\ 523 };\ 524 template <typename arg_type>\ 525 operator ::testing::Matcher<arg_type>() const {\ 526 return ::testing::Matcher<arg_type>(\ 527 new gmock_Impl<arg_type>(p0, p1, p2, p3));\ 528 }\ 529 name##MatcherP4(p0##_type gmock_p0, p1##_type gmock_p1, \ 530 p2##_type gmock_p2, p3##_type gmock_p3) : p0(::std::move(gmock_p0)), \ 531 p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \ 532 p3(::std::move(gmock_p3)) {\ 533 }\ 534 p0##_type const p0;\ 535 p1##_type const p1;\ 536 p2##_type const p2;\ 537 p3##_type const p3;\ 538 private:\ 539 };\ 540 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 541 typename p3##_type>\ 542 inline name##MatcherP4<p0##_type, p1##_type, p2##_type, \ 543 p3##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, \ 544 p3##_type p3) {\ 545 return name##MatcherP4<p0##_type, p1##_type, p2##_type, p3##_type>(p0, \ 546 p1, p2, p3);\ 547 }\ 548 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 549 typename p3##_type>\ 550 template <typename arg_type>\ 551 bool name##MatcherP4<p0##_type, p1##_type, p2##_type, \ 552 p3##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 553 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 554 ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 555 const 556 557 #define MATCHER_P5(name, p0, p1, p2, p3, p4, description)\ 558 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 559 typename p3##_type, typename p4##_type>\ 560 class name##MatcherP5 {\ 561 public:\ 562 template <typename arg_type>\ 563 class gmock_Impl : public ::testing::MatcherInterface<\ 564 GTEST_REFERENCE_TO_CONST_(arg_type)> {\ 565 public:\ 566 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 567 p3##_type gmock_p3, p4##_type gmock_p4)\ 568 : p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1)), \ 569 p2(::std::move(gmock_p2)), p3(::std::move(gmock_p3)), \ 570 p4(::std::move(gmock_p4)) {}\ 571 bool MatchAndExplain(\ 572 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 573 ::testing::MatchResultListener* result_listener) const override;\ 574 void DescribeTo(::std::ostream* gmock_os) const override {\ 575 *gmock_os << FormatDescription(false);\ 576 }\ 577 void DescribeNegationTo(::std::ostream* gmock_os) const override {\ 578 *gmock_os << FormatDescription(true);\ 579 }\ 580 p0##_type const p0;\ 581 p1##_type const p1;\ 582 p2##_type const p2;\ 583 p3##_type const p3;\ 584 p4##_type const p4;\ 585 private:\ 586 ::std::string FormatDescription(bool negation) const {\ 587 ::std::string gmock_description = (description);\ 588 if (!gmock_description.empty()) {\ 589 return gmock_description;\ 590 }\ 591 return ::testing::internal::FormatMatcherDescription(\ 592 negation, #name, \ 593 ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 594 ::std::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \ 595 p4##_type>(p0, p1, p2, p3, p4)));\ 596 }\ 597 };\ 598 template <typename arg_type>\ 599 operator ::testing::Matcher<arg_type>() const {\ 600 return ::testing::Matcher<arg_type>(\ 601 new gmock_Impl<arg_type>(p0, p1, p2, p3, p4));\ 602 }\ 603 name##MatcherP5(p0##_type gmock_p0, p1##_type gmock_p1, \ 604 p2##_type gmock_p2, p3##_type gmock_p3, \ 605 p4##_type gmock_p4) : p0(::std::move(gmock_p0)), \ 606 p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \ 607 p3(::std::move(gmock_p3)), p4(::std::move(gmock_p4)) {\ 608 }\ 609 p0##_type const p0;\ 610 p1##_type const p1;\ 611 p2##_type const p2;\ 612 p3##_type const p3;\ 613 p4##_type const p4;\ 614 private:\ 615 };\ 616 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 617 typename p3##_type, typename p4##_type>\ 618 inline name##MatcherP5<p0##_type, p1##_type, p2##_type, p3##_type, \ 619 p4##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ 620 p4##_type p4) {\ 621 return name##MatcherP5<p0##_type, p1##_type, p2##_type, p3##_type, \ 622 p4##_type>(p0, p1, p2, p3, p4);\ 623 }\ 624 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 625 typename p3##_type, typename p4##_type>\ 626 template <typename arg_type>\ 627 bool name##MatcherP5<p0##_type, p1##_type, p2##_type, p3##_type, \ 628 p4##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 629 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 630 ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 631 const 632 633 #define MATCHER_P6(name, p0, p1, p2, p3, p4, p5, description)\ 634 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 635 typename p3##_type, typename p4##_type, typename p5##_type>\ 636 class name##MatcherP6 {\ 637 public:\ 638 template <typename arg_type>\ 639 class gmock_Impl : public ::testing::MatcherInterface<\ 640 GTEST_REFERENCE_TO_CONST_(arg_type)> {\ 641 public:\ 642 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 643 p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5)\ 644 : p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1)), \ 645 p2(::std::move(gmock_p2)), p3(::std::move(gmock_p3)), \ 646 p4(::std::move(gmock_p4)), p5(::std::move(gmock_p5)) {}\ 647 bool MatchAndExplain(\ 648 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 649 ::testing::MatchResultListener* result_listener) const override;\ 650 void DescribeTo(::std::ostream* gmock_os) const override {\ 651 *gmock_os << FormatDescription(false);\ 652 }\ 653 void DescribeNegationTo(::std::ostream* gmock_os) const override {\ 654 *gmock_os << FormatDescription(true);\ 655 }\ 656 p0##_type const p0;\ 657 p1##_type const p1;\ 658 p2##_type const p2;\ 659 p3##_type const p3;\ 660 p4##_type const p4;\ 661 p5##_type const p5;\ 662 private:\ 663 ::std::string FormatDescription(bool negation) const {\ 664 ::std::string gmock_description = (description);\ 665 if (!gmock_description.empty()) {\ 666 return gmock_description;\ 667 }\ 668 return ::testing::internal::FormatMatcherDescription(\ 669 negation, #name, \ 670 ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 671 ::std::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \ 672 p4##_type, p5##_type>(p0, p1, p2, p3, p4, p5)));\ 673 }\ 674 };\ 675 template <typename arg_type>\ 676 operator ::testing::Matcher<arg_type>() const {\ 677 return ::testing::Matcher<arg_type>(\ 678 new gmock_Impl<arg_type>(p0, p1, p2, p3, p4, p5));\ 679 }\ 680 name##MatcherP6(p0##_type gmock_p0, p1##_type gmock_p1, \ 681 p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ 682 p5##_type gmock_p5) : p0(::std::move(gmock_p0)), \ 683 p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \ 684 p3(::std::move(gmock_p3)), p4(::std::move(gmock_p4)), \ 685 p5(::std::move(gmock_p5)) {\ 686 }\ 687 p0##_type const p0;\ 688 p1##_type const p1;\ 689 p2##_type const p2;\ 690 p3##_type const p3;\ 691 p4##_type const p4;\ 692 p5##_type const p5;\ 693 private:\ 694 };\ 695 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 696 typename p3##_type, typename p4##_type, typename p5##_type>\ 697 inline name##MatcherP6<p0##_type, p1##_type, p2##_type, p3##_type, \ 698 p4##_type, p5##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, \ 699 p3##_type p3, p4##_type p4, p5##_type p5) {\ 700 return name##MatcherP6<p0##_type, p1##_type, p2##_type, p3##_type, \ 701 p4##_type, p5##_type>(p0, p1, p2, p3, p4, p5);\ 702 }\ 703 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 704 typename p3##_type, typename p4##_type, typename p5##_type>\ 705 template <typename arg_type>\ 706 bool name##MatcherP6<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ 707 p5##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 708 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 709 ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 710 const 711 712 #define MATCHER_P7(name, p0, p1, p2, p3, p4, p5, p6, description)\ 713 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 714 typename p3##_type, typename p4##_type, typename p5##_type, \ 715 typename p6##_type>\ 716 class name##MatcherP7 {\ 717 public:\ 718 template <typename arg_type>\ 719 class gmock_Impl : public ::testing::MatcherInterface<\ 720 GTEST_REFERENCE_TO_CONST_(arg_type)> {\ 721 public:\ 722 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 723 p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 724 p6##_type gmock_p6)\ 725 : p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1)), \ 726 p2(::std::move(gmock_p2)), p3(::std::move(gmock_p3)), \ 727 p4(::std::move(gmock_p4)), p5(::std::move(gmock_p5)), \ 728 p6(::std::move(gmock_p6)) {}\ 729 bool MatchAndExplain(\ 730 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 731 ::testing::MatchResultListener* result_listener) const override;\ 732 void DescribeTo(::std::ostream* gmock_os) const override {\ 733 *gmock_os << FormatDescription(false);\ 734 }\ 735 void DescribeNegationTo(::std::ostream* gmock_os) const override {\ 736 *gmock_os << FormatDescription(true);\ 737 }\ 738 p0##_type const p0;\ 739 p1##_type const p1;\ 740 p2##_type const p2;\ 741 p3##_type const p3;\ 742 p4##_type const p4;\ 743 p5##_type const p5;\ 744 p6##_type const p6;\ 745 private:\ 746 ::std::string FormatDescription(bool negation) const {\ 747 ::std::string gmock_description = (description);\ 748 if (!gmock_description.empty()) {\ 749 return gmock_description;\ 750 }\ 751 return ::testing::internal::FormatMatcherDescription(\ 752 negation, #name, \ 753 ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 754 ::std::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \ 755 p4##_type, p5##_type, p6##_type>(p0, p1, p2, p3, p4, p5, \ 756 p6)));\ 757 }\ 758 };\ 759 template <typename arg_type>\ 760 operator ::testing::Matcher<arg_type>() const {\ 761 return ::testing::Matcher<arg_type>(\ 762 new gmock_Impl<arg_type>(p0, p1, p2, p3, p4, p5, p6));\ 763 }\ 764 name##MatcherP7(p0##_type gmock_p0, p1##_type gmock_p1, \ 765 p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ 766 p5##_type gmock_p5, p6##_type gmock_p6) : p0(::std::move(gmock_p0)), \ 767 p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \ 768 p3(::std::move(gmock_p3)), p4(::std::move(gmock_p4)), \ 769 p5(::std::move(gmock_p5)), p6(::std::move(gmock_p6)) {\ 770 }\ 771 p0##_type const p0;\ 772 p1##_type const p1;\ 773 p2##_type const p2;\ 774 p3##_type const p3;\ 775 p4##_type const p4;\ 776 p5##_type const p5;\ 777 p6##_type const p6;\ 778 private:\ 779 };\ 780 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 781 typename p3##_type, typename p4##_type, typename p5##_type, \ 782 typename p6##_type>\ 783 inline name##MatcherP7<p0##_type, p1##_type, p2##_type, p3##_type, \ 784 p4##_type, p5##_type, p6##_type> name(p0##_type p0, p1##_type p1, \ 785 p2##_type p2, p3##_type p3, p4##_type p4, p5##_type p5, \ 786 p6##_type p6) {\ 787 return name##MatcherP7<p0##_type, p1##_type, p2##_type, p3##_type, \ 788 p4##_type, p5##_type, p6##_type>(p0, p1, p2, p3, p4, p5, p6);\ 789 }\ 790 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 791 typename p3##_type, typename p4##_type, typename p5##_type, \ 792 typename p6##_type>\ 793 template <typename arg_type>\ 794 bool name##MatcherP7<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ 795 p5##_type, p6##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 796 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 797 ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 798 const 799 800 #define MATCHER_P8(name, p0, p1, p2, p3, p4, p5, p6, p7, description)\ 801 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 802 typename p3##_type, typename p4##_type, typename p5##_type, \ 803 typename p6##_type, typename p7##_type>\ 804 class name##MatcherP8 {\ 805 public:\ 806 template <typename arg_type>\ 807 class gmock_Impl : public ::testing::MatcherInterface<\ 808 GTEST_REFERENCE_TO_CONST_(arg_type)> {\ 809 public:\ 810 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 811 p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 812 p6##_type gmock_p6, p7##_type gmock_p7)\ 813 : p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1)), \ 814 p2(::std::move(gmock_p2)), p3(::std::move(gmock_p3)), \ 815 p4(::std::move(gmock_p4)), p5(::std::move(gmock_p5)), \ 816 p6(::std::move(gmock_p6)), p7(::std::move(gmock_p7)) {}\ 817 bool MatchAndExplain(\ 818 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 819 ::testing::MatchResultListener* result_listener) const override;\ 820 void DescribeTo(::std::ostream* gmock_os) const override {\ 821 *gmock_os << FormatDescription(false);\ 822 }\ 823 void DescribeNegationTo(::std::ostream* gmock_os) const override {\ 824 *gmock_os << FormatDescription(true);\ 825 }\ 826 p0##_type const p0;\ 827 p1##_type const p1;\ 828 p2##_type const p2;\ 829 p3##_type const p3;\ 830 p4##_type const p4;\ 831 p5##_type const p5;\ 832 p6##_type const p6;\ 833 p7##_type const p7;\ 834 private:\ 835 ::std::string FormatDescription(bool negation) const {\ 836 ::std::string gmock_description = (description);\ 837 if (!gmock_description.empty()) {\ 838 return gmock_description;\ 839 }\ 840 return ::testing::internal::FormatMatcherDescription(\ 841 negation, #name, \ 842 ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 843 ::std::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \ 844 p4##_type, p5##_type, p6##_type, p7##_type>(p0, p1, p2, \ 845 p3, p4, p5, p6, p7)));\ 846 }\ 847 };\ 848 template <typename arg_type>\ 849 operator ::testing::Matcher<arg_type>() const {\ 850 return ::testing::Matcher<arg_type>(\ 851 new gmock_Impl<arg_type>(p0, p1, p2, p3, p4, p5, p6, p7));\ 852 }\ 853 name##MatcherP8(p0##_type gmock_p0, p1##_type gmock_p1, \ 854 p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ 855 p5##_type gmock_p5, p6##_type gmock_p6, \ 856 p7##_type gmock_p7) : p0(::std::move(gmock_p0)), \ 857 p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \ 858 p3(::std::move(gmock_p3)), p4(::std::move(gmock_p4)), \ 859 p5(::std::move(gmock_p5)), p6(::std::move(gmock_p6)), \ 860 p7(::std::move(gmock_p7)) {\ 861 }\ 862 p0##_type const p0;\ 863 p1##_type const p1;\ 864 p2##_type const p2;\ 865 p3##_type const p3;\ 866 p4##_type const p4;\ 867 p5##_type const p5;\ 868 p6##_type const p6;\ 869 p7##_type const p7;\ 870 private:\ 871 };\ 872 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 873 typename p3##_type, typename p4##_type, typename p5##_type, \ 874 typename p6##_type, typename p7##_type>\ 875 inline name##MatcherP8<p0##_type, p1##_type, p2##_type, p3##_type, \ 876 p4##_type, p5##_type, p6##_type, p7##_type> name(p0##_type p0, \ 877 p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, p5##_type p5, \ 878 p6##_type p6, p7##_type p7) {\ 879 return name##MatcherP8<p0##_type, p1##_type, p2##_type, p3##_type, \ 880 p4##_type, p5##_type, p6##_type, p7##_type>(p0, p1, p2, p3, p4, p5, \ 881 p6, p7);\ 882 }\ 883 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 884 typename p3##_type, typename p4##_type, typename p5##_type, \ 885 typename p6##_type, typename p7##_type>\ 886 template <typename arg_type>\ 887 bool name##MatcherP8<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ 888 p5##_type, p6##_type, \ 889 p7##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 890 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 891 ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 892 const 893 894 #define MATCHER_P9(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, description)\ 895 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 896 typename p3##_type, typename p4##_type, typename p5##_type, \ 897 typename p6##_type, typename p7##_type, typename p8##_type>\ 898 class name##MatcherP9 {\ 899 public:\ 900 template <typename arg_type>\ 901 class gmock_Impl : public ::testing::MatcherInterface<\ 902 GTEST_REFERENCE_TO_CONST_(arg_type)> {\ 903 public:\ 904 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 905 p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 906 p6##_type gmock_p6, p7##_type gmock_p7, p8##_type gmock_p8)\ 907 : p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1)), \ 908 p2(::std::move(gmock_p2)), p3(::std::move(gmock_p3)), \ 909 p4(::std::move(gmock_p4)), p5(::std::move(gmock_p5)), \ 910 p6(::std::move(gmock_p6)), p7(::std::move(gmock_p7)), \ 911 p8(::std::move(gmock_p8)) {}\ 912 bool MatchAndExplain(\ 913 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 914 ::testing::MatchResultListener* result_listener) const override;\ 915 void DescribeTo(::std::ostream* gmock_os) const override {\ 916 *gmock_os << FormatDescription(false);\ 917 }\ 918 void DescribeNegationTo(::std::ostream* gmock_os) const override {\ 919 *gmock_os << FormatDescription(true);\ 920 }\ 921 p0##_type const p0;\ 922 p1##_type const p1;\ 923 p2##_type const p2;\ 924 p3##_type const p3;\ 925 p4##_type const p4;\ 926 p5##_type const p5;\ 927 p6##_type const p6;\ 928 p7##_type const p7;\ 929 p8##_type const p8;\ 930 private:\ 931 ::std::string FormatDescription(bool negation) const {\ 932 ::std::string gmock_description = (description);\ 933 if (!gmock_description.empty()) {\ 934 return gmock_description;\ 935 }\ 936 return ::testing::internal::FormatMatcherDescription(\ 937 negation, #name, \ 938 ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 939 ::std::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \ 940 p4##_type, p5##_type, p6##_type, p7##_type, \ 941 p8##_type>(p0, p1, p2, p3, p4, p5, p6, p7, p8)));\ 942 }\ 943 };\ 944 template <typename arg_type>\ 945 operator ::testing::Matcher<arg_type>() const {\ 946 return ::testing::Matcher<arg_type>(\ 947 new gmock_Impl<arg_type>(p0, p1, p2, p3, p4, p5, p6, p7, p8));\ 948 }\ 949 name##MatcherP9(p0##_type gmock_p0, p1##_type gmock_p1, \ 950 p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ 951 p5##_type gmock_p5, p6##_type gmock_p6, p7##_type gmock_p7, \ 952 p8##_type gmock_p8) : p0(::std::move(gmock_p0)), \ 953 p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \ 954 p3(::std::move(gmock_p3)), p4(::std::move(gmock_p4)), \ 955 p5(::std::move(gmock_p5)), p6(::std::move(gmock_p6)), \ 956 p7(::std::move(gmock_p7)), p8(::std::move(gmock_p8)) {\ 957 }\ 958 p0##_type const p0;\ 959 p1##_type const p1;\ 960 p2##_type const p2;\ 961 p3##_type const p3;\ 962 p4##_type const p4;\ 963 p5##_type const p5;\ 964 p6##_type const p6;\ 965 p7##_type const p7;\ 966 p8##_type const p8;\ 967 private:\ 968 };\ 969 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 970 typename p3##_type, typename p4##_type, typename p5##_type, \ 971 typename p6##_type, typename p7##_type, typename p8##_type>\ 972 inline name##MatcherP9<p0##_type, p1##_type, p2##_type, p3##_type, \ 973 p4##_type, p5##_type, p6##_type, p7##_type, \ 974 p8##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ 975 p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, \ 976 p8##_type p8) {\ 977 return name##MatcherP9<p0##_type, p1##_type, p2##_type, p3##_type, \ 978 p4##_type, p5##_type, p6##_type, p7##_type, p8##_type>(p0, p1, p2, \ 979 p3, p4, p5, p6, p7, p8);\ 980 }\ 981 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 982 typename p3##_type, typename p4##_type, typename p5##_type, \ 983 typename p6##_type, typename p7##_type, typename p8##_type>\ 984 template <typename arg_type>\ 985 bool name##MatcherP9<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ 986 p5##_type, p6##_type, p7##_type, \ 987 p8##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 988 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 989 ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 990 const 991 992 #define MATCHER_P10(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, description)\ 993 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 994 typename p3##_type, typename p4##_type, typename p5##_type, \ 995 typename p6##_type, typename p7##_type, typename p8##_type, \ 996 typename p9##_type>\ 997 class name##MatcherP10 {\ 998 public:\ 999 template <typename arg_type>\ 1000 class gmock_Impl : public ::testing::MatcherInterface<\ 1001 GTEST_REFERENCE_TO_CONST_(arg_type)> {\ 1002 public:\ 1003 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 1004 p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 1005 p6##_type gmock_p6, p7##_type gmock_p7, p8##_type gmock_p8, \ 1006 p9##_type gmock_p9)\ 1007 : p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1)), \ 1008 p2(::std::move(gmock_p2)), p3(::std::move(gmock_p3)), \ 1009 p4(::std::move(gmock_p4)), p5(::std::move(gmock_p5)), \ 1010 p6(::std::move(gmock_p6)), p7(::std::move(gmock_p7)), \ 1011 p8(::std::move(gmock_p8)), p9(::std::move(gmock_p9)) {}\ 1012 bool MatchAndExplain(\ 1013 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 1014 ::testing::MatchResultListener* result_listener) const override;\ 1015 void DescribeTo(::std::ostream* gmock_os) const override {\ 1016 *gmock_os << FormatDescription(false);\ 1017 }\ 1018 void DescribeNegationTo(::std::ostream* gmock_os) const override {\ 1019 *gmock_os << FormatDescription(true);\ 1020 }\ 1021 p0##_type const p0;\ 1022 p1##_type const p1;\ 1023 p2##_type const p2;\ 1024 p3##_type const p3;\ 1025 p4##_type const p4;\ 1026 p5##_type const p5;\ 1027 p6##_type const p6;\ 1028 p7##_type const p7;\ 1029 p8##_type const p8;\ 1030 p9##_type const p9;\ 1031 private:\ 1032 ::std::string FormatDescription(bool negation) const {\ 1033 ::std::string gmock_description = (description);\ 1034 if (!gmock_description.empty()) {\ 1035 return gmock_description;\ 1036 }\ 1037 return ::testing::internal::FormatMatcherDescription(\ 1038 negation, #name, \ 1039 ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 1040 ::std::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \ 1041 p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, \ 1042 p9##_type>(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)));\ 1043 }\ 1044 };\ 1045 template <typename arg_type>\ 1046 operator ::testing::Matcher<arg_type>() const {\ 1047 return ::testing::Matcher<arg_type>(\ 1048 new gmock_Impl<arg_type>(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9));\ 1049 }\ 1050 name##MatcherP10(p0##_type gmock_p0, p1##_type gmock_p1, \ 1051 p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ 1052 p5##_type gmock_p5, p6##_type gmock_p6, p7##_type gmock_p7, \ 1053 p8##_type gmock_p8, p9##_type gmock_p9) : p0(::std::move(gmock_p0)), \ 1054 p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \ 1055 p3(::std::move(gmock_p3)), p4(::std::move(gmock_p4)), \ 1056 p5(::std::move(gmock_p5)), p6(::std::move(gmock_p6)), \ 1057 p7(::std::move(gmock_p7)), p8(::std::move(gmock_p8)), \ 1058 p9(::std::move(gmock_p9)) {\ 1059 }\ 1060 p0##_type const p0;\ 1061 p1##_type const p1;\ 1062 p2##_type const p2;\ 1063 p3##_type const p3;\ 1064 p4##_type const p4;\ 1065 p5##_type const p5;\ 1066 p6##_type const p6;\ 1067 p7##_type const p7;\ 1068 p8##_type const p8;\ 1069 p9##_type const p9;\ 1070 private:\ 1071 };\ 1072 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 1073 typename p3##_type, typename p4##_type, typename p5##_type, \ 1074 typename p6##_type, typename p7##_type, typename p8##_type, \ 1075 typename p9##_type>\ 1076 inline name##MatcherP10<p0##_type, p1##_type, p2##_type, p3##_type, \ 1077 p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, \ 1078 p9##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ 1079 p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, p8##_type p8, \ 1080 p9##_type p9) {\ 1081 return name##MatcherP10<p0##_type, p1##_type, p2##_type, p3##_type, \ 1082 p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, p9##_type>(p0, \ 1083 p1, p2, p3, p4, p5, p6, p7, p8, p9);\ 1084 }\ 1085 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 1086 typename p3##_type, typename p4##_type, typename p5##_type, \ 1087 typename p6##_type, typename p7##_type, typename p8##_type, \ 1088 typename p9##_type>\ 1089 template <typename arg_type>\ 1090 bool name##MatcherP10<p0##_type, p1##_type, p2##_type, p3##_type, \ 1091 p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, \ 1092 p9##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 1093 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 1094 ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 1095 const 1096 1097 #endif // GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_MATCHERS_H_ 1098