gmock-generated-matchers.h 40.8 KB
Newer Older
1
2
3
// This file was GENERATED by command:
//     pump.py gmock-generated-matchers.h.pump
// DO NOT EDIT BY HAND!!!
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

// Copyright 2008, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

// Google Mock - a framework for writing C++ mock classes.
//
// This file implements some commonly used variadic matchers.

Gennadiy Civil's avatar
 
Gennadiy Civil committed
38
39
// GOOGLETEST_CM0002 DO NOT DELETE

40
41
42
#ifndef GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_MATCHERS_H_
#define GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_MATCHERS_H_

43
#include <iterator>
44
45
#include <sstream>
#include <string>
Abseil Team's avatar
Abseil Team committed
46
#include <utility>
47
#include <vector>
48
#include "gmock/gmock-matchers.h"
49

zhanyong.wan's avatar
zhanyong.wan committed
50
// The MATCHER* family of macros can be used in a namespace scope to
zhanyong.wan's avatar
zhanyong.wan committed
51
52
53
54
55
56
// define custom matchers easily.
//
// Basic Usage
// ===========
//
// The syntax
zhanyong.wan's avatar
zhanyong.wan committed
57
58
59
//
//   MATCHER(name, description_string) { statements; }
//
zhanyong.wan's avatar
zhanyong.wan committed
60
61
62
63
// defines a matcher with the given name that executes the statements,
// which must return a bool to indicate if the match succeeds.  Inside
// the statements, you can refer to the value being matched by 'arg',
// and refer to its type by 'arg_type'.
64
65
66
67
68
69
70
71
72
73
//
// The description string documents what the matcher does, and is used
// to generate the failure message when the match fails.  Since a
// MATCHER() is usually defined in a header file shared by multiple
// C++ source files, we require the description to be a C-string
// literal to avoid possible side effects.  It can be empty, in which
// case we'll use the sequence of words in the matcher name as the
// description.
//
// For example:
zhanyong.wan's avatar
zhanyong.wan committed
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
//
//   MATCHER(IsEven, "") { return (arg % 2) == 0; }
//
// allows you to write
//
//   // Expects mock_foo.Bar(n) to be called where n is even.
//   EXPECT_CALL(mock_foo, Bar(IsEven()));
//
// or,
//
//   // Verifies that the value of some_expression is even.
//   EXPECT_THAT(some_expression, IsEven());
//
// If the above assertion fails, it will print something like:
//
//   Value of: some_expression
//   Expected: is even
//     Actual: 7
//
// where the description "is even" is automatically calculated from the
// matcher name IsEven.
//
zhanyong.wan's avatar
zhanyong.wan committed
96
97
98
// Argument Type
// =============
//
zhanyong.wan's avatar
zhanyong.wan committed
99
100
101
102
103
104
105
106
107
108
// Note that the type of the value being matched (arg_type) is
// determined by the context in which you use the matcher and is
// supplied to you by the compiler, so you don't need to worry about
// declaring it (nor can you).  This allows the matcher to be
// polymorphic.  For example, IsEven() can be used to match any type
// where the value of "(arg % 2) == 0" can be implicitly converted to
// a bool.  In the "Bar(IsEven())" example above, if method Bar()
// takes an int, 'arg_type' will be int; if it takes an unsigned long,
// 'arg_type' will be unsigned long; and so on.
//
zhanyong.wan's avatar
zhanyong.wan committed
109
110
111
// Parameterizing Matchers
// =======================
//
zhanyong.wan's avatar
zhanyong.wan committed
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
// Sometimes you'll want to parameterize the matcher.  For that you
// can use another macro:
//
//   MATCHER_P(name, param_name, description_string) { statements; }
//
// For example:
//
//   MATCHER_P(HasAbsoluteValue, value, "") { return abs(arg) == value; }
//
// will allow you to write:
//
//   EXPECT_THAT(Blah("a"), HasAbsoluteValue(n));
//
// which may lead to this message (assuming n is 10):
//
//   Value of: Blah("a")
//   Expected: has absolute value 10
//     Actual: -9
//
// Note that both the matcher description and its parameter are
// printed, making the message human-friendly.
//
// In the matcher definition body, you can write 'foo_type' to
// reference the type of a parameter named 'foo'.  For example, in the
// body of MATCHER_P(HasAbsoluteValue, value) above, you can write
// 'value_type' to refer to the type of 'value'.
//
// We also provide MATCHER_P2, MATCHER_P3, ..., up to MATCHER_P10 to
// support multi-parameter matchers.
//
zhanyong.wan's avatar
zhanyong.wan committed
142
143
144
// Describing Parameterized Matchers
// =================================
//
145
146
147
148
149
150
151
152
153
154
// The last argument to MATCHER*() is a string-typed expression.  The
// expression can reference all of the matcher's parameters and a
// special bool-typed variable named 'negation'.  When 'negation' is
// false, the expression should evaluate to the matcher's description;
// otherwise it should evaluate to the description of the negation of
// the matcher.  For example,
//
//   using testing::PrintToString;
//
//   MATCHER_P2(InClosedRange, low, hi,
155
//       std::string(negation ? "is not" : "is") + " in range [" +
156
//       PrintToString(low) + ", " + PrintToString(hi) + "]") {
157
158
159
160
//     return low <= arg && arg <= hi;
//   }
//   ...
//   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
170
171
172
173
174
175
//
// If you specify "" as the description, the failure message will
// contain the sequence of words in the matcher name followed by the
// parameter values printed as a tuple.  For example,
//
//   MATCHER_P2(InClosedRange, low, hi, "") { ... }
//   ...
//   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
//
zhanyong.wan's avatar
zhanyong.wan committed
184
185
186
// Types of Matcher Parameters
// ===========================
//
zhanyong.wan's avatar
zhanyong.wan committed
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
// For the purpose of typing, you can view
//
//   MATCHER_Pk(Foo, p1, ..., pk, description_string) { ... }
//
// as shorthand for
//
//   template <typename p1_type, ..., typename pk_type>
//   FooMatcherPk<p1_type, ..., pk_type>
//   Foo(p1_type p1, ..., pk_type pk) { ... }
//
// When you write Foo(v1, ..., vk), the compiler infers the types of
// the parameters v1, ..., and vk for you.  If you are not happy with
// the result of the type inference, you can specify the types by
// explicitly instantiating the template, as in Foo<long, bool>(5,
// false).  As said earlier, you don't get to (or need to) specify
// 'arg_type' as that's determined by the context in which the matcher
// is used.  You can assign the result of expression Foo(p1, ..., pk)
// to a variable of type FooMatcherPk<p1_type, ..., pk_type>.  This
// can be useful when composing matchers.
//
// While you can instantiate a matcher template with reference types,
// passing the parameters by pointer usually makes your code more
// readable.  If, however, you still want to pass a parameter by
// reference, be aware that in the failure message generated by the
// matcher you will see the value of the referenced object but not its
// address.
//
zhanyong.wan's avatar
zhanyong.wan committed
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
// Explaining Match Results
// ========================
//
// Sometimes the matcher description alone isn't enough to explain why
// the match has failed or succeeded.  For example, when expecting a
// long string, it can be very helpful to also print the diff between
// the expected string and the actual one.  To achieve that, you can
// optionally stream additional information to a special variable
// named result_listener, whose type is a pointer to class
// MatchResultListener:
//
//   MATCHER_P(EqualsLongString, str, "") {
//     if (arg == str) return true;
//
//     *result_listener << "the difference: "
///                     << DiffStrings(str, arg);
//     return false;
//   }
//
// Overloading Matchers
// ====================
//
zhanyong.wan's avatar
zhanyong.wan committed
236
237
238
239
240
// You can overload matchers with different numbers of parameters:
//
//   MATCHER_P(Blah, a, description_string1) { ... }
//   MATCHER_P2(Blah, a, b, description_string2) { ... }
//
zhanyong.wan's avatar
zhanyong.wan committed
241
242
// Caveats
// =======
zhanyong.wan's avatar
zhanyong.wan committed
243
//
zhanyong.wan's avatar
zhanyong.wan committed
244
245
246
247
248
249
250
251
// When defining a new matcher, you should also consider implementing
// MatcherInterface or using MakePolymorphicMatcher().  These
// approaches require more work than the MATCHER* macros, but also
// give you more control on the types of the value being matched and
// the matcher parameters, which may leads to better compiler error
// messages when the matcher is used wrong.  They also allow
// overloading matchers based on parameter types (as opposed to just
// based on the number of parameters).
zhanyong.wan's avatar
zhanyong.wan committed
252
//
253
254
// MATCHER*() can only be used in a namespace scope as templates cannot be
// declared inside of a local class.
zhanyong.wan's avatar
zhanyong.wan committed
255
//
zhanyong.wan's avatar
zhanyong.wan committed
256
257
// More Information
// ================
zhanyong.wan's avatar
zhanyong.wan committed
258
259
//
// To learn more about using these macros, please search for 'MATCHER'
Abseil Team's avatar
Abseil Team committed
260
// on
Gennadiy Civil's avatar
 
Gennadiy Civil committed
261
// https://github.com/google/googletest/blob/master/googlemock/docs/cook_book.md
zhanyong.wan's avatar
zhanyong.wan committed
262
263

#define MATCHER(name, description)\
Abseil Team's avatar
Abseil Team committed
264
265
266
267
  class name##Matcher : public \
      ::testing::internal::MatcherBaseImpl<name##Matcher> {\
    using __internal_base_type = \
        ::testing::internal::MatcherBaseImpl<name##Matcher>;\
zhanyong.wan's avatar
zhanyong.wan committed
268
   public:\
Abseil Team's avatar
Abseil Team committed
269
    using __internal_base_type::__internal_base_type;\
zhanyong.wan's avatar
zhanyong.wan committed
270
    template <typename arg_type>\
271
272
    class gmock_Impl : public ::testing::MatcherInterface<\
        GTEST_REFERENCE_TO_CONST_(arg_type)> {\
zhanyong.wan's avatar
zhanyong.wan committed
273
     public:\
274
275
      gmock_Impl()\
           {}\
Robert Luberda's avatar
Robert Luberda committed
276
      bool MatchAndExplain(\
277
          GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
Robert Luberda's avatar
Robert Luberda committed
278
279
          ::testing::MatchResultListener* result_listener) const override;\
      void DescribeTo(::std::ostream* gmock_os) const override {\
280
281
        *gmock_os << FormatDescription(false);\
      }\
Robert Luberda's avatar
Robert Luberda committed
282
      void DescribeNegationTo(::std::ostream* gmock_os) const override {\
283
        *gmock_os << FormatDescription(true);\
zhanyong.wan's avatar
zhanyong.wan committed
284
      }\
285
     private:\
286
287
      ::std::string FormatDescription(bool negation) const {\
        ::std::string gmock_description = (description);\
288
        if (!gmock_description.empty()) {\
289
          return gmock_description;\
290
        }\
291
        return ::testing::internal::FormatMatcherDescription(\
292
            negation, #name, \
293
            ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\
Abseil Team's avatar
Abseil Team committed
294
                ::std::tuple<>()));\
295
      }\
zhanyong.wan's avatar
zhanyong.wan committed
296
297
298
299
300
301
    };\
  };\
  inline name##Matcher name() {\
    return name##Matcher();\
  }\
  template <typename arg_type>\
zhanyong.wan's avatar
zhanyong.wan committed
302
  bool name##Matcher::gmock_Impl<arg_type>::MatchAndExplain(\
303
      GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
zhanyong.wan's avatar
zhanyong.wan committed
304
305
      ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\
          const
zhanyong.wan's avatar
zhanyong.wan committed
306
307
308

#define MATCHER_P(name, p0, description)\
  template <typename p0##_type>\
Abseil Team's avatar
Abseil Team committed
309
310
311
312
  class name##MatcherP : public \
      ::testing::internal::MatcherBaseImpl<name##MatcherP<p0##_type>> {\
    using __internal_base_type = \
        ::testing::internal::MatcherBaseImpl<name##MatcherP>;\
zhanyong.wan's avatar
zhanyong.wan committed
313
   public:\
Abseil Team's avatar
Abseil Team committed
314
    using __internal_base_type::__internal_base_type;\
zhanyong.wan's avatar
zhanyong.wan committed
315
    template <typename arg_type>\
316
317
    class gmock_Impl : public ::testing::MatcherInterface<\
        GTEST_REFERENCE_TO_CONST_(arg_type)> {\
zhanyong.wan's avatar
zhanyong.wan committed
318
     public:\
319
      explicit gmock_Impl(p0##_type gmock_p0)\
Abseil Team's avatar
Abseil Team committed
320
           : p0(::std::move(gmock_p0)) {}\
Robert Luberda's avatar
Robert Luberda committed
321
      bool MatchAndExplain(\
322
          GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
Robert Luberda's avatar
Robert Luberda committed
323
324
          ::testing::MatchResultListener* result_listener) const override;\
      void DescribeTo(::std::ostream* gmock_os) const override {\
325
326
        *gmock_os << FormatDescription(false);\
      }\
Robert Luberda's avatar
Robert Luberda committed
327
      void DescribeNegationTo(::std::ostream* gmock_os) const override {\
328
        *gmock_os << FormatDescription(true);\
zhanyong.wan's avatar
zhanyong.wan committed
329
      }\
330
      p0##_type const p0;\
331
     private:\
332
333
      ::std::string FormatDescription(bool negation) const {\
        ::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(\
Abseil Team's avatar
Abseil Team committed
340
                ::std::tuple<p0##_type>(p0)));\
341
      }\
zhanyong.wan's avatar
zhanyong.wan committed
342
343
344
345
346
347
348
349
    };\
  };\
  template <typename p0##_type>\
  inline name##MatcherP<p0##_type> name(p0##_type p0) {\
    return name##MatcherP<p0##_type>(p0);\
  }\
  template <typename p0##_type>\
  template <typename arg_type>\
zhanyong.wan's avatar
zhanyong.wan committed
350
  bool name##MatcherP<p0##_type>::gmock_Impl<arg_type>::MatchAndExplain(\
351
      GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
zhanyong.wan's avatar
zhanyong.wan committed
352
353
      ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\
          const
zhanyong.wan's avatar
zhanyong.wan committed
354
355
356

#define MATCHER_P2(name, p0, p1, description)\
  template <typename p0##_type, typename p1##_type>\
Abseil Team's avatar
Abseil Team committed
357
358
359
360
361
  class name##MatcherP2 : public \
      ::testing::internal::MatcherBaseImpl<name##MatcherP2<p0##_type, \
      p1##_type>> {\
    using __internal_base_type = \
        ::testing::internal::MatcherBaseImpl<name##MatcherP2>;\
zhanyong.wan's avatar
zhanyong.wan committed
362
   public:\
Abseil Team's avatar
Abseil Team committed
363
    using __internal_base_type::__internal_base_type;\
zhanyong.wan's avatar
zhanyong.wan committed
364
    template <typename arg_type>\
365
366
    class gmock_Impl : public ::testing::MatcherInterface<\
        GTEST_REFERENCE_TO_CONST_(arg_type)> {\
zhanyong.wan's avatar
zhanyong.wan committed
367
     public:\
368
      gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1)\
Abseil Team's avatar
Abseil Team committed
369
           : p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1)) {}\
Robert Luberda's avatar
Robert Luberda committed
370
      bool MatchAndExplain(\
371
          GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
Robert Luberda's avatar
Robert Luberda committed
372
373
          ::testing::MatchResultListener* result_listener) const override;\
      void DescribeTo(::std::ostream* gmock_os) const override {\
374
375
        *gmock_os << FormatDescription(false);\
      }\
Robert Luberda's avatar
Robert Luberda committed
376
      void DescribeNegationTo(::std::ostream* gmock_os) const override {\
377
        *gmock_os << FormatDescription(true);\
zhanyong.wan's avatar
zhanyong.wan committed
378
      }\
379
380
      p0##_type const p0;\
      p1##_type const p1;\
381
     private:\
382
383
      ::std::string FormatDescription(bool negation) const {\
        ::std::string gmock_description = (description);\
384
        if (!gmock_description.empty()) {\
385
          return gmock_description;\
386
        }\
387
        return ::testing::internal::FormatMatcherDescription(\
388
            negation, #name, \
389
            ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\
Abseil Team's avatar
Abseil Team committed
390
                ::std::tuple<p0##_type, p1##_type>(p0, p1)));\
391
      }\
zhanyong.wan's avatar
zhanyong.wan committed
392
393
394
395
396
397
398
399
400
    };\
  };\
  template <typename p0##_type, typename p1##_type>\
  inline name##MatcherP2<p0##_type, p1##_type> name(p0##_type p0, \
      p1##_type p1) {\
    return name##MatcherP2<p0##_type, p1##_type>(p0, p1);\
  }\
  template <typename p0##_type, typename p1##_type>\
  template <typename arg_type>\
zhanyong.wan's avatar
zhanyong.wan committed
401
402
  bool name##MatcherP2<p0##_type, \
      p1##_type>::gmock_Impl<arg_type>::MatchAndExplain(\
403
      GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
zhanyong.wan's avatar
zhanyong.wan committed
404
405
      ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\
          const
zhanyong.wan's avatar
zhanyong.wan committed
406
407
408

#define MATCHER_P3(name, p0, p1, p2, description)\
  template <typename p0##_type, typename p1##_type, typename p2##_type>\
Abseil Team's avatar
Abseil Team committed
409
410
411
412
413
  class name##MatcherP3 : public \
      ::testing::internal::MatcherBaseImpl<name##MatcherP3<p0##_type, \
      p1##_type, p2##_type>> {\
    using __internal_base_type = \
        ::testing::internal::MatcherBaseImpl<name##MatcherP3>;\
zhanyong.wan's avatar
zhanyong.wan committed
414
   public:\
Abseil Team's avatar
Abseil Team committed
415
    using __internal_base_type::__internal_base_type;\
zhanyong.wan's avatar
zhanyong.wan committed
416
    template <typename arg_type>\
417
418
    class gmock_Impl : public ::testing::MatcherInterface<\
        GTEST_REFERENCE_TO_CONST_(arg_type)> {\
zhanyong.wan's avatar
zhanyong.wan committed
419
     public:\
420
      gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2)\
Abseil Team's avatar
Abseil Team committed
421
422
           : p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1)), \
               p2(::std::move(gmock_p2)) {}\
Robert Luberda's avatar
Robert Luberda committed
423
      bool MatchAndExplain(\
424
          GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
Robert Luberda's avatar
Robert Luberda committed
425
426
          ::testing::MatchResultListener* result_listener) const override;\
      void DescribeTo(::std::ostream* gmock_os) const override {\
427
428
        *gmock_os << FormatDescription(false);\
      }\
Robert Luberda's avatar
Robert Luberda committed
429
      void DescribeNegationTo(::std::ostream* gmock_os) const override {\
430
        *gmock_os << FormatDescription(true);\
zhanyong.wan's avatar
zhanyong.wan committed
431
      }\
432
433
434
      p0##_type const p0;\
      p1##_type const p1;\
      p2##_type const p2;\
435
     private:\
436
437
      ::std::string FormatDescription(bool negation) const {\
        ::std::string gmock_description = (description);\
438
        if (!gmock_description.empty()) {\
439
          return gmock_description;\
440
        }\
441
        return ::testing::internal::FormatMatcherDescription(\
442
            negation, #name, \
443
            ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\
Abseil Team's avatar
Abseil Team committed
444
                ::std::tuple<p0##_type, p1##_type, p2##_type>(p0, p1, p2)));\
445
      }\
zhanyong.wan's avatar
zhanyong.wan committed
446
447
448
449
450
451
452
453
454
    };\
  };\
  template <typename p0##_type, typename p1##_type, typename p2##_type>\
  inline name##MatcherP3<p0##_type, p1##_type, p2##_type> name(p0##_type p0, \
      p1##_type p1, p2##_type p2) {\
    return name##MatcherP3<p0##_type, p1##_type, p2##_type>(p0, p1, p2);\
  }\
  template <typename p0##_type, typename p1##_type, typename p2##_type>\
  template <typename arg_type>\
zhanyong.wan's avatar
zhanyong.wan committed
455
456
  bool name##MatcherP3<p0##_type, p1##_type, \
      p2##_type>::gmock_Impl<arg_type>::MatchAndExplain(\
457
      GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
zhanyong.wan's avatar
zhanyong.wan committed
458
459
      ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\
          const
zhanyong.wan's avatar
zhanyong.wan committed
460
461
462
463

#define MATCHER_P4(name, p0, p1, p2, p3, description)\
  template <typename p0##_type, typename p1##_type, typename p2##_type, \
      typename p3##_type>\
Abseil Team's avatar
Abseil Team committed
464
465
466
467
468
  class name##MatcherP4 : public \
      ::testing::internal::MatcherBaseImpl<name##MatcherP4<p0##_type, \
      p1##_type, p2##_type, p3##_type>> {\
    using __internal_base_type = \
        ::testing::internal::MatcherBaseImpl<name##MatcherP4>;\
zhanyong.wan's avatar
zhanyong.wan committed
469
   public:\
Abseil Team's avatar
Abseil Team committed
470
    using __internal_base_type::__internal_base_type;\
zhanyong.wan's avatar
zhanyong.wan committed
471
    template <typename arg_type>\
472
473
    class gmock_Impl : public ::testing::MatcherInterface<\
        GTEST_REFERENCE_TO_CONST_(arg_type)> {\
zhanyong.wan's avatar
zhanyong.wan committed
474
475
     public:\
      gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
476
          p3##_type gmock_p3)\
Abseil Team's avatar
Abseil Team committed
477
478
           : p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1)), \
               p2(::std::move(gmock_p2)), p3(::std::move(gmock_p3)) {}\
Robert Luberda's avatar
Robert Luberda committed
479
      bool MatchAndExplain(\
480
          GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
Robert Luberda's avatar
Robert Luberda committed
481
482
          ::testing::MatchResultListener* result_listener) const override;\
      void DescribeTo(::std::ostream* gmock_os) const override {\
483
484
        *gmock_os << FormatDescription(false);\
      }\
Robert Luberda's avatar
Robert Luberda committed
485
      void DescribeNegationTo(::std::ostream* gmock_os) const override {\
486
        *gmock_os << FormatDescription(true);\
zhanyong.wan's avatar
zhanyong.wan committed
487
      }\
488
489
490
491
      p0##_type const p0;\
      p1##_type const p1;\
      p2##_type const p2;\
      p3##_type const p3;\
492
     private:\
493
494
      ::std::string FormatDescription(bool negation) const {\
        ::std::string gmock_description = (description);\
495
        if (!gmock_description.empty()) {\
496
          return gmock_description;\
497
        }\
498
        return ::testing::internal::FormatMatcherDescription(\
499
            negation, #name, \
500
            ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\
Abseil Team's avatar
Abseil Team committed
501
502
                ::std::tuple<p0##_type, p1##_type, p2##_type, p3##_type>(p0, \
                    p1, p2, p3)));\
503
      }\
zhanyong.wan's avatar
zhanyong.wan committed
504
505
506
507
508
509
510
511
512
513
514
515
516
    };\
  };\
  template <typename p0##_type, typename p1##_type, typename p2##_type, \
      typename p3##_type>\
  inline name##MatcherP4<p0##_type, p1##_type, p2##_type, \
      p3##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, \
      p3##_type p3) {\
    return name##MatcherP4<p0##_type, p1##_type, p2##_type, p3##_type>(p0, \
        p1, p2, p3);\
  }\
  template <typename p0##_type, typename p1##_type, typename p2##_type, \
      typename p3##_type>\
  template <typename arg_type>\
zhanyong.wan's avatar
zhanyong.wan committed
517
518
  bool name##MatcherP4<p0##_type, p1##_type, p2##_type, \
      p3##_type>::gmock_Impl<arg_type>::MatchAndExplain(\
519
      GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
zhanyong.wan's avatar
zhanyong.wan committed
520
521
      ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\
          const
zhanyong.wan's avatar
zhanyong.wan committed
522
523
524
525

#define MATCHER_P5(name, p0, p1, p2, p3, p4, description)\
  template <typename p0##_type, typename p1##_type, typename p2##_type, \
      typename p3##_type, typename p4##_type>\
Abseil Team's avatar
Abseil Team committed
526
527
528
529
530
  class name##MatcherP5 : public \
      ::testing::internal::MatcherBaseImpl<name##MatcherP5<p0##_type, \
      p1##_type, p2##_type, p3##_type, p4##_type>> {\
    using __internal_base_type = \
        ::testing::internal::MatcherBaseImpl<name##MatcherP5>;\
zhanyong.wan's avatar
zhanyong.wan committed
531
   public:\
Abseil Team's avatar
Abseil Team committed
532
    using __internal_base_type::__internal_base_type;\
zhanyong.wan's avatar
zhanyong.wan committed
533
    template <typename arg_type>\
534
535
    class gmock_Impl : public ::testing::MatcherInterface<\
        GTEST_REFERENCE_TO_CONST_(arg_type)> {\
zhanyong.wan's avatar
zhanyong.wan committed
536
537
     public:\
      gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
538
          p3##_type gmock_p3, p4##_type gmock_p4)\
Abseil Team's avatar
Abseil Team committed
539
540
541
           : p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1)), \
               p2(::std::move(gmock_p2)), p3(::std::move(gmock_p3)), \
               p4(::std::move(gmock_p4)) {}\
Robert Luberda's avatar
Robert Luberda committed
542
      bool MatchAndExplain(\
543
          GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
Robert Luberda's avatar
Robert Luberda committed
544
545
          ::testing::MatchResultListener* result_listener) const override;\
      void DescribeTo(::std::ostream* gmock_os) const override {\
546
547
        *gmock_os << FormatDescription(false);\
      }\
Robert Luberda's avatar
Robert Luberda committed
548
      void DescribeNegationTo(::std::ostream* gmock_os) const override {\
549
        *gmock_os << FormatDescription(true);\
zhanyong.wan's avatar
zhanyong.wan committed
550
      }\
551
552
553
554
555
      p0##_type const p0;\
      p1##_type const p1;\
      p2##_type const p2;\
      p3##_type const p3;\
      p4##_type const p4;\
556
     private:\
557
558
      ::std::string FormatDescription(bool negation) const {\
        ::std::string gmock_description = (description);\
559
        if (!gmock_description.empty()) {\
560
          return gmock_description;\
561
        }\
562
        return ::testing::internal::FormatMatcherDescription(\
563
            negation, #name, \
564
            ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\
Abseil Team's avatar
Abseil Team committed
565
                ::std::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \
566
567
                    p4##_type>(p0, p1, p2, p3, p4)));\
      }\
zhanyong.wan's avatar
zhanyong.wan committed
568
569
570
571
572
573
574
575
576
577
578
579
580
    };\
  };\
  template <typename p0##_type, typename p1##_type, typename p2##_type, \
      typename p3##_type, typename p4##_type>\
  inline name##MatcherP5<p0##_type, p1##_type, p2##_type, p3##_type, \
      p4##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \
      p4##_type p4) {\
    return name##MatcherP5<p0##_type, p1##_type, p2##_type, p3##_type, \
        p4##_type>(p0, p1, p2, p3, p4);\
  }\
  template <typename p0##_type, typename p1##_type, typename p2##_type, \
      typename p3##_type, typename p4##_type>\
  template <typename arg_type>\
zhanyong.wan's avatar
zhanyong.wan committed
581
582
  bool name##MatcherP5<p0##_type, p1##_type, p2##_type, p3##_type, \
      p4##_type>::gmock_Impl<arg_type>::MatchAndExplain(\
583
      GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
zhanyong.wan's avatar
zhanyong.wan committed
584
585
      ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\
          const
zhanyong.wan's avatar
zhanyong.wan committed
586
587
588
589

#define MATCHER_P6(name, p0, p1, p2, p3, p4, p5, description)\
  template <typename p0##_type, typename p1##_type, typename p2##_type, \
      typename p3##_type, typename p4##_type, typename p5##_type>\
Abseil Team's avatar
Abseil Team committed
590
591
592
593
594
  class name##MatcherP6 : public \
      ::testing::internal::MatcherBaseImpl<name##MatcherP6<p0##_type, \
      p1##_type, p2##_type, p3##_type, p4##_type, p5##_type>> {\
    using __internal_base_type = \
        ::testing::internal::MatcherBaseImpl<name##MatcherP6>;\
zhanyong.wan's avatar
zhanyong.wan committed
595
   public:\
Abseil Team's avatar
Abseil Team committed
596
    using __internal_base_type::__internal_base_type;\
zhanyong.wan's avatar
zhanyong.wan committed
597
    template <typename arg_type>\
598
599
    class gmock_Impl : public ::testing::MatcherInterface<\
        GTEST_REFERENCE_TO_CONST_(arg_type)> {\
zhanyong.wan's avatar
zhanyong.wan committed
600
601
     public:\
      gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
602
          p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5)\
Abseil Team's avatar
Abseil Team committed
603
604
605
           : p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1)), \
               p2(::std::move(gmock_p2)), p3(::std::move(gmock_p3)), \
               p4(::std::move(gmock_p4)), p5(::std::move(gmock_p5)) {}\
Robert Luberda's avatar
Robert Luberda committed
606
      bool MatchAndExplain(\
607
          GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
Robert Luberda's avatar
Robert Luberda committed
608
609
          ::testing::MatchResultListener* result_listener) const override;\
      void DescribeTo(::std::ostream* gmock_os) const override {\
610
611
        *gmock_os << FormatDescription(false);\
      }\
Robert Luberda's avatar
Robert Luberda committed
612
      void DescribeNegationTo(::std::ostream* gmock_os) const override {\
613
        *gmock_os << FormatDescription(true);\
zhanyong.wan's avatar
zhanyong.wan committed
614
      }\
615
616
617
618
619
620
      p0##_type const p0;\
      p1##_type const p1;\
      p2##_type const p2;\
      p3##_type const p3;\
      p4##_type const p4;\
      p5##_type const p5;\
621
     private:\
622
623
      ::std::string FormatDescription(bool negation) const {\
        ::std::string gmock_description = (description);\
624
        if (!gmock_description.empty()) {\
625
          return gmock_description;\
626
        }\
627
        return ::testing::internal::FormatMatcherDescription(\
628
            negation, #name, \
629
            ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\
Abseil Team's avatar
Abseil Team committed
630
                ::std::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \
631
632
                    p4##_type, p5##_type>(p0, p1, p2, p3, p4, p5)));\
      }\
zhanyong.wan's avatar
zhanyong.wan committed
633
634
635
636
637
638
639
640
641
642
643
644
645
646
    };\
  };\
  template <typename p0##_type, typename p1##_type, typename p2##_type, \
      typename p3##_type, typename p4##_type, typename p5##_type>\
  inline name##MatcherP6<p0##_type, p1##_type, p2##_type, p3##_type, \
      p4##_type, p5##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, \
      p3##_type p3, p4##_type p4, p5##_type p5) {\
    return name##MatcherP6<p0##_type, p1##_type, p2##_type, p3##_type, \
        p4##_type, p5##_type>(p0, p1, p2, p3, p4, p5);\
  }\
  template <typename p0##_type, typename p1##_type, typename p2##_type, \
      typename p3##_type, typename p4##_type, typename p5##_type>\
  template <typename arg_type>\
  bool name##MatcherP6<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \
zhanyong.wan's avatar
zhanyong.wan committed
647
      p5##_type>::gmock_Impl<arg_type>::MatchAndExplain(\
648
      GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
zhanyong.wan's avatar
zhanyong.wan committed
649
650
      ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\
          const
zhanyong.wan's avatar
zhanyong.wan committed
651
652
653
654
655

#define MATCHER_P7(name, p0, p1, p2, p3, p4, p5, p6, description)\
  template <typename p0##_type, typename p1##_type, typename p2##_type, \
      typename p3##_type, typename p4##_type, typename p5##_type, \
      typename p6##_type>\
Abseil Team's avatar
Abseil Team committed
656
657
658
659
660
  class name##MatcherP7 : public \
      ::testing::internal::MatcherBaseImpl<name##MatcherP7<p0##_type, \
      p1##_type, p2##_type, p3##_type, p4##_type, p5##_type, p6##_type>> {\
    using __internal_base_type = \
        ::testing::internal::MatcherBaseImpl<name##MatcherP7>;\
zhanyong.wan's avatar
zhanyong.wan committed
661
   public:\
Abseil Team's avatar
Abseil Team committed
662
    using __internal_base_type::__internal_base_type;\
zhanyong.wan's avatar
zhanyong.wan committed
663
    template <typename arg_type>\
664
665
    class gmock_Impl : public ::testing::MatcherInterface<\
        GTEST_REFERENCE_TO_CONST_(arg_type)> {\
zhanyong.wan's avatar
zhanyong.wan committed
666
667
668
     public:\
      gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
          p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \
669
          p6##_type gmock_p6)\
Abseil Team's avatar
Abseil Team committed
670
671
672
673
           : p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1)), \
               p2(::std::move(gmock_p2)), p3(::std::move(gmock_p3)), \
               p4(::std::move(gmock_p4)), p5(::std::move(gmock_p5)), \
               p6(::std::move(gmock_p6)) {}\
Robert Luberda's avatar
Robert Luberda committed
674
      bool MatchAndExplain(\
675
          GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
Robert Luberda's avatar
Robert Luberda committed
676
677
          ::testing::MatchResultListener* result_listener) const override;\
      void DescribeTo(::std::ostream* gmock_os) const override {\
678
679
        *gmock_os << FormatDescription(false);\
      }\
Robert Luberda's avatar
Robert Luberda committed
680
      void DescribeNegationTo(::std::ostream* gmock_os) const override {\
681
        *gmock_os << FormatDescription(true);\
zhanyong.wan's avatar
zhanyong.wan committed
682
      }\
683
684
685
686
687
688
689
      p0##_type const p0;\
      p1##_type const p1;\
      p2##_type const p2;\
      p3##_type const p3;\
      p4##_type const p4;\
      p5##_type const p5;\
      p6##_type const p6;\
690
     private:\
691
692
      ::std::string FormatDescription(bool negation) const {\
        ::std::string gmock_description = (description);\
693
        if (!gmock_description.empty()) {\
694
          return gmock_description;\
695
        }\
696
        return ::testing::internal::FormatMatcherDescription(\
697
            negation, #name, \
698
            ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\
Abseil Team's avatar
Abseil Team committed
699
                ::std::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \
700
701
702
                    p4##_type, p5##_type, p6##_type>(p0, p1, p2, p3, p4, p5, \
                    p6)));\
      }\
zhanyong.wan's avatar
zhanyong.wan committed
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
    };\
  };\
  template <typename p0##_type, typename p1##_type, typename p2##_type, \
      typename p3##_type, typename p4##_type, typename p5##_type, \
      typename p6##_type>\
  inline name##MatcherP7<p0##_type, p1##_type, p2##_type, p3##_type, \
      p4##_type, p5##_type, p6##_type> name(p0##_type p0, p1##_type p1, \
      p2##_type p2, p3##_type p3, p4##_type p4, p5##_type p5, \
      p6##_type p6) {\
    return name##MatcherP7<p0##_type, p1##_type, p2##_type, p3##_type, \
        p4##_type, p5##_type, p6##_type>(p0, p1, p2, p3, p4, p5, p6);\
  }\
  template <typename p0##_type, typename p1##_type, typename p2##_type, \
      typename p3##_type, typename p4##_type, typename p5##_type, \
      typename p6##_type>\
  template <typename arg_type>\
  bool name##MatcherP7<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \
zhanyong.wan's avatar
zhanyong.wan committed
720
      p5##_type, p6##_type>::gmock_Impl<arg_type>::MatchAndExplain(\
721
      GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
zhanyong.wan's avatar
zhanyong.wan committed
722
723
      ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\
          const
zhanyong.wan's avatar
zhanyong.wan committed
724
725
726
727
728

#define MATCHER_P8(name, p0, p1, p2, p3, p4, p5, p6, p7, description)\
  template <typename p0##_type, typename p1##_type, typename p2##_type, \
      typename p3##_type, typename p4##_type, typename p5##_type, \
      typename p6##_type, typename p7##_type>\
Abseil Team's avatar
Abseil Team committed
729
730
731
732
733
734
  class name##MatcherP8 : public \
      ::testing::internal::MatcherBaseImpl<name##MatcherP8<p0##_type, \
      p1##_type, p2##_type, p3##_type, p4##_type, p5##_type, p6##_type, \
      p7##_type>> {\
    using __internal_base_type = \
        ::testing::internal::MatcherBaseImpl<name##MatcherP8>;\
zhanyong.wan's avatar
zhanyong.wan committed
735
   public:\
Abseil Team's avatar
Abseil Team committed
736
    using __internal_base_type::__internal_base_type;\
zhanyong.wan's avatar
zhanyong.wan committed
737
    template <typename arg_type>\
738
739
    class gmock_Impl : public ::testing::MatcherInterface<\
        GTEST_REFERENCE_TO_CONST_(arg_type)> {\
zhanyong.wan's avatar
zhanyong.wan committed
740
741
742
     public:\
      gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
          p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \
743
          p6##_type gmock_p6, p7##_type gmock_p7)\
Abseil Team's avatar
Abseil Team committed
744
745
746
747
           : p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1)), \
               p2(::std::move(gmock_p2)), p3(::std::move(gmock_p3)), \
               p4(::std::move(gmock_p4)), p5(::std::move(gmock_p5)), \
               p6(::std::move(gmock_p6)), p7(::std::move(gmock_p7)) {}\
Robert Luberda's avatar
Robert Luberda committed
748
      bool MatchAndExplain(\
749
          GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
Robert Luberda's avatar
Robert Luberda committed
750
751
          ::testing::MatchResultListener* result_listener) const override;\
      void DescribeTo(::std::ostream* gmock_os) const override {\
752
753
        *gmock_os << FormatDescription(false);\
      }\
Robert Luberda's avatar
Robert Luberda committed
754
      void DescribeNegationTo(::std::ostream* gmock_os) const override {\
755
        *gmock_os << FormatDescription(true);\
zhanyong.wan's avatar
zhanyong.wan committed
756
      }\
757
758
759
760
761
762
763
764
      p0##_type const p0;\
      p1##_type const p1;\
      p2##_type const p2;\
      p3##_type const p3;\
      p4##_type const p4;\
      p5##_type const p5;\
      p6##_type const p6;\
      p7##_type const p7;\
765
     private:\
766
767
      ::std::string FormatDescription(bool negation) const {\
        ::std::string gmock_description = (description);\
768
        if (!gmock_description.empty()) {\
769
          return gmock_description;\
770
        }\
771
        return ::testing::internal::FormatMatcherDescription(\
772
            negation, #name, \
773
            ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\
Abseil Team's avatar
Abseil Team committed
774
                ::std::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \
775
776
777
                    p4##_type, p5##_type, p6##_type, p7##_type>(p0, p1, p2, \
                    p3, p4, p5, p6, p7)));\
      }\
zhanyong.wan's avatar
zhanyong.wan committed
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
    };\
  };\
  template <typename p0##_type, typename p1##_type, typename p2##_type, \
      typename p3##_type, typename p4##_type, typename p5##_type, \
      typename p6##_type, typename p7##_type>\
  inline name##MatcherP8<p0##_type, p1##_type, p2##_type, p3##_type, \
      p4##_type, p5##_type, p6##_type, p7##_type> name(p0##_type p0, \
      p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, p5##_type p5, \
      p6##_type p6, p7##_type p7) {\
    return name##MatcherP8<p0##_type, p1##_type, p2##_type, p3##_type, \
        p4##_type, p5##_type, p6##_type, p7##_type>(p0, p1, p2, p3, p4, p5, \
        p6, p7);\
  }\
  template <typename p0##_type, typename p1##_type, typename p2##_type, \
      typename p3##_type, typename p4##_type, typename p5##_type, \
      typename p6##_type, typename p7##_type>\
  template <typename arg_type>\
  bool name##MatcherP8<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \
zhanyong.wan's avatar
zhanyong.wan committed
796
797
      p5##_type, p6##_type, \
      p7##_type>::gmock_Impl<arg_type>::MatchAndExplain(\
798
      GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
zhanyong.wan's avatar
zhanyong.wan committed
799
800
      ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\
          const
zhanyong.wan's avatar
zhanyong.wan committed
801
802
803
804
805

#define MATCHER_P9(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, description)\
  template <typename p0##_type, typename p1##_type, typename p2##_type, \
      typename p3##_type, typename p4##_type, typename p5##_type, \
      typename p6##_type, typename p7##_type, typename p8##_type>\
Abseil Team's avatar
Abseil Team committed
806
807
808
809
810
811
  class name##MatcherP9 : public \
      ::testing::internal::MatcherBaseImpl<name##MatcherP9<p0##_type, \
      p1##_type, p2##_type, p3##_type, p4##_type, p5##_type, p6##_type, \
      p7##_type, p8##_type>> {\
    using __internal_base_type = \
        ::testing::internal::MatcherBaseImpl<name##MatcherP9>;\
zhanyong.wan's avatar
zhanyong.wan committed
812
   public:\
Abseil Team's avatar
Abseil Team committed
813
    using __internal_base_type::__internal_base_type;\
zhanyong.wan's avatar
zhanyong.wan committed
814
    template <typename arg_type>\
815
816
    class gmock_Impl : public ::testing::MatcherInterface<\
        GTEST_REFERENCE_TO_CONST_(arg_type)> {\
zhanyong.wan's avatar
zhanyong.wan committed
817
818
819
     public:\
      gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
          p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \
820
          p6##_type gmock_p6, p7##_type gmock_p7, p8##_type gmock_p8)\
Abseil Team's avatar
Abseil Team committed
821
822
823
824
825
           : p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1)), \
               p2(::std::move(gmock_p2)), p3(::std::move(gmock_p3)), \
               p4(::std::move(gmock_p4)), p5(::std::move(gmock_p5)), \
               p6(::std::move(gmock_p6)), p7(::std::move(gmock_p7)), \
               p8(::std::move(gmock_p8)) {}\
Robert Luberda's avatar
Robert Luberda committed
826
      bool MatchAndExplain(\
827
          GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
Robert Luberda's avatar
Robert Luberda committed
828
829
          ::testing::MatchResultListener* result_listener) const override;\
      void DescribeTo(::std::ostream* gmock_os) const override {\
830
831
        *gmock_os << FormatDescription(false);\
      }\
Robert Luberda's avatar
Robert Luberda committed
832
      void DescribeNegationTo(::std::ostream* gmock_os) const override {\
833
        *gmock_os << FormatDescription(true);\
zhanyong.wan's avatar
zhanyong.wan committed
834
      }\
835
836
837
838
839
840
841
842
843
      p0##_type const p0;\
      p1##_type const p1;\
      p2##_type const p2;\
      p3##_type const p3;\
      p4##_type const p4;\
      p5##_type const p5;\
      p6##_type const p6;\
      p7##_type const p7;\
      p8##_type const p8;\
844
     private:\
845
846
      ::std::string FormatDescription(bool negation) const {\
        ::std::string gmock_description = (description);\
847
        if (!gmock_description.empty()) {\
848
          return gmock_description;\
849
        }\
850
        return ::testing::internal::FormatMatcherDescription(\
851
            negation, #name, \
852
            ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\
Abseil Team's avatar
Abseil Team committed
853
                ::std::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \
854
855
856
                    p4##_type, p5##_type, p6##_type, p7##_type, \
                    p8##_type>(p0, p1, p2, p3, p4, p5, p6, p7, p8)));\
      }\
zhanyong.wan's avatar
zhanyong.wan committed
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
    };\
  };\
  template <typename p0##_type, typename p1##_type, typename p2##_type, \
      typename p3##_type, typename p4##_type, typename p5##_type, \
      typename p6##_type, typename p7##_type, typename p8##_type>\
  inline name##MatcherP9<p0##_type, p1##_type, p2##_type, p3##_type, \
      p4##_type, p5##_type, p6##_type, p7##_type, \
      p8##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \
      p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, \
      p8##_type p8) {\
    return name##MatcherP9<p0##_type, p1##_type, p2##_type, p3##_type, \
        p4##_type, p5##_type, p6##_type, p7##_type, p8##_type>(p0, p1, p2, \
        p3, p4, p5, p6, p7, p8);\
  }\
  template <typename p0##_type, typename p1##_type, typename p2##_type, \
      typename p3##_type, typename p4##_type, typename p5##_type, \
      typename p6##_type, typename p7##_type, typename p8##_type>\
  template <typename arg_type>\
  bool name##MatcherP9<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \
zhanyong.wan's avatar
zhanyong.wan committed
876
877
      p5##_type, p6##_type, p7##_type, \
      p8##_type>::gmock_Impl<arg_type>::MatchAndExplain(\
878
      GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
zhanyong.wan's avatar
zhanyong.wan committed
879
880
      ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\
          const
zhanyong.wan's avatar
zhanyong.wan committed
881
882
883
884
885
886

#define MATCHER_P10(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, description)\
  template <typename p0##_type, typename p1##_type, typename p2##_type, \
      typename p3##_type, typename p4##_type, typename p5##_type, \
      typename p6##_type, typename p7##_type, typename p8##_type, \
      typename p9##_type>\
Abseil Team's avatar
Abseil Team committed
887
888
889
890
891
892
  class name##MatcherP10 : public \
      ::testing::internal::MatcherBaseImpl<name##MatcherP10<p0##_type, \
      p1##_type, p2##_type, p3##_type, p4##_type, p5##_type, p6##_type, \
      p7##_type, p8##_type, p9##_type>> {\
    using __internal_base_type = \
        ::testing::internal::MatcherBaseImpl<name##MatcherP10>;\
zhanyong.wan's avatar
zhanyong.wan committed
893
   public:\
Abseil Team's avatar
Abseil Team committed
894
    using __internal_base_type::__internal_base_type;\
zhanyong.wan's avatar
zhanyong.wan committed
895
    template <typename arg_type>\
896
897
    class gmock_Impl : public ::testing::MatcherInterface<\
        GTEST_REFERENCE_TO_CONST_(arg_type)> {\
zhanyong.wan's avatar
zhanyong.wan committed
898
899
900
901
     public:\
      gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
          p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \
          p6##_type gmock_p6, p7##_type gmock_p7, p8##_type gmock_p8, \
902
          p9##_type gmock_p9)\
Abseil Team's avatar
Abseil Team committed
903
904
905
906
907
           : p0(::std::move(gmock_p0)), p1(::std::move(gmock_p1)), \
               p2(::std::move(gmock_p2)), p3(::std::move(gmock_p3)), \
               p4(::std::move(gmock_p4)), p5(::std::move(gmock_p5)), \
               p6(::std::move(gmock_p6)), p7(::std::move(gmock_p7)), \
               p8(::std::move(gmock_p8)), p9(::std::move(gmock_p9)) {}\
Robert Luberda's avatar
Robert Luberda committed
908
      bool MatchAndExplain(\
909
          GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
Robert Luberda's avatar
Robert Luberda committed
910
911
          ::testing::MatchResultListener* result_listener) const override;\
      void DescribeTo(::std::ostream* gmock_os) const override {\
912
913
        *gmock_os << FormatDescription(false);\
      }\
Robert Luberda's avatar
Robert Luberda committed
914
      void DescribeNegationTo(::std::ostream* gmock_os) const override {\
915
        *gmock_os << FormatDescription(true);\
zhanyong.wan's avatar
zhanyong.wan committed
916
      }\
917
918
919
920
921
922
923
924
925
926
      p0##_type const p0;\
      p1##_type const p1;\
      p2##_type const p2;\
      p3##_type const p3;\
      p4##_type const p4;\
      p5##_type const p5;\
      p6##_type const p6;\
      p7##_type const p7;\
      p8##_type const p8;\
      p9##_type const p9;\
927
     private:\
928
929
      ::std::string FormatDescription(bool negation) const {\
        ::std::string gmock_description = (description);\
930
        if (!gmock_description.empty()) {\
931
          return gmock_description;\
932
        }\
933
        return ::testing::internal::FormatMatcherDescription(\
934
            negation, #name, \
935
            ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\
Abseil Team's avatar
Abseil Team committed
936
                ::std::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \
937
938
939
                    p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, \
                    p9##_type>(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)));\
      }\
zhanyong.wan's avatar
zhanyong.wan committed
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
    };\
  };\
  template <typename p0##_type, typename p1##_type, typename p2##_type, \
      typename p3##_type, typename p4##_type, typename p5##_type, \
      typename p6##_type, typename p7##_type, typename p8##_type, \
      typename p9##_type>\
  inline name##MatcherP10<p0##_type, p1##_type, p2##_type, p3##_type, \
      p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, \
      p9##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \
      p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, p8##_type p8, \
      p9##_type p9) {\
    return name##MatcherP10<p0##_type, p1##_type, p2##_type, p3##_type, \
        p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, p9##_type>(p0, \
        p1, p2, p3, p4, p5, p6, p7, p8, p9);\
  }\
  template <typename p0##_type, typename p1##_type, typename p2##_type, \
      typename p3##_type, typename p4##_type, typename p5##_type, \
      typename p6##_type, typename p7##_type, typename p8##_type, \
      typename p9##_type>\
  template <typename arg_type>\
  bool name##MatcherP10<p0##_type, p1##_type, p2##_type, p3##_type, \
zhanyong.wan's avatar
zhanyong.wan committed
961
962
      p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, \
      p9##_type>::gmock_Impl<arg_type>::MatchAndExplain(\
963
      GTEST_REFERENCE_TO_CONST_(arg_type) arg,\
zhanyong.wan's avatar
zhanyong.wan committed
964
965
      ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\
          const
zhanyong.wan's avatar
zhanyong.wan committed
966

967
#endif  // GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_MATCHERS_H_