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. The reason is 254 // that C++ doesn't yet allow function-local types to be used to 255 // instantiate templates. The up-coming C++0x standard will fix this. 256 // Once that's done, we'll consider supporting using MATCHER*() inside 257 // a function. 258 // 259 // More Information 260 // ================ 261 // 262 // To learn more about using these macros, please search for 'MATCHER' 263 // on 264 // https://github.com/google/googletest/blob/master/googlemock/docs/CookBook.md 265 266 #define MATCHER(name, description)\ 267 class name##Matcher {\ 268 public:\ 269 template <typename arg_type>\ 270 class gmock_Impl : public ::testing::MatcherInterface<\ 271 GTEST_REFERENCE_TO_CONST_(arg_type)> {\ 272 public:\ 273 gmock_Impl()\ 274 {}\ 275 virtual bool MatchAndExplain(\ 276 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 277 ::testing::MatchResultListener* result_listener) const;\ 278 virtual void DescribeTo(::std::ostream* gmock_os) const {\ 279 *gmock_os << FormatDescription(false);\ 280 }\ 281 virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ 282 *gmock_os << FormatDescription(true);\ 283 }\ 284 private:\ 285 ::std::string FormatDescription(bool negation) const {\ 286 ::std::string gmock_description = (description);\ 287 if (!gmock_description.empty()) {\ 288 return gmock_description;\ 289 }\ 290 return ::testing::internal::FormatMatcherDescription(\ 291 negation, #name, \ 292 ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 293 ::std::tuple<>()));\ 294 }\ 295 };\ 296 template <typename arg_type>\ 297 operator ::testing::Matcher<arg_type>() const {\ 298 return ::testing::Matcher<arg_type>(\ 299 new gmock_Impl<arg_type>());\ 300 }\ 301 name##Matcher() {\ 302 }\ 303 private:\ 304 };\ 305 inline name##Matcher name() {\ 306 return name##Matcher();\ 307 }\ 308 template <typename arg_type>\ 309 bool name##Matcher::gmock_Impl<arg_type>::MatchAndExplain(\ 310 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 311 ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 312 const 313 314 #define MATCHER_P(name, p0, description)\ 315 template <typename p0##_type>\ 316 class name##MatcherP {\ 317 public:\ 318 template <typename arg_type>\ 319 class gmock_Impl : public ::testing::MatcherInterface<\ 320 GTEST_REFERENCE_TO_CONST_(arg_type)> {\ 321 public:\ 322 explicit gmock_Impl(p0##_type gmock_p0)\ 323 : p0(::std::move(gmock_p0)) {}\ 324 virtual bool MatchAndExplain(\ 325 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 326 ::testing::MatchResultListener* result_listener) const;\ 327 virtual void DescribeTo(::std::ostream* gmock_os) const {\ 328 *gmock_os << FormatDescription(false);\ 329 }\ 330 virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ 331 *gmock_os << FormatDescription(true);\ 332 }\ 333 p0##_type const p0;\ 334 private:\ 335 ::std::string FormatDescription(bool negation) const {\ 336 ::std::string gmock_description = (description);\ 337 if (!gmock_description.empty()) {\ 338 return gmock_description;\ 339 }\ 340 return ::testing::internal::FormatMatcherDescription(\ 341 negation, #name, \ 342 ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 343 ::std::tuple<p0##_type>(p0)));\ 344 }\ 345 };\ 346 template <typename arg_type>\ 347 operator ::testing::Matcher<arg_type>() const {\ 348 return ::testing::Matcher<arg_type>(\ 349 new gmock_Impl<arg_type>(p0));\ 350 }\ 351 explicit name##MatcherP(p0##_type gmock_p0) : p0(::std::move(gmock_p0)) {\ 352 }\ 353 p0##_type const p0;\ 354 private:\ 355 };\ 356 template <typename p0##_type>\ 357 inline name##MatcherP<p0##_type> name(p0##_type p0) {\ 358 return name##MatcherP<p0##_type>(p0);\ 359 }\ 360 template <typename p0##_type>\ 361 template <typename arg_type>\ 362 bool name##MatcherP<p0##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 363 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 364 ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 365 const 366 367 #define MATCHER_P2(name, p0, p1, description)\ 368 template <typename p0##_type, typename p1##_type>\ 369 class name##MatcherP2 {\ 370 public:\ 371 template <typename arg_type>\ 372 class gmock_Impl : public ::testing::MatcherInterface<\ 373 GTEST_REFERENCE_TO_CONST_(arg_type)> {\ 374 public:\ 375 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1)\ 376 : p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1)) {}\ 377 virtual bool MatchAndExplain(\ 378 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 379 ::testing::MatchResultListener* result_listener) const;\ 380 virtual void DescribeTo(::std::ostream* gmock_os) const {\ 381 *gmock_os << FormatDescription(false);\ 382 }\ 383 virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ 384 *gmock_os << FormatDescription(true);\ 385 }\ 386 p0##_type const p0;\ 387 p1##_type const p1;\ 388 private:\ 389 ::std::string FormatDescription(bool negation) const {\ 390 ::std::string gmock_description = (description);\ 391 if (!gmock_description.empty()) {\ 392 return gmock_description;\ 393 }\ 394 return ::testing::internal::FormatMatcherDescription(\ 395 negation, #name, \ 396 ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 397 ::std::tuple<p0##_type, p1##_type>(p0, p1)));\ 398 }\ 399 };\ 400 template <typename arg_type>\ 401 operator ::testing::Matcher<arg_type>() const {\ 402 return ::testing::Matcher<arg_type>(\ 403 new gmock_Impl<arg_type>(p0, p1));\ 404 }\ 405 name##MatcherP2(p0##_type gmock_p0, \ 406 p1##_type gmock_p1) : p0(::std::move(gmock_p0)), \ 407 p1(::std::move(gmock_p1)) {\ 408 }\ 409 p0##_type const p0;\ 410 p1##_type const p1;\ 411 private:\ 412 };\ 413 template <typename p0##_type, typename p1##_type>\ 414 inline name##MatcherP2<p0##_type, p1##_type> name(p0##_type p0, \ 415 p1##_type p1) {\ 416 return name##MatcherP2<p0##_type, p1##_type>(p0, p1);\ 417 }\ 418 template <typename p0##_type, typename p1##_type>\ 419 template <typename arg_type>\ 420 bool name##MatcherP2<p0##_type, \ 421 p1##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 422 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 423 ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 424 const 425 426 #define MATCHER_P3(name, p0, p1, p2, description)\ 427 template <typename p0##_type, typename p1##_type, typename p2##_type>\ 428 class name##MatcherP3 {\ 429 public:\ 430 template <typename arg_type>\ 431 class gmock_Impl : public ::testing::MatcherInterface<\ 432 GTEST_REFERENCE_TO_CONST_(arg_type)> {\ 433 public:\ 434 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2)\ 435 : p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1)), \ 436 p2(::std::move(gmock_p2)) {}\ 437 virtual bool MatchAndExplain(\ 438 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 439 ::testing::MatchResultListener* result_listener) const;\ 440 virtual void DescribeTo(::std::ostream* gmock_os) const {\ 441 *gmock_os << FormatDescription(false);\ 442 }\ 443 virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ 444 *gmock_os << FormatDescription(true);\ 445 }\ 446 p0##_type const p0;\ 447 p1##_type const p1;\ 448 p2##_type const p2;\ 449 private:\ 450 ::std::string FormatDescription(bool negation) const {\ 451 ::std::string gmock_description = (description);\ 452 if (!gmock_description.empty()) {\ 453 return gmock_description;\ 454 }\ 455 return ::testing::internal::FormatMatcherDescription(\ 456 negation, #name, \ 457 ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 458 ::std::tuple<p0##_type, p1##_type, p2##_type>(p0, p1, p2)));\ 459 }\ 460 };\ 461 template <typename arg_type>\ 462 operator ::testing::Matcher<arg_type>() const {\ 463 return ::testing::Matcher<arg_type>(\ 464 new gmock_Impl<arg_type>(p0, p1, p2));\ 465 }\ 466 name##MatcherP3(p0##_type gmock_p0, p1##_type gmock_p1, \ 467 p2##_type gmock_p2) : p0(::std::move(gmock_p0)), \ 468 p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)) {\ 469 }\ 470 p0##_type const p0;\ 471 p1##_type const p1;\ 472 p2##_type const p2;\ 473 private:\ 474 };\ 475 template <typename p0##_type, typename p1##_type, typename p2##_type>\ 476 inline name##MatcherP3<p0##_type, p1##_type, p2##_type> name(p0##_type p0, \ 477 p1##_type p1, p2##_type p2) {\ 478 return name##MatcherP3<p0##_type, p1##_type, p2##_type>(p0, p1, p2);\ 479 }\ 480 template <typename p0##_type, typename p1##_type, typename p2##_type>\ 481 template <typename arg_type>\ 482 bool name##MatcherP3<p0##_type, p1##_type, \ 483 p2##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 484 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 485 ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 486 const 487 488 #define MATCHER_P4(name, p0, p1, p2, p3, description)\ 489 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 490 typename p3##_type>\ 491 class name##MatcherP4 {\ 492 public:\ 493 template <typename arg_type>\ 494 class gmock_Impl : public ::testing::MatcherInterface<\ 495 GTEST_REFERENCE_TO_CONST_(arg_type)> {\ 496 public:\ 497 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 498 p3##_type gmock_p3)\ 499 : p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1)), \ 500 p2(::std::move(gmock_p2)), p3(::std::move(gmock_p3)) {}\ 501 virtual bool MatchAndExplain(\ 502 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 503 ::testing::MatchResultListener* result_listener) const;\ 504 virtual void DescribeTo(::std::ostream* gmock_os) const {\ 505 *gmock_os << FormatDescription(false);\ 506 }\ 507 virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ 508 *gmock_os << FormatDescription(true);\ 509 }\ 510 p0##_type const p0;\ 511 p1##_type const p1;\ 512 p2##_type const p2;\ 513 p3##_type const p3;\ 514 private:\ 515 ::std::string FormatDescription(bool negation) const {\ 516 ::std::string gmock_description = (description);\ 517 if (!gmock_description.empty()) {\ 518 return gmock_description;\ 519 }\ 520 return ::testing::internal::FormatMatcherDescription(\ 521 negation, #name, \ 522 ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 523 ::std::tuple<p0##_type, p1##_type, p2##_type, p3##_type>(p0, \ 524 p1, p2, p3)));\ 525 }\ 526 };\ 527 template <typename arg_type>\ 528 operator ::testing::Matcher<arg_type>() const {\ 529 return ::testing::Matcher<arg_type>(\ 530 new gmock_Impl<arg_type>(p0, p1, p2, p3));\ 531 }\ 532 name##MatcherP4(p0##_type gmock_p0, p1##_type gmock_p1, \ 533 p2##_type gmock_p2, p3##_type gmock_p3) : p0(::std::move(gmock_p0)), \ 534 p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \ 535 p3(::std::move(gmock_p3)) {\ 536 }\ 537 p0##_type const p0;\ 538 p1##_type const p1;\ 539 p2##_type const p2;\ 540 p3##_type const p3;\ 541 private:\ 542 };\ 543 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 544 typename p3##_type>\ 545 inline name##MatcherP4<p0##_type, p1##_type, p2##_type, \ 546 p3##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, \ 547 p3##_type p3) {\ 548 return name##MatcherP4<p0##_type, p1##_type, p2##_type, p3##_type>(p0, \ 549 p1, p2, p3);\ 550 }\ 551 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 552 typename p3##_type>\ 553 template <typename arg_type>\ 554 bool name##MatcherP4<p0##_type, p1##_type, p2##_type, \ 555 p3##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 556 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 557 ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 558 const 559 560 #define MATCHER_P5(name, p0, p1, p2, p3, p4, description)\ 561 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 562 typename p3##_type, typename p4##_type>\ 563 class name##MatcherP5 {\ 564 public:\ 565 template <typename arg_type>\ 566 class gmock_Impl : public ::testing::MatcherInterface<\ 567 GTEST_REFERENCE_TO_CONST_(arg_type)> {\ 568 public:\ 569 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 570 p3##_type gmock_p3, p4##_type gmock_p4)\ 571 : p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1)), \ 572 p2(::std::move(gmock_p2)), p3(::std::move(gmock_p3)), \ 573 p4(::std::move(gmock_p4)) {}\ 574 virtual bool MatchAndExplain(\ 575 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 576 ::testing::MatchResultListener* result_listener) const;\ 577 virtual void DescribeTo(::std::ostream* gmock_os) const {\ 578 *gmock_os << FormatDescription(false);\ 579 }\ 580 virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ 581 *gmock_os << FormatDescription(true);\ 582 }\ 583 p0##_type const p0;\ 584 p1##_type const p1;\ 585 p2##_type const p2;\ 586 p3##_type const p3;\ 587 p4##_type const p4;\ 588 private:\ 589 ::std::string FormatDescription(bool negation) const {\ 590 ::std::string gmock_description = (description);\ 591 if (!gmock_description.empty()) {\ 592 return gmock_description;\ 593 }\ 594 return ::testing::internal::FormatMatcherDescription(\ 595 negation, #name, \ 596 ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 597 ::std::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \ 598 p4##_type>(p0, p1, p2, p3, p4)));\ 599 }\ 600 };\ 601 template <typename arg_type>\ 602 operator ::testing::Matcher<arg_type>() const {\ 603 return ::testing::Matcher<arg_type>(\ 604 new gmock_Impl<arg_type>(p0, p1, p2, p3, p4));\ 605 }\ 606 name##MatcherP5(p0##_type gmock_p0, p1##_type gmock_p1, \ 607 p2##_type gmock_p2, p3##_type gmock_p3, \ 608 p4##_type gmock_p4) : p0(::std::move(gmock_p0)), \ 609 p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \ 610 p3(::std::move(gmock_p3)), p4(::std::move(gmock_p4)) {\ 611 }\ 612 p0##_type const p0;\ 613 p1##_type const p1;\ 614 p2##_type const p2;\ 615 p3##_type const p3;\ 616 p4##_type const p4;\ 617 private:\ 618 };\ 619 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 620 typename p3##_type, typename p4##_type>\ 621 inline name##MatcherP5<p0##_type, p1##_type, p2##_type, p3##_type, \ 622 p4##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ 623 p4##_type p4) {\ 624 return name##MatcherP5<p0##_type, p1##_type, p2##_type, p3##_type, \ 625 p4##_type>(p0, p1, p2, p3, p4);\ 626 }\ 627 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 628 typename p3##_type, typename p4##_type>\ 629 template <typename arg_type>\ 630 bool name##MatcherP5<p0##_type, p1##_type, p2##_type, p3##_type, \ 631 p4##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 632 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 633 ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 634 const 635 636 #define MATCHER_P6(name, p0, p1, p2, p3, p4, p5, description)\ 637 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 638 typename p3##_type, typename p4##_type, typename p5##_type>\ 639 class name##MatcherP6 {\ 640 public:\ 641 template <typename arg_type>\ 642 class gmock_Impl : public ::testing::MatcherInterface<\ 643 GTEST_REFERENCE_TO_CONST_(arg_type)> {\ 644 public:\ 645 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 646 p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5)\ 647 : p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1)), \ 648 p2(::std::move(gmock_p2)), p3(::std::move(gmock_p3)), \ 649 p4(::std::move(gmock_p4)), p5(::std::move(gmock_p5)) {}\ 650 virtual bool MatchAndExplain(\ 651 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 652 ::testing::MatchResultListener* result_listener) const;\ 653 virtual void DescribeTo(::std::ostream* gmock_os) const {\ 654 *gmock_os << FormatDescription(false);\ 655 }\ 656 virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ 657 *gmock_os << FormatDescription(true);\ 658 }\ 659 p0##_type const p0;\ 660 p1##_type const p1;\ 661 p2##_type const p2;\ 662 p3##_type const p3;\ 663 p4##_type const p4;\ 664 p5##_type const p5;\ 665 private:\ 666 ::std::string FormatDescription(bool negation) const {\ 667 ::std::string gmock_description = (description);\ 668 if (!gmock_description.empty()) {\ 669 return gmock_description;\ 670 }\ 671 return ::testing::internal::FormatMatcherDescription(\ 672 negation, #name, \ 673 ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 674 ::std::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \ 675 p4##_type, p5##_type>(p0, p1, p2, p3, p4, p5)));\ 676 }\ 677 };\ 678 template <typename arg_type>\ 679 operator ::testing::Matcher<arg_type>() const {\ 680 return ::testing::Matcher<arg_type>(\ 681 new gmock_Impl<arg_type>(p0, p1, p2, p3, p4, p5));\ 682 }\ 683 name##MatcherP6(p0##_type gmock_p0, p1##_type gmock_p1, \ 684 p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ 685 p5##_type gmock_p5) : p0(::std::move(gmock_p0)), \ 686 p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \ 687 p3(::std::move(gmock_p3)), p4(::std::move(gmock_p4)), \ 688 p5(::std::move(gmock_p5)) {\ 689 }\ 690 p0##_type const p0;\ 691 p1##_type const p1;\ 692 p2##_type const p2;\ 693 p3##_type const p3;\ 694 p4##_type const p4;\ 695 p5##_type const p5;\ 696 private:\ 697 };\ 698 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 699 typename p3##_type, typename p4##_type, typename p5##_type>\ 700 inline name##MatcherP6<p0##_type, p1##_type, p2##_type, p3##_type, \ 701 p4##_type, p5##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, \ 702 p3##_type p3, p4##_type p4, p5##_type p5) {\ 703 return name##MatcherP6<p0##_type, p1##_type, p2##_type, p3##_type, \ 704 p4##_type, p5##_type>(p0, p1, p2, p3, p4, p5);\ 705 }\ 706 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 707 typename p3##_type, typename p4##_type, typename p5##_type>\ 708 template <typename arg_type>\ 709 bool name##MatcherP6<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ 710 p5##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 711 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 712 ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 713 const 714 715 #define MATCHER_P7(name, p0, p1, p2, p3, p4, p5, p6, description)\ 716 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 717 typename p3##_type, typename p4##_type, typename p5##_type, \ 718 typename p6##_type>\ 719 class name##MatcherP7 {\ 720 public:\ 721 template <typename arg_type>\ 722 class gmock_Impl : public ::testing::MatcherInterface<\ 723 GTEST_REFERENCE_TO_CONST_(arg_type)> {\ 724 public:\ 725 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 726 p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 727 p6##_type gmock_p6)\ 728 : p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1)), \ 729 p2(::std::move(gmock_p2)), p3(::std::move(gmock_p3)), \ 730 p4(::std::move(gmock_p4)), p5(::std::move(gmock_p5)), \ 731 p6(::std::move(gmock_p6)) {}\ 732 virtual bool MatchAndExplain(\ 733 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 734 ::testing::MatchResultListener* result_listener) const;\ 735 virtual void DescribeTo(::std::ostream* gmock_os) const {\ 736 *gmock_os << FormatDescription(false);\ 737 }\ 738 virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ 739 *gmock_os << FormatDescription(true);\ 740 }\ 741 p0##_type const p0;\ 742 p1##_type const p1;\ 743 p2##_type const p2;\ 744 p3##_type const p3;\ 745 p4##_type const p4;\ 746 p5##_type const p5;\ 747 p6##_type const p6;\ 748 private:\ 749 ::std::string FormatDescription(bool negation) const {\ 750 ::std::string gmock_description = (description);\ 751 if (!gmock_description.empty()) {\ 752 return gmock_description;\ 753 }\ 754 return ::testing::internal::FormatMatcherDescription(\ 755 negation, #name, \ 756 ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 757 ::std::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \ 758 p4##_type, p5##_type, p6##_type>(p0, p1, p2, p3, p4, p5, \ 759 p6)));\ 760 }\ 761 };\ 762 template <typename arg_type>\ 763 operator ::testing::Matcher<arg_type>() const {\ 764 return ::testing::Matcher<arg_type>(\ 765 new gmock_Impl<arg_type>(p0, p1, p2, p3, p4, p5, p6));\ 766 }\ 767 name##MatcherP7(p0##_type gmock_p0, p1##_type gmock_p1, \ 768 p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ 769 p5##_type gmock_p5, p6##_type gmock_p6) : p0(::std::move(gmock_p0)), \ 770 p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \ 771 p3(::std::move(gmock_p3)), p4(::std::move(gmock_p4)), \ 772 p5(::std::move(gmock_p5)), p6(::std::move(gmock_p6)) {\ 773 }\ 774 p0##_type const p0;\ 775 p1##_type const p1;\ 776 p2##_type const p2;\ 777 p3##_type const p3;\ 778 p4##_type const p4;\ 779 p5##_type const p5;\ 780 p6##_type const p6;\ 781 private:\ 782 };\ 783 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 784 typename p3##_type, typename p4##_type, typename p5##_type, \ 785 typename p6##_type>\ 786 inline name##MatcherP7<p0##_type, p1##_type, p2##_type, p3##_type, \ 787 p4##_type, p5##_type, p6##_type> name(p0##_type p0, p1##_type p1, \ 788 p2##_type p2, p3##_type p3, p4##_type p4, p5##_type p5, \ 789 p6##_type p6) {\ 790 return name##MatcherP7<p0##_type, p1##_type, p2##_type, p3##_type, \ 791 p4##_type, p5##_type, p6##_type>(p0, p1, p2, p3, p4, p5, p6);\ 792 }\ 793 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 794 typename p3##_type, typename p4##_type, typename p5##_type, \ 795 typename p6##_type>\ 796 template <typename arg_type>\ 797 bool name##MatcherP7<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ 798 p5##_type, p6##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 799 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 800 ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 801 const 802 803 #define MATCHER_P8(name, p0, p1, p2, p3, p4, p5, p6, p7, description)\ 804 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 805 typename p3##_type, typename p4##_type, typename p5##_type, \ 806 typename p6##_type, typename p7##_type>\ 807 class name##MatcherP8 {\ 808 public:\ 809 template <typename arg_type>\ 810 class gmock_Impl : public ::testing::MatcherInterface<\ 811 GTEST_REFERENCE_TO_CONST_(arg_type)> {\ 812 public:\ 813 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 814 p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 815 p6##_type gmock_p6, p7##_type gmock_p7)\ 816 : p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1)), \ 817 p2(::std::move(gmock_p2)), p3(::std::move(gmock_p3)), \ 818 p4(::std::move(gmock_p4)), p5(::std::move(gmock_p5)), \ 819 p6(::std::move(gmock_p6)), p7(::std::move(gmock_p7)) {}\ 820 virtual bool MatchAndExplain(\ 821 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 822 ::testing::MatchResultListener* result_listener) const;\ 823 virtual void DescribeTo(::std::ostream* gmock_os) const {\ 824 *gmock_os << FormatDescription(false);\ 825 }\ 826 virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ 827 *gmock_os << FormatDescription(true);\ 828 }\ 829 p0##_type const p0;\ 830 p1##_type const p1;\ 831 p2##_type const p2;\ 832 p3##_type const p3;\ 833 p4##_type const p4;\ 834 p5##_type const p5;\ 835 p6##_type const p6;\ 836 p7##_type const p7;\ 837 private:\ 838 ::std::string FormatDescription(bool negation) const {\ 839 ::std::string gmock_description = (description);\ 840 if (!gmock_description.empty()) {\ 841 return gmock_description;\ 842 }\ 843 return ::testing::internal::FormatMatcherDescription(\ 844 negation, #name, \ 845 ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 846 ::std::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \ 847 p4##_type, p5##_type, p6##_type, p7##_type>(p0, p1, p2, \ 848 p3, p4, p5, p6, p7)));\ 849 }\ 850 };\ 851 template <typename arg_type>\ 852 operator ::testing::Matcher<arg_type>() const {\ 853 return ::testing::Matcher<arg_type>(\ 854 new gmock_Impl<arg_type>(p0, p1, p2, p3, p4, p5, p6, p7));\ 855 }\ 856 name##MatcherP8(p0##_type gmock_p0, p1##_type gmock_p1, \ 857 p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ 858 p5##_type gmock_p5, p6##_type gmock_p6, \ 859 p7##_type gmock_p7) : p0(::std::move(gmock_p0)), \ 860 p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \ 861 p3(::std::move(gmock_p3)), p4(::std::move(gmock_p4)), \ 862 p5(::std::move(gmock_p5)), p6(::std::move(gmock_p6)), \ 863 p7(::std::move(gmock_p7)) {\ 864 }\ 865 p0##_type const p0;\ 866 p1##_type const p1;\ 867 p2##_type const p2;\ 868 p3##_type const p3;\ 869 p4##_type const p4;\ 870 p5##_type const p5;\ 871 p6##_type const p6;\ 872 p7##_type const p7;\ 873 private:\ 874 };\ 875 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 876 typename p3##_type, typename p4##_type, typename p5##_type, \ 877 typename p6##_type, typename p7##_type>\ 878 inline name##MatcherP8<p0##_type, p1##_type, p2##_type, p3##_type, \ 879 p4##_type, p5##_type, p6##_type, p7##_type> name(p0##_type p0, \ 880 p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, p5##_type p5, \ 881 p6##_type p6, p7##_type p7) {\ 882 return name##MatcherP8<p0##_type, p1##_type, p2##_type, p3##_type, \ 883 p4##_type, p5##_type, p6##_type, p7##_type>(p0, p1, p2, p3, p4, p5, \ 884 p6, p7);\ 885 }\ 886 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 887 typename p3##_type, typename p4##_type, typename p5##_type, \ 888 typename p6##_type, typename p7##_type>\ 889 template <typename arg_type>\ 890 bool name##MatcherP8<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ 891 p5##_type, p6##_type, \ 892 p7##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 893 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 894 ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 895 const 896 897 #define MATCHER_P9(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, description)\ 898 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 899 typename p3##_type, typename p4##_type, typename p5##_type, \ 900 typename p6##_type, typename p7##_type, typename p8##_type>\ 901 class name##MatcherP9 {\ 902 public:\ 903 template <typename arg_type>\ 904 class gmock_Impl : public ::testing::MatcherInterface<\ 905 GTEST_REFERENCE_TO_CONST_(arg_type)> {\ 906 public:\ 907 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 908 p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 909 p6##_type gmock_p6, p7##_type gmock_p7, p8##_type gmock_p8)\ 910 : p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1)), \ 911 p2(::std::move(gmock_p2)), p3(::std::move(gmock_p3)), \ 912 p4(::std::move(gmock_p4)), p5(::std::move(gmock_p5)), \ 913 p6(::std::move(gmock_p6)), p7(::std::move(gmock_p7)), \ 914 p8(::std::move(gmock_p8)) {}\ 915 virtual bool MatchAndExplain(\ 916 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 917 ::testing::MatchResultListener* result_listener) const;\ 918 virtual void DescribeTo(::std::ostream* gmock_os) const {\ 919 *gmock_os << FormatDescription(false);\ 920 }\ 921 virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ 922 *gmock_os << FormatDescription(true);\ 923 }\ 924 p0##_type const p0;\ 925 p1##_type const p1;\ 926 p2##_type const p2;\ 927 p3##_type const p3;\ 928 p4##_type const p4;\ 929 p5##_type const p5;\ 930 p6##_type const p6;\ 931 p7##_type const p7;\ 932 p8##_type const p8;\ 933 private:\ 934 ::std::string FormatDescription(bool negation) const {\ 935 ::std::string gmock_description = (description);\ 936 if (!gmock_description.empty()) {\ 937 return gmock_description;\ 938 }\ 939 return ::testing::internal::FormatMatcherDescription(\ 940 negation, #name, \ 941 ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 942 ::std::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \ 943 p4##_type, p5##_type, p6##_type, p7##_type, \ 944 p8##_type>(p0, p1, p2, p3, p4, p5, p6, p7, p8)));\ 945 }\ 946 };\ 947 template <typename arg_type>\ 948 operator ::testing::Matcher<arg_type>() const {\ 949 return ::testing::Matcher<arg_type>(\ 950 new gmock_Impl<arg_type>(p0, p1, p2, p3, p4, p5, p6, p7, p8));\ 951 }\ 952 name##MatcherP9(p0##_type gmock_p0, p1##_type gmock_p1, \ 953 p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ 954 p5##_type gmock_p5, p6##_type gmock_p6, p7##_type gmock_p7, \ 955 p8##_type gmock_p8) : p0(::std::move(gmock_p0)), \ 956 p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \ 957 p3(::std::move(gmock_p3)), p4(::std::move(gmock_p4)), \ 958 p5(::std::move(gmock_p5)), p6(::std::move(gmock_p6)), \ 959 p7(::std::move(gmock_p7)), p8(::std::move(gmock_p8)) {\ 960 }\ 961 p0##_type const p0;\ 962 p1##_type const p1;\ 963 p2##_type const p2;\ 964 p3##_type const p3;\ 965 p4##_type const p4;\ 966 p5##_type const p5;\ 967 p6##_type const p6;\ 968 p7##_type const p7;\ 969 p8##_type const p8;\ 970 private:\ 971 };\ 972 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 973 typename p3##_type, typename p4##_type, typename p5##_type, \ 974 typename p6##_type, typename p7##_type, typename p8##_type>\ 975 inline name##MatcherP9<p0##_type, p1##_type, p2##_type, p3##_type, \ 976 p4##_type, p5##_type, p6##_type, p7##_type, \ 977 p8##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ 978 p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, \ 979 p8##_type p8) {\ 980 return name##MatcherP9<p0##_type, p1##_type, p2##_type, p3##_type, \ 981 p4##_type, p5##_type, p6##_type, p7##_type, p8##_type>(p0, p1, p2, \ 982 p3, p4, p5, p6, p7, p8);\ 983 }\ 984 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 985 typename p3##_type, typename p4##_type, typename p5##_type, \ 986 typename p6##_type, typename p7##_type, typename p8##_type>\ 987 template <typename arg_type>\ 988 bool name##MatcherP9<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ 989 p5##_type, p6##_type, p7##_type, \ 990 p8##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 991 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 992 ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 993 const 994 995 #define MATCHER_P10(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, description)\ 996 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 997 typename p3##_type, typename p4##_type, typename p5##_type, \ 998 typename p6##_type, typename p7##_type, typename p8##_type, \ 999 typename p9##_type>\ 1000 class name##MatcherP10 {\ 1001 public:\ 1002 template <typename arg_type>\ 1003 class gmock_Impl : public ::testing::MatcherInterface<\ 1004 GTEST_REFERENCE_TO_CONST_(arg_type)> {\ 1005 public:\ 1006 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ 1007 p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ 1008 p6##_type gmock_p6, p7##_type gmock_p7, p8##_type gmock_p8, \ 1009 p9##_type gmock_p9)\ 1010 : p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1)), \ 1011 p2(::std::move(gmock_p2)), p3(::std::move(gmock_p3)), \ 1012 p4(::std::move(gmock_p4)), p5(::std::move(gmock_p5)), \ 1013 p6(::std::move(gmock_p6)), p7(::std::move(gmock_p7)), \ 1014 p8(::std::move(gmock_p8)), p9(::std::move(gmock_p9)) {}\ 1015 virtual bool MatchAndExplain(\ 1016 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 1017 ::testing::MatchResultListener* result_listener) const;\ 1018 virtual void DescribeTo(::std::ostream* gmock_os) const {\ 1019 *gmock_os << FormatDescription(false);\ 1020 }\ 1021 virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ 1022 *gmock_os << FormatDescription(true);\ 1023 }\ 1024 p0##_type const p0;\ 1025 p1##_type const p1;\ 1026 p2##_type const p2;\ 1027 p3##_type const p3;\ 1028 p4##_type const p4;\ 1029 p5##_type const p5;\ 1030 p6##_type const p6;\ 1031 p7##_type const p7;\ 1032 p8##_type const p8;\ 1033 p9##_type const p9;\ 1034 private:\ 1035 ::std::string FormatDescription(bool negation) const {\ 1036 ::std::string gmock_description = (description);\ 1037 if (!gmock_description.empty()) {\ 1038 return gmock_description;\ 1039 }\ 1040 return ::testing::internal::FormatMatcherDescription(\ 1041 negation, #name, \ 1042 ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ 1043 ::std::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \ 1044 p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, \ 1045 p9##_type>(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)));\ 1046 }\ 1047 };\ 1048 template <typename arg_type>\ 1049 operator ::testing::Matcher<arg_type>() const {\ 1050 return ::testing::Matcher<arg_type>(\ 1051 new gmock_Impl<arg_type>(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9));\ 1052 }\ 1053 name##MatcherP10(p0##_type gmock_p0, p1##_type gmock_p1, \ 1054 p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ 1055 p5##_type gmock_p5, p6##_type gmock_p6, p7##_type gmock_p7, \ 1056 p8##_type gmock_p8, p9##_type gmock_p9) : p0(::std::move(gmock_p0)), \ 1057 p1(::std::move(gmock_p1)), p2(::std::move(gmock_p2)), \ 1058 p3(::std::move(gmock_p3)), p4(::std::move(gmock_p4)), \ 1059 p5(::std::move(gmock_p5)), p6(::std::move(gmock_p6)), \ 1060 p7(::std::move(gmock_p7)), p8(::std::move(gmock_p8)), \ 1061 p9(::std::move(gmock_p9)) {\ 1062 }\ 1063 p0##_type const p0;\ 1064 p1##_type const p1;\ 1065 p2##_type const p2;\ 1066 p3##_type const p3;\ 1067 p4##_type const p4;\ 1068 p5##_type const p5;\ 1069 p6##_type const p6;\ 1070 p7##_type const p7;\ 1071 p8##_type const p8;\ 1072 p9##_type const p9;\ 1073 private:\ 1074 };\ 1075 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 1076 typename p3##_type, typename p4##_type, typename p5##_type, \ 1077 typename p6##_type, typename p7##_type, typename p8##_type, \ 1078 typename p9##_type>\ 1079 inline name##MatcherP10<p0##_type, p1##_type, p2##_type, p3##_type, \ 1080 p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, \ 1081 p9##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ 1082 p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, p8##_type p8, \ 1083 p9##_type p9) {\ 1084 return name##MatcherP10<p0##_type, p1##_type, p2##_type, p3##_type, \ 1085 p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, p9##_type>(p0, \ 1086 p1, p2, p3, p4, p5, p6, p7, p8, p9);\ 1087 }\ 1088 template <typename p0##_type, typename p1##_type, typename p2##_type, \ 1089 typename p3##_type, typename p4##_type, typename p5##_type, \ 1090 typename p6##_type, typename p7##_type, typename p8##_type, \ 1091 typename p9##_type>\ 1092 template <typename arg_type>\ 1093 bool name##MatcherP10<p0##_type, p1##_type, p2##_type, p3##_type, \ 1094 p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, \ 1095 p9##_type>::gmock_Impl<arg_type>::MatchAndExplain(\ 1096 GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ 1097 ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ 1098 const 1099 1100 #endif // GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_MATCHERS_H_ 1101