Index: testing/gmock/test/gmock-actions_test.cc |
diff --git a/testing/gmock/test/gmock-actions_test.cc b/testing/gmock/test/gmock-actions_test.cc |
index d3d96c6d078039f070168284e5ba247336b2ba5e..a2c6fe11cd5d9743370fbeaf3b2fcf721edf19e0 100644 |
--- a/testing/gmock/test/gmock-actions_test.cc |
+++ b/testing/gmock/test/gmock-actions_test.cc |
@@ -95,26 +95,26 @@ TEST(BuiltInDefaultValueTest, ExistsForPointerTypes) { |
// Tests that BuiltInDefaultValue<T>::Get() returns 0 when T is a |
// built-in numeric type. |
TEST(BuiltInDefaultValueTest, IsZeroForNumericTypes) { |
- EXPECT_EQ(0, BuiltInDefaultValue<unsigned char>::Get()); |
+ EXPECT_EQ(0U, BuiltInDefaultValue<unsigned char>::Get()); |
EXPECT_EQ(0, BuiltInDefaultValue<signed char>::Get()); |
EXPECT_EQ(0, BuiltInDefaultValue<char>::Get()); |
#if GMOCK_HAS_SIGNED_WCHAR_T_ |
- EXPECT_EQ(0, BuiltInDefaultValue<unsigned wchar_t>::Get()); |
+ EXPECT_EQ(0U, BuiltInDefaultValue<unsigned wchar_t>::Get()); |
EXPECT_EQ(0, BuiltInDefaultValue<signed wchar_t>::Get()); |
#endif |
#if GMOCK_WCHAR_T_IS_NATIVE_ |
EXPECT_EQ(0, BuiltInDefaultValue<wchar_t>::Get()); |
#endif |
- EXPECT_EQ(0, BuiltInDefaultValue<unsigned short>::Get()); // NOLINT |
+ EXPECT_EQ(0U, BuiltInDefaultValue<unsigned short>::Get()); // NOLINT |
EXPECT_EQ(0, BuiltInDefaultValue<signed short>::Get()); // NOLINT |
EXPECT_EQ(0, BuiltInDefaultValue<short>::Get()); // NOLINT |
- EXPECT_EQ(0, BuiltInDefaultValue<unsigned int>::Get()); |
+ EXPECT_EQ(0U, BuiltInDefaultValue<unsigned int>::Get()); |
EXPECT_EQ(0, BuiltInDefaultValue<signed int>::Get()); |
EXPECT_EQ(0, BuiltInDefaultValue<int>::Get()); |
- EXPECT_EQ(0, BuiltInDefaultValue<unsigned long>::Get()); // NOLINT |
+ EXPECT_EQ(0U, BuiltInDefaultValue<unsigned long>::Get()); // NOLINT |
EXPECT_EQ(0, BuiltInDefaultValue<signed long>::Get()); // NOLINT |
EXPECT_EQ(0, BuiltInDefaultValue<long>::Get()); // NOLINT |
- EXPECT_EQ(0, BuiltInDefaultValue<UInt64>::Get()); |
+ EXPECT_EQ(0U, BuiltInDefaultValue<UInt64>::Get()); |
EXPECT_EQ(0, BuiltInDefaultValue<Int64>::Get()); |
EXPECT_EQ(0, BuiltInDefaultValue<float>::Get()); |
EXPECT_EQ(0, BuiltInDefaultValue<double>::Get()); |
@@ -165,9 +165,7 @@ TEST(BuiltInDefaultValueTest, IsEmptyStringForString) { |
EXPECT_EQ("", BuiltInDefaultValue< ::string>::Get()); |
#endif // GTEST_HAS_GLOBAL_STRING |
-#if GTEST_HAS_STD_STRING |
EXPECT_EQ("", BuiltInDefaultValue< ::std::string>::Get()); |
-#endif // GTEST_HAS_STD_STRING |
} |
// Tests that BuiltInDefaultValue<T>::Exists() returns true when T is a |
@@ -177,9 +175,7 @@ TEST(BuiltInDefaultValueTest, ExistsForString) { |
EXPECT_TRUE(BuiltInDefaultValue< ::string>::Exists()); |
#endif // GTEST_HAS_GLOBAL_STRING |
-#if GTEST_HAS_STD_STRING |
EXPECT_TRUE(BuiltInDefaultValue< ::std::string>::Exists()); |
-#endif // GTEST_HAS_STD_STRING |
} |
// Tests that BuiltInDefaultValue<const T>::Get() returns the same |
@@ -515,6 +511,51 @@ TEST(ReturnTest, IsCovariant) { |
EXPECT_EQ(&derived, ret.Perform(make_tuple())); |
} |
+// Tests that the type of the value passed into Return is converted into T |
+// when the action is cast to Action<T(...)> rather than when the action is |
+// performed. See comments on testing::internal::ReturnAction in |
+// gmock-actions.h for more information. |
+class FromType { |
+ public: |
+ FromType(bool* is_converted) : converted_(is_converted) {} |
+ bool* converted() const { return converted_; } |
+ |
+ private: |
+ bool* const converted_; |
+ |
+ GTEST_DISALLOW_ASSIGN_(FromType); |
+}; |
+ |
+class ToType { |
+ public: |
+ ToType(const FromType& x) { *x.converted() = true; } |
+}; |
+ |
+TEST(ReturnTest, ConvertsArgumentWhenConverted) { |
+ bool converted = false; |
+ FromType x(&converted); |
+ Action<ToType()> action(Return(x)); |
+ EXPECT_TRUE(converted) << "Return must convert its argument in its own " |
+ << "conversion operator."; |
+ converted = false; |
+ action.Perform(tuple<>()); |
+ EXPECT_FALSE(converted) << "Action must NOT convert its argument " |
+ << "when performed." ; |
+} |
+ |
+class DestinationType {}; |
+ |
+class SourceType { |
+ public: |
+ // Note: a non-const typecast operator. |
+ operator DestinationType() { return DestinationType(); } |
+}; |
+ |
+TEST(ReturnTest, CanConvertArgumentUsingNonConstTypeCastOperator) { |
+ SourceType s; |
+ Action<DestinationType()> action(Return(s)); |
+} |
+ |
// Tests that ReturnNull() returns NULL in a pointer-returning function. |
TEST(ReturnNullTest, WorksInPointerReturningFunction) { |
const Action<int*()> a1 = ReturnNull(); |
@@ -549,8 +590,13 @@ class MyClass {}; |
class MockClass { |
public: |
+ MockClass() {} |
+ |
MOCK_METHOD1(IntFunc, int(bool flag)); // NOLINT |
MOCK_METHOD0(Foo, MyClass()); |
+ |
+ private: |
+ GTEST_DISALLOW_COPY_AND_ASSIGN_(MockClass); |
}; |
// Tests that DoDefault() returns the built-in default value for the |
@@ -576,7 +622,7 @@ TEST(DoDefaultDeathTest, DiesForUnknowType) { |
// Tests that using DoDefault() inside a composite action leads to a |
// run-time error. |
-void VoidFunc(bool flag) {} |
+void VoidFunc(bool /* flag */) {} |
TEST(DoDefaultDeathTest, DiesIfUsedInCompositeAction) { |
MockClass mock; |
@@ -762,7 +808,7 @@ bool Unary(int x) { return x < 0; } |
const char* Plus1(const char* s) { return s + 1; } |
-void VoidUnary(int n) { g_done = true; } |
+void VoidUnary(int /* n */) { g_done = true; } |
bool ByConstRef(const std::string& s) { return s == "Hi"; } |
@@ -831,7 +877,7 @@ TEST(InvokeWithoutArgsTest, Function) { |
EXPECT_EQ(1, a.Perform(make_tuple(2))); |
// As an action that takes two arguments. |
- Action<short(int, double)> a2 = InvokeWithoutArgs(Nullary); // NOLINT |
+ Action<int(int, double)> a2 = InvokeWithoutArgs(Nullary); // NOLINT |
EXPECT_EQ(1, a2.Perform(make_tuple(2, 3.5))); |
// As an action that returns void. |
@@ -848,7 +894,7 @@ TEST(InvokeWithoutArgsTest, Functor) { |
EXPECT_EQ(2, a.Perform(make_tuple())); |
// As an action that takes three arguments. |
- Action<short(int, double, char)> a2 = // NOLINT |
+ Action<int(int, double, char)> a2 = // NOLINT |
InvokeWithoutArgs(NullaryFunctor()); |
EXPECT_EQ(2, a2.Perform(make_tuple(3, 3.5, 'a'))); |
@@ -889,7 +935,7 @@ TEST(IgnoreResultTest, MonomorphicAction) { |
// Tests using IgnoreResult() on an action that returns a class type. |
-MyClass ReturnMyClass(double x) { |
+MyClass ReturnMyClass(double /* x */) { |
g_done = true; |
return MyClass(); |
} |