diff options
author | Abseil Team <absl-team@google.com> | 2020-11-06 15:47:09 (GMT) |
---|---|---|
committer | Andy Getz <durandal@google.com> | 2020-11-06 18:23:55 (GMT) |
commit | d89b36302116233b8c6377e6e891083f41ee51c5 (patch) | |
tree | 9fea2d47529f4a39e86e14a44ef95e80ebf041bd /googlemock/test/gmock-function-mocker_test.cc | |
parent | 710f9c11ca79e578bb38d98d10ab9b70d41d5e07 (diff) | |
download | googletest-d89b36302116233b8c6377e6e891083f41ee51c5.zip googletest-d89b36302116233b8c6377e6e891083f41ee51c5.tar.gz googletest-d89b36302116233b8c6377e6e891083f41ee51c5.tar.bz2 |
Googletest export
Add support for ref qualifiers in MOCK_METHOD.
PiperOrigin-RevId: 341047839
Diffstat (limited to 'googlemock/test/gmock-function-mocker_test.cc')
-rw-r--r-- | googlemock/test/gmock-function-mocker_test.cc | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/googlemock/test/gmock-function-mocker_test.cc b/googlemock/test/gmock-function-mocker_test.cc index 94aaafb..45a524e 100644 --- a/googlemock/test/gmock-function-mocker_test.cc +++ b/googlemock/test/gmock-function-mocker_test.cc @@ -108,6 +108,16 @@ class FooInterface { using fn_ptr = int (*)(bool); virtual fn_ptr ReturnsFunctionPointer2(int) = 0; + virtual int RefQualifiedConstRef() const& = 0; + virtual int RefQualifiedConstRefRef() const&& = 0; + virtual int RefQualifiedRef() & = 0; + virtual int RefQualifiedRefRef() && = 0; + + virtual int RefQualifiedOverloaded() const& = 0; + virtual int RefQualifiedOverloaded() const&& = 0; + virtual int RefQualifiedOverloaded() & = 0; + virtual int RefQualifiedOverloaded() && = 0; + #if GTEST_OS_WINDOWS STDMETHOD_(int, CTNullary)() = 0; STDMETHOD_(bool, CTUnary)(int x) = 0; @@ -181,6 +191,17 @@ class MockFoo : public FooInterface { (Calltype(STDMETHODCALLTYPE))); #endif // GTEST_OS_WINDOWS + // Test reference qualified functions. + MOCK_METHOD(int, RefQualifiedConstRef, (), (const, ref(&), override)); + MOCK_METHOD(int, RefQualifiedConstRefRef, (), (const, ref(&&), override)); + MOCK_METHOD(int, RefQualifiedRef, (), (ref(&), override)); + MOCK_METHOD(int, RefQualifiedRefRef, (), (ref(&&), override)); + + MOCK_METHOD(int, RefQualifiedOverloaded, (), (const, ref(&), override)); + MOCK_METHOD(int, RefQualifiedOverloaded, (), (const, ref(&&), override)); + MOCK_METHOD(int, RefQualifiedOverloaded, (), (ref(&), override)); + MOCK_METHOD(int, RefQualifiedOverloaded, (), (ref(&&), override)); + private: GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFoo); }; @@ -242,6 +263,17 @@ class LegacyMockFoo : public FooInterface { std::map<int, std::string>()); #endif // GTEST_OS_WINDOWS + // We can't mock these with the old macros, but we need to define them to make + // it concrete. + int RefQualifiedConstRef() const& override { return 0; } + int RefQualifiedConstRefRef() const&& override { return 0; } + int RefQualifiedRef() & override { return 0; } + int RefQualifiedRefRef() && override { return 0; } + int RefQualifiedOverloaded() const& override { return 0; } + int RefQualifiedOverloaded() const&& override { return 0; } + int RefQualifiedOverloaded() & override { return 0; } + int RefQualifiedOverloaded() && override { return 0; } + private: GTEST_DISALLOW_COPY_AND_ASSIGN_(LegacyMockFoo); }; @@ -420,6 +452,40 @@ TYPED_TEST(FunctionMockerTest, MocksReturnTypeWithCommaAndCallType) { #endif // GTEST_OS_WINDOWS +TEST(FunctionMockerTest, RefQualified) { + MockFoo mock_foo; + + EXPECT_CALL(mock_foo, RefQualifiedConstRef).WillOnce(Return(1)); + EXPECT_CALL(std::move(mock_foo), // NOLINT + RefQualifiedConstRefRef) + .WillOnce(Return(2)); + EXPECT_CALL(mock_foo, RefQualifiedRef).WillOnce(Return(3)); + EXPECT_CALL(std::move(mock_foo), // NOLINT + RefQualifiedRefRef) + .WillOnce(Return(4)); + + EXPECT_CALL(static_cast<const MockFoo&>(mock_foo), RefQualifiedOverloaded()) + .WillOnce(Return(5)); + EXPECT_CALL(static_cast<const MockFoo&&>(mock_foo), RefQualifiedOverloaded()) + .WillOnce(Return(6)); + EXPECT_CALL(static_cast<MockFoo&>(mock_foo), RefQualifiedOverloaded()) + .WillOnce(Return(7)); + EXPECT_CALL(static_cast<MockFoo&&>(mock_foo), RefQualifiedOverloaded()) + .WillOnce(Return(8)); + + EXPECT_EQ(mock_foo.RefQualifiedConstRef(), 1); + EXPECT_EQ(std::move(mock_foo).RefQualifiedConstRefRef(), 2); // NOLINT + EXPECT_EQ(mock_foo.RefQualifiedRef(), 3); + EXPECT_EQ(std::move(mock_foo).RefQualifiedRefRef(), 4); // NOLINT + + EXPECT_EQ(std::cref(mock_foo).get().RefQualifiedOverloaded(), 5); + EXPECT_EQ(std::move(std::cref(mock_foo).get()) // NOLINT + .RefQualifiedOverloaded(), + 6); + EXPECT_EQ(mock_foo.RefQualifiedOverloaded(), 7); + EXPECT_EQ(std::move(mock_foo).RefQualifiedOverloaded(), 8); // NOLINT +} + class MockB { public: MockB() {} |