diff options
| -rw-r--r-- | googlemock/include/gmock/gmock-spec-builders.h | 10 | ||||
| -rw-r--r-- | googlemock/test/gmock-function-mocker_test.cc | 17 | ||||
| -rw-r--r-- | googlemock/test/gmock-generated-function-mockers_test.cc | 18 | 
3 files changed, 43 insertions, 2 deletions
| diff --git a/googlemock/include/gmock/gmock-spec-builders.h b/googlemock/include/gmock/gmock-spec-builders.h index 526fe7aa..9a81cfbc 100644 --- a/googlemock/include/gmock/gmock-spec-builders.h +++ b/googlemock/include/gmock/gmock-spec-builders.h @@ -300,7 +300,10 @@ class OnCallSpec : public UntypedOnCallSpecBase {               const ArgumentMatcherTuple& matchers)        : UntypedOnCallSpecBase(a_file, a_line),          matchers_(matchers), -        extra_matcher_(_) {} +        // By default, extra_matcher_ should match anything.  However, +        // we cannot initialize it with _ as that causes ambiguity between +        // Matcher's copy and move constructor for some argument types. +        extra_matcher_(A<const ArgumentTuple&>()) {}    // Implements the .With() clause.    OnCallSpec& With(const Matcher<const ArgumentTuple&>& m) { @@ -890,7 +893,10 @@ class TypedExpectation : public ExpectationBase {        : ExpectationBase(a_file, a_line, a_source_text),          owner_(owner),          matchers_(m), -        extra_matcher_(_), +        // By default, extra_matcher_ should match anything.  However, +        // we cannot initialize it with _ as that causes ambiguity between +        // Matcher's copy and move constructor for some argument types. +        extra_matcher_(A<const ArgumentTuple&>()),          repeated_action_(DoDefault()) {}    ~TypedExpectation() override { diff --git a/googlemock/test/gmock-function-mocker_test.cc b/googlemock/test/gmock-function-mocker_test.cc index f29433f5..d16006f7 100644 --- a/googlemock/test/gmock-function-mocker_test.cc +++ b/googlemock/test/gmock-function-mocker_test.cc @@ -62,6 +62,15 @@ using testing::Return;  using testing::ReturnRef;  using testing::TypedEq; +template<typename T> +class TemplatedCopyable { + public: +  TemplatedCopyable() {} + +  template <typename U> +  TemplatedCopyable(const U& other) {}  // NOLINT +}; +  class FooInterface {   public:    virtual ~FooInterface() {} @@ -90,6 +99,7 @@ class FooInterface {    virtual int TypeWithHole(int (*func)()) = 0;    virtual int TypeWithComma(const std::map<int, std::string>& a_map) = 0; +  virtual int TypeWithTemplatedCopyCtor(const TemplatedCopyable<int>&) = 0;  #if GTEST_OS_WINDOWS    STDMETHOD_(int, CTNullary)() = 0; @@ -146,6 +156,8 @@ class MockFoo : public FooInterface {    MOCK_METHOD(int, TypeWithHole, (int (*)()), ());  // NOLINT    MOCK_METHOD(int, TypeWithComma, ((const std::map<int, std::string>&))); +  MOCK_METHOD(int, TypeWithTemplatedCopyCtor, +              (const TemplatedCopyable<int>&));  // NOLINT  #if GTEST_OS_WINDOWS    MOCK_METHOD(int, CTNullary, (), (Calltype(STDMETHODCALLTYPE))); @@ -288,6 +300,11 @@ TEST_F(MockMethodFunctionMockerTest, MocksReturnTypeWithComma) {    EXPECT_EQ(a_map, mock_foo_.ReturnTypeWithComma(42));  } +TEST_F(MockMethodFunctionMockerTest, MocksTypeWithTemplatedCopyCtor) { +  EXPECT_CALL(mock_foo_, TypeWithTemplatedCopyCtor(_)).WillOnce(Return(true)); +  EXPECT_TRUE(foo_->TypeWithTemplatedCopyCtor(TemplatedCopyable<int>())); +} +  #if GTEST_OS_WINDOWS  // Tests mocking a nullary function with calltype.  TEST_F(MockMethodFunctionMockerTest, MocksNullaryFunctionWithCallType) { diff --git a/googlemock/test/gmock-generated-function-mockers_test.cc b/googlemock/test/gmock-generated-function-mockers_test.cc index 52d9b8b8..f07226c0 100644 --- a/googlemock/test/gmock-generated-function-mockers_test.cc +++ b/googlemock/test/gmock-generated-function-mockers_test.cc @@ -63,6 +63,15 @@ using testing::Return;  using testing::ReturnRef;  using testing::TypedEq; +template<typename T> +class TemplatedCopyable { + public: +  TemplatedCopyable() {} + +  template <typename U> +  TemplatedCopyable(const U& other) {}  // NOLINT +}; +  class FooInterface {   public:    virtual ~FooInterface() {} @@ -91,6 +100,8 @@ class FooInterface {    virtual int TypeWithHole(int (*func)()) = 0;    virtual int TypeWithComma(const std::map<int, std::string>& a_map) = 0; +  virtual int TypeWithTemplatedCopyCtor( +      const TemplatedCopyable<int>& a_vector) = 0;  #if GTEST_OS_WINDOWS    STDMETHOD_(int, CTNullary)() = 0; @@ -146,6 +157,8 @@ class MockFoo : public FooInterface {    MOCK_METHOD1(TypeWithHole, int(int (*)()));  // NOLINT    MOCK_METHOD1(TypeWithComma,                 int(const std::map<int, std::string>&));  // NOLINT +  MOCK_METHOD1(TypeWithTemplatedCopyCtor, +               int(const TemplatedCopyable<int>&));  // NOLINT  #if GTEST_OS_WINDOWS    MOCK_METHOD0_WITH_CALLTYPE(STDMETHODCALLTYPE, CTNullary, int()); @@ -288,6 +301,11 @@ TEST_F(FunctionMockerTest, MocksReturnTypeWithComma) {    EXPECT_EQ(a_map, mock_foo_.ReturnTypeWithComma(42));  } +TEST_F(FunctionMockerTest, MocksTypeWithTemplatedCopyCtor) { +  EXPECT_CALL(mock_foo_, TypeWithTemplatedCopyCtor(_)).WillOnce(Return(true)); +  EXPECT_TRUE(foo_->TypeWithTemplatedCopyCtor(TemplatedCopyable<int>())); +} +  #if GTEST_OS_WINDOWS  // Tests mocking a nullary function with calltype.  TEST_F(FunctionMockerTest, MocksNullaryFunctionWithCallType) { | 
