| Index: testing/gmock/test/gmock-generated-actions_test.cc
|
| diff --git a/testing/gmock/test/gmock-generated-actions_test.cc b/testing/gmock/test/gmock-generated-actions_test.cc
|
| index 2e6fa0b6cfa3218b89835bea212150231278208d..3c076d7c7937406c7a22e429a83f4937f175425a 100644
|
| --- a/testing/gmock/test/gmock-generated-actions_test.cc
|
| +++ b/testing/gmock/test/gmock-generated-actions_test.cc
|
| @@ -63,6 +63,10 @@ using testing::StaticAssertTypeEq;
|
| using testing::Unused;
|
| using testing::WithArgs;
|
|
|
| +// For suppressing compiler warnings on conversion possibly losing precision.
|
| +inline short Short(short n) { return n; } // NOLINT
|
| +inline char Char(char ch) { return ch; }
|
| +
|
| // Sample functions and functors for testing various actions.
|
| int Nullary() { return 1; }
|
|
|
| @@ -242,7 +246,7 @@ TEST(InvokeArgumentTest, Function10) {
|
| // Tests using InvokeArgument with a function that takes a pointer argument.
|
| TEST(InvokeArgumentTest, ByPointerFunction) {
|
| Action<const char*(const char*(*)(const char* input, short n))> a = // NOLINT
|
| - InvokeArgument<0>(static_cast<const char*>("Hi"), 1);
|
| + InvokeArgument<0>(static_cast<const char*>("Hi"), Short(1));
|
| EXPECT_STREQ("i", a.Perform(make_tuple(&Binary)));
|
| }
|
|
|
| @@ -250,7 +254,7 @@ TEST(InvokeArgumentTest, ByPointerFunction) {
|
| // by passing it a C-string literal.
|
| TEST(InvokeArgumentTest, FunctionWithCStringLiteral) {
|
| Action<const char*(const char*(*)(const char* input, short n))> a = // NOLINT
|
| - InvokeArgument<0>("Hi", 1);
|
| + InvokeArgument<0>("Hi", Short(1));
|
| EXPECT_STREQ("i", a.Perform(make_tuple(&Binary)));
|
| }
|
|
|
| @@ -286,17 +290,17 @@ TEST(WithArgsTest, OneArg) {
|
|
|
| // Tests using WithArgs with an action that takes 2 arguments.
|
| TEST(WithArgsTest, TwoArgs) {
|
| - Action<const char*(const char* s, double x, int n)> a =
|
| + Action<const char*(const char* s, double x, short n)> a =
|
| WithArgs<0, 2>(Invoke(Binary));
|
| const char s[] = "Hello";
|
| - EXPECT_EQ(s + 2, a.Perform(make_tuple(CharPtr(s), 0.5, 2)));
|
| + EXPECT_EQ(s + 2, a.Perform(make_tuple(CharPtr(s), 0.5, Short(2))));
|
| }
|
|
|
| // Tests using WithArgs with an action that takes 3 arguments.
|
| TEST(WithArgsTest, ThreeArgs) {
|
| Action<int(int, double, char, short)> a = // NOLINT
|
| WithArgs<0, 2, 3>(Invoke(Ternary));
|
| - EXPECT_EQ(123, a.Perform(make_tuple(100, 6.5, 20, 3)));
|
| + EXPECT_EQ(123, a.Perform(make_tuple(100, 6.5, Char(20), Short(3))));
|
| }
|
|
|
| // Tests using WithArgs with an action that takes 4 arguments.
|
| @@ -379,7 +383,7 @@ TEST(WithArgsTest, NonInvokeAction) {
|
| TEST(WithArgsTest, Identity) {
|
| Action<int(int x, char y, short z)> a = // NOLINT
|
| WithArgs<0, 1, 2>(Invoke(Ternary));
|
| - EXPECT_EQ(123, a.Perform(make_tuple(100, 20, 3)));
|
| + EXPECT_EQ(123, a.Perform(make_tuple(100, Char(20), Short(3))));
|
| }
|
|
|
| // Tests using WithArgs with repeated arguments.
|
| @@ -394,14 +398,14 @@ TEST(WithArgsTest, ReversedArgumentOrder) {
|
| Action<const char*(short n, const char* input)> a = // NOLINT
|
| WithArgs<1, 0>(Invoke(Binary));
|
| const char s[] = "Hello";
|
| - EXPECT_EQ(s + 2, a.Perform(make_tuple(2, CharPtr(s))));
|
| + EXPECT_EQ(s + 2, a.Perform(make_tuple(Short(2), CharPtr(s))));
|
| }
|
|
|
| // Tests using WithArgs with compatible, but not identical, argument types.
|
| TEST(WithArgsTest, ArgsOfCompatibleTypes) {
|
| - Action<long(short x, int y, double z, char c)> a = // NOLINT
|
| + Action<long(short x, char y, double z, char c)> a = // NOLINT
|
| WithArgs<0, 1, 3>(Invoke(Ternary));
|
| - EXPECT_EQ(123, a.Perform(make_tuple(100, 20, 5.6, 3)));
|
| + EXPECT_EQ(123, a.Perform(make_tuple(Short(100), Char(20), 5.6, Char(3))));
|
| }
|
|
|
| // Tests using WithArgs with an action that returns void.
|
| @@ -583,6 +587,16 @@ TEST(DoAllTest, TenActions) {
|
| EXPECT_EQ('g', g);
|
| }
|
|
|
| +// The ACTION*() macros trigger warning C4100 (unreferenced formal
|
| +// parameter) in MSVC with -W4. Unfortunately they cannot be fixed in
|
| +// the macro definition, as the warnings are generated when the macro
|
| +// is expanded and macro expansion cannot contain #pragma. Therefore
|
| +// we suppress them here.
|
| +#ifdef _MSC_VER
|
| +#pragma warning(push)
|
| +#pragma warning(disable:4100)
|
| +#endif
|
| +
|
| // Tests the ACTION*() macro family.
|
|
|
| // Tests that ACTION() can define an action that doesn't reference the
|
| @@ -633,7 +647,7 @@ ACTION(Sum2) {
|
| TEST(ActionMacroTest, CanReferenceArgumentTuple) {
|
| Action<int(int, char, int*)> a1 = Sum2();
|
| int dummy = 0;
|
| - EXPECT_EQ(11, a1.Perform(make_tuple(5, static_cast<char>(6), &dummy)));
|
| + EXPECT_EQ(11, a1.Perform(make_tuple(5, Char(6), &dummy)));
|
| }
|
|
|
| // Tests that the body of ACTION() can reference the mock function
|
| @@ -731,7 +745,7 @@ ACTION_P(TypedPlus, n) {
|
|
|
| TEST(ActionPMacroTest, CanReferenceArgumentAndParameterTypes) {
|
| Action<int(char m, bool t)> a1 = TypedPlus(9);
|
| - EXPECT_EQ(10, a1.Perform(make_tuple(static_cast<char>(1), true)));
|
| + EXPECT_EQ(10, a1.Perform(make_tuple(Char(1), true)));
|
| }
|
|
|
| // Tests that a parameterized action can be used in any mock function
|
| @@ -851,7 +865,7 @@ TEST(ActionPnMacroTest, WorksFor10Parameters) {
|
| ACTION_P2(PadArgument, prefix, suffix) {
|
| // The following lines promote the two parameters to desired types.
|
| std::string prefix_str(prefix);
|
| - char suffix_char(suffix);
|
| + char suffix_char = static_cast<char>(suffix);
|
| return prefix_str + arg0 + suffix_char;
|
| }
|
|
|
| @@ -1078,7 +1092,7 @@ class BoolResetter {
|
| explicit BoolResetter(bool* value) : value_(value) {}
|
| ~BoolResetter() { *value_ = false; }
|
| private:
|
| - bool* const value_;
|
| + bool* value_;
|
| };
|
|
|
| TEST(ActionTemplateTest, WorksForIntegralTemplateParams) {
|
| @@ -1190,5 +1204,9 @@ TEST(ActionTemplateTest, CanBeOverloadedOnNumberOfValueParameters) {
|
| EXPECT_EQ(12345, a4.Perform(make_tuple()));
|
| }
|
|
|
| +#ifdef _MSC_VER
|
| +#pragma warning(pop)
|
| +#endif
|
| +
|
| } // namespace gmock_generated_actions_test
|
| } // namespace testing
|
|
|