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