OLD | NEW |
1 // Copyright 2007, Google Inc. | 1 // Copyright 2007, Google Inc. |
2 // All rights reserved. | 2 // All rights reserved. |
3 // | 3 // |
4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
5 // modification, are permitted provided that the following conditions are | 5 // modification, are permitted provided that the following conditions are |
6 // met: | 6 // met: |
7 // | 7 // |
8 // * Redistributions of source code must retain the above copyright | 8 // * Redistributions of source code must retain the above copyright |
9 // notice, this list of conditions and the following disclaimer. | 9 // notice, this list of conditions and the following disclaimer. |
10 // * Redistributions in binary form must reproduce the above | 10 // * Redistributions in binary form must reproduce the above |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
58 using testing::Return; | 58 using testing::Return; |
59 using testing::ReturnArg; | 59 using testing::ReturnArg; |
60 using testing::SaveArg; | 60 using testing::SaveArg; |
61 using testing::SetArgReferee; | 61 using testing::SetArgReferee; |
62 using testing::SetArgumentPointee; | 62 using testing::SetArgumentPointee; |
63 using testing::StaticAssertTypeEq; | 63 using testing::StaticAssertTypeEq; |
64 using testing::Unused; | 64 using testing::Unused; |
65 using testing::WithArg; | 65 using testing::WithArg; |
66 using testing::WithoutArgs; | 66 using testing::WithoutArgs; |
67 | 67 |
| 68 // For suppressing compiler warnings on conversion possibly losing precision. |
| 69 inline short Short(short n) { return n; } // NOLINT |
| 70 inline char Char(char ch) { return ch; } |
| 71 |
68 // Sample functions and functors for testing Invoke() and etc. | 72 // Sample functions and functors for testing Invoke() and etc. |
69 int Nullary() { return 1; } | 73 int Nullary() { return 1; } |
70 | 74 |
71 class NullaryFunctor { | 75 class NullaryFunctor { |
72 public: | 76 public: |
73 int operator()() { return 2; } | 77 int operator()() { return 2; } |
74 }; | 78 }; |
75 | 79 |
76 bool g_done = false; | 80 bool g_done = false; |
77 void VoidNullary() { g_done = true; } | 81 void VoidNullary() { g_done = true; } |
78 | 82 |
79 class VoidNullaryFunctor { | 83 class VoidNullaryFunctor { |
80 public: | 84 public: |
81 void operator()() { g_done = true; } | 85 void operator()() { g_done = true; } |
82 }; | 86 }; |
83 | 87 |
84 bool Unary(int x) { return x < 0; } | 88 bool Unary(int x) { return x < 0; } |
85 | 89 |
86 const char* Plus1(const char* s) { return s + 1; } | 90 const char* Plus1(const char* s) { return s + 1; } |
87 | 91 |
88 void VoidUnary(int n) { g_done = true; } | 92 void VoidUnary(int /* n */) { g_done = true; } |
89 | 93 |
90 bool ByConstRef(const string& s) { return s == "Hi"; } | 94 bool ByConstRef(const string& s) { return s == "Hi"; } |
91 | 95 |
92 const double g_double = 0; | 96 const double g_double = 0; |
93 bool ReferencesGlobalDouble(const double& x) { return &x == &g_double; } | 97 bool ReferencesGlobalDouble(const double& x) { return &x == &g_double; } |
94 | 98 |
95 string ByNonConstRef(string& s) { return s += "+"; } // NOLINT | 99 string ByNonConstRef(string& s) { return s += "+"; } // NOLINT |
96 | 100 |
97 struct UnaryFunctor { | 101 struct UnaryFunctor { |
98 int operator()(bool x) { return x ? 1 : -1; } | 102 int operator()(bool x) { return x ? 1 : -1; } |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
232 TEST(InvokeTest, Unary) { | 236 TEST(InvokeTest, Unary) { |
233 Action<bool(int)> a = Invoke(Unary); // NOLINT | 237 Action<bool(int)> a = Invoke(Unary); // NOLINT |
234 EXPECT_FALSE(a.Perform(make_tuple(1))); | 238 EXPECT_FALSE(a.Perform(make_tuple(1))); |
235 EXPECT_TRUE(a.Perform(make_tuple(-1))); | 239 EXPECT_TRUE(a.Perform(make_tuple(-1))); |
236 } | 240 } |
237 | 241 |
238 // Tests using Invoke() with a binary function. | 242 // Tests using Invoke() with a binary function. |
239 TEST(InvokeTest, Binary) { | 243 TEST(InvokeTest, Binary) { |
240 Action<const char*(const char*, short)> a = Invoke(Binary); // NOLINT | 244 Action<const char*(const char*, short)> a = Invoke(Binary); // NOLINT |
241 const char* p = "Hello"; | 245 const char* p = "Hello"; |
242 EXPECT_EQ(p + 2, a.Perform(make_tuple(p, 2))); | 246 EXPECT_EQ(p + 2, a.Perform(make_tuple(p, Short(2)))); |
243 } | 247 } |
244 | 248 |
245 // Tests using Invoke() with a ternary function. | 249 // Tests using Invoke() with a ternary function. |
246 TEST(InvokeTest, Ternary) { | 250 TEST(InvokeTest, Ternary) { |
247 Action<int(int, char, short)> a = Invoke(Ternary); // NOLINT | 251 Action<int(int, char, short)> a = Invoke(Ternary); // NOLINT |
248 EXPECT_EQ(6, a.Perform(make_tuple(1, '\2', 3))); | 252 EXPECT_EQ(6, a.Perform(make_tuple(1, '\2', Short(3)))); |
249 } | 253 } |
250 | 254 |
251 // Tests using Invoke() with a 4-argument function. | 255 // Tests using Invoke() with a 4-argument function. |
252 TEST(InvokeTest, FunctionThatTakes4Arguments) { | 256 TEST(InvokeTest, FunctionThatTakes4Arguments) { |
253 Action<int(int, int, int, int)> a = Invoke(SumOf4); // NOLINT | 257 Action<int(int, int, int, int)> a = Invoke(SumOf4); // NOLINT |
254 EXPECT_EQ(1234, a.Perform(make_tuple(1000, 200, 30, 4))); | 258 EXPECT_EQ(1234, a.Perform(make_tuple(1000, 200, 30, 4))); |
255 } | 259 } |
256 | 260 |
257 // Tests using Invoke() with a 5-argument function. | 261 // Tests using Invoke() with a 5-argument function. |
258 TEST(InvokeTest, FunctionThatTakes5Arguments) { | 262 TEST(InvokeTest, FunctionThatTakes5Arguments) { |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
333 Invoke(&foo, &Foo::SumOfLast2); | 337 Invoke(&foo, &Foo::SumOfLast2); |
334 EXPECT_EQ(12, a1.Perform(make_tuple(CharPtr("hi"), true, 10, 2))); | 338 EXPECT_EQ(12, a1.Perform(make_tuple(CharPtr("hi"), true, 10, 2))); |
335 | 339 |
336 Action<int(char, double, int, int)> a2 = | 340 Action<int(char, double, int, int)> a2 = |
337 Invoke(&foo, &Foo::SumOfLast2); | 341 Invoke(&foo, &Foo::SumOfLast2); |
338 EXPECT_EQ(23, a2.Perform(make_tuple('a', 2.5, 20, 3))); | 342 EXPECT_EQ(23, a2.Perform(make_tuple('a', 2.5, 20, 3))); |
339 } | 343 } |
340 | 344 |
341 // Tests using Invoke() with a functor. | 345 // Tests using Invoke() with a functor. |
342 TEST(InvokeTest, Functor) { | 346 TEST(InvokeTest, Functor) { |
343 Action<int(short, char)> a = Invoke(plus<short>()); // NOLINT | 347 Action<long(long, int)> a = Invoke(plus<long>()); // NOLINT |
344 EXPECT_EQ(3, a.Perform(make_tuple(1, 2))); | 348 EXPECT_EQ(3L, a.Perform(make_tuple(1, 2))); |
345 } | 349 } |
346 | 350 |
347 // Tests using Invoke(f) as an action of a compatible type. | 351 // Tests using Invoke(f) as an action of a compatible type. |
348 TEST(InvokeTest, FunctionWithCompatibleType) { | 352 TEST(InvokeTest, FunctionWithCompatibleType) { |
349 Action<long(int, short, char, bool)> a = Invoke(SumOf4); // NOLINT | 353 Action<long(int, short, char, bool)> a = Invoke(SumOf4); // NOLINT |
350 EXPECT_EQ(4321, a.Perform(make_tuple(4000, 300, 20, true))); | 354 EXPECT_EQ(4321, a.Perform(make_tuple(4000, Short(300), Char(20), true))); |
351 } | 355 } |
352 | 356 |
353 // Tests using Invoke() with an object pointer and a method pointer. | 357 // Tests using Invoke() with an object pointer and a method pointer. |
354 | 358 |
355 // Tests using Invoke() with a nullary method. | 359 // Tests using Invoke() with a nullary method. |
356 TEST(InvokeMethodTest, Nullary) { | 360 TEST(InvokeMethodTest, Nullary) { |
357 Foo foo; | 361 Foo foo; |
358 Action<int()> a = Invoke(&foo, &Foo::Nullary); // NOLINT | 362 Action<int()> a = Invoke(&foo, &Foo::Nullary); // NOLINT |
359 EXPECT_EQ(123, a.Perform(make_tuple())); | 363 EXPECT_EQ(123, a.Perform(make_tuple())); |
360 } | 364 } |
(...skipping 10 matching lines...) Expand all Loading... |
371 Foo foo; | 375 Foo foo; |
372 Action<string(const string&, char)> a = Invoke(&foo, &Foo::Binary); | 376 Action<string(const string&, char)> a = Invoke(&foo, &Foo::Binary); |
373 string s("Hell"); | 377 string s("Hell"); |
374 EXPECT_EQ("Hello", a.Perform(make_tuple(s, 'o'))); | 378 EXPECT_EQ("Hello", a.Perform(make_tuple(s, 'o'))); |
375 } | 379 } |
376 | 380 |
377 // Tests using Invoke() with a ternary method. | 381 // Tests using Invoke() with a ternary method. |
378 TEST(InvokeMethodTest, Ternary) { | 382 TEST(InvokeMethodTest, Ternary) { |
379 Foo foo; | 383 Foo foo; |
380 Action<int(int, bool, char)> a = Invoke(&foo, &Foo::Ternary); // NOLINT | 384 Action<int(int, bool, char)> a = Invoke(&foo, &Foo::Ternary); // NOLINT |
381 EXPECT_EQ(1124, a.Perform(make_tuple(1000, true, 1))); | 385 EXPECT_EQ(1124, a.Perform(make_tuple(1000, true, Char(1)))); |
382 } | 386 } |
383 | 387 |
384 // Tests using Invoke() with a 4-argument method. | 388 // Tests using Invoke() with a 4-argument method. |
385 TEST(InvokeMethodTest, MethodThatTakes4Arguments) { | 389 TEST(InvokeMethodTest, MethodThatTakes4Arguments) { |
386 Foo foo; | 390 Foo foo; |
387 Action<int(int, int, int, int)> a = Invoke(&foo, &Foo::SumOf4); // NOLINT | 391 Action<int(int, int, int, int)> a = Invoke(&foo, &Foo::SumOf4); // NOLINT |
388 EXPECT_EQ(1357, a.Perform(make_tuple(1000, 200, 30, 4))); | 392 EXPECT_EQ(1357, a.Perform(make_tuple(1000, 200, 30, 4))); |
389 } | 393 } |
390 | 394 |
391 // Tests using Invoke() with a 5-argument method. | 395 // Tests using Invoke() with a 5-argument method. |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
450 CharPtr("4"), CharPtr("5"), CharPtr("6"), | 454 CharPtr("4"), CharPtr("5"), CharPtr("6"), |
451 CharPtr("7"), CharPtr("8"), CharPtr("9"), | 455 CharPtr("7"), CharPtr("8"), CharPtr("9"), |
452 CharPtr("0")))); | 456 CharPtr("0")))); |
453 } | 457 } |
454 | 458 |
455 // Tests using Invoke(f) as an action of a compatible type. | 459 // Tests using Invoke(f) as an action of a compatible type. |
456 TEST(InvokeMethodTest, MethodWithCompatibleType) { | 460 TEST(InvokeMethodTest, MethodWithCompatibleType) { |
457 Foo foo; | 461 Foo foo; |
458 Action<long(int, short, char, bool)> a = // NOLINT | 462 Action<long(int, short, char, bool)> a = // NOLINT |
459 Invoke(&foo, &Foo::SumOf4); | 463 Invoke(&foo, &Foo::SumOf4); |
460 EXPECT_EQ(4444, a.Perform(make_tuple(4000, 300, 20, true))); | 464 EXPECT_EQ(4444, a.Perform(make_tuple(4000, Short(300), Char(20), true))); |
461 } | 465 } |
462 | 466 |
463 // Tests using WithoutArgs with an action that takes no argument. | 467 // Tests using WithoutArgs with an action that takes no argument. |
464 TEST(WithoutArgsTest, NoArg) { | 468 TEST(WithoutArgsTest, NoArg) { |
465 Action<int(int n)> a = WithoutArgs(Invoke(Nullary)); // NOLINT | 469 Action<int(int n)> a = WithoutArgs(Invoke(Nullary)); // NOLINT |
466 EXPECT_EQ(1, a.Perform(make_tuple(2))); | 470 EXPECT_EQ(1, a.Perform(make_tuple(2))); |
467 } | 471 } |
468 | 472 |
469 // Tests using WithArg with an action that takes 1 argument. | 473 // Tests using WithArg with an action that takes 1 argument. |
470 TEST(WithArgTest, OneArg) { | 474 TEST(WithArgTest, OneArg) { |
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
655 std::string letters = "abc"; | 659 std::string letters = "abc"; |
656 Action<MyFunction> a = SetArrayArgument<1>(letters.begin(), letters.end()); | 660 Action<MyFunction> a = SetArrayArgument<1>(letters.begin(), letters.end()); |
657 | 661 |
658 std::string s; | 662 std::string s; |
659 a.Perform(make_tuple(true, back_inserter(s))); | 663 a.Perform(make_tuple(true, back_inserter(s))); |
660 EXPECT_EQ(letters, s); | 664 EXPECT_EQ(letters, s); |
661 } | 665 } |
662 | 666 |
663 } // namespace gmock_generated_actions_test | 667 } // namespace gmock_generated_actions_test |
664 } // namespace testing | 668 } // namespace testing |
OLD | NEW |