diff options
author | Jonathan Wendeborn <jonathan.wendeborn@bruker.com> | 2018-10-16 08:07:15 +0200 |
---|---|---|
committer | Jonathan Wendeborn <jonathan.wendeborn@bruker.com> | 2018-10-16 08:07:15 +0200 |
commit | 67a240a107888c0d3baba528f05820dcc8ac737f (patch) | |
tree | a8bcf64d3a65da74a154a9bb719f2f1a71312abe | |
parent | ecd530865cefdfa7dea58e84f6aa1b548950363d (diff) | |
download | googletest-67a240a107888c0d3baba528f05820dcc8ac737f.tar.gz googletest-67a240a107888c0d3baba528f05820dcc8ac737f.tar.bz2 googletest-67a240a107888c0d3baba528f05820dcc8ac737f.zip |
Added Mock::IsNaggy, IsNice, and IsStrict
-rw-r--r-- | googlemock/include/gmock/gmock-spec-builders.h | 10 | ||||
-rw-r--r-- | googlemock/src/gmock-spec-builders.cc | 29 | ||||
-rw-r--r-- | googlemock/test/gmock-nice-strict_test.cc | 30 |
3 files changed, 69 insertions, 0 deletions
diff --git a/googlemock/include/gmock/gmock-spec-builders.h b/googlemock/include/gmock/gmock-spec-builders.h index fed7de66..1e8f732f 100644 --- a/googlemock/include/gmock/gmock-spec-builders.h +++ b/googlemock/include/gmock/gmock-spec-builders.h @@ -389,6 +389,16 @@ class GTEST_API_ Mock { static bool VerifyAndClear(void* mock_obj) GTEST_LOCK_EXCLUDED_(internal::g_gmock_mutex); + // Returns wether the mock was created as a naggy mock (default) + static bool IsNaggy(void* mock_obj) + GTEST_LOCK_EXCLUDED_(internal::g_gmock_mutex); + // Returns wether the mock was created as a nice mock + static bool IsNice(void* mock_obj) + GTEST_LOCK_EXCLUDED_(internal::g_gmock_mutex); + // Returns wether the mock was created as a strict mock + static bool IsStrict(void* mock_obj) + GTEST_LOCK_EXCLUDED_(internal::g_gmock_mutex); + private: friend class internal::UntypedFunctionMockerBase; diff --git a/googlemock/src/gmock-spec-builders.cc b/googlemock/src/gmock-spec-builders.cc index 95513420..0813a974 100644 --- a/googlemock/src/gmock-spec-builders.cc +++ b/googlemock/src/gmock-spec-builders.cc @@ -707,6 +707,35 @@ bool Mock::VerifyAndClearExpectationsLocked(void* mock_obj) return expectations_met; } +namespace { +// checks whether the specified mock_obj has a registered call reaction +bool HasCallReaction(void* mock_obj, internal::CallReaction reaction) { + using internal::CallReaction; + + const auto found = g_uninteresting_call_reaction.find(mock_obj); + if (found == g_uninteresting_call_reaction.cend()) { + return internal::CallReaction::kDefault == reaction; + } + return found->second == reaction; +} +} + +bool Mock::IsNaggy(void* mock_obj) + GTEST_LOCK_EXCLUDED_(internal::g_gmock_mutex) { + internal::MutexLock l(&internal::g_gmock_mutex); + return HasCallReaction(mock_obj, internal::CallReaction::kWarn); +} +bool Mock::IsNice(void* mock_obj) + GTEST_LOCK_EXCLUDED_(internal::g_gmock_mutex) { + internal::MutexLock l(&internal::g_gmock_mutex); + return HasCallReaction(mock_obj, internal::CallReaction::kAllow); +} +bool Mock::IsStrict(void* mock_obj) + GTEST_LOCK_EXCLUDED_(internal::g_gmock_mutex) { + internal::MutexLock l(&internal::g_gmock_mutex); + return HasCallReaction(mock_obj, internal::CallReaction::kFail); +} + // Registers a mock object and a mock method it owns. void Mock::Register(const void* mock_obj, internal::UntypedFunctionMockerBase* mocker) diff --git a/googlemock/test/gmock-nice-strict_test.cc b/googlemock/test/gmock-nice-strict_test.cc index d0adcbbe..78f3b515 100644 --- a/googlemock/test/gmock-nice-strict_test.cc +++ b/googlemock/test/gmock-nice-strict_test.cc @@ -160,6 +160,15 @@ TEST(RawMockTest, InfoForUninterestingCall) { GMOCK_FLAG(verbose) = saved_flag; } +TEST(RawMockTest, IsNaggy_IsNice_IsStrict) { + using internal::CallReaction; + MockFoo raw_foo; + ASSERT_EQ(CallReaction::kDefault, CallReaction::kWarn) << "precondition"; + EXPECT_TRUE (Mock::IsNaggy(&raw_foo)); + EXPECT_FALSE(Mock::IsNice(&raw_foo)); + EXPECT_FALSE(Mock::IsStrict(&raw_foo)); +} + // Tests that a nice mock generates no warning for uninteresting calls. TEST(NiceMockTest, NoWarningForUninterestingCall) { NiceMock<MockFoo> nice_foo; @@ -253,6 +262,13 @@ TEST(NiceMockTest, AcceptsClassNamedMock) { } #endif // !GTEST_OS_SYMBIAN && !GTEST_OS_WINDOWS_MOBILE +TEST(NiceMockTest, IsNaggy_IsNice_IsStrict) { + NiceMock<MockFoo> nice_foo; + EXPECT_FALSE(Mock::IsNaggy(&nice_foo)); + EXPECT_TRUE (Mock::IsNice(&nice_foo)); + EXPECT_FALSE(Mock::IsStrict(&nice_foo)); +} + #if GTEST_HAS_STREAM_REDIRECTION // Tests that a naggy mock generates warnings for uninteresting calls. @@ -346,6 +362,13 @@ TEST(NaggyMockTest, AcceptsClassNamedMock) { } #endif // !GTEST_OS_SYMBIAN && !GTEST_OS_WINDOWS_MOBILE +TEST(NaggyMockTest, IsNaggy_IsNice_IsStrict) { + NaggyMock<MockFoo> naggy_foo; + EXPECT_TRUE (Mock::IsNaggy(&naggy_foo)); + EXPECT_FALSE(Mock::IsNice(&naggy_foo)); + EXPECT_FALSE(Mock::IsStrict(&naggy_foo)); +} + // Tests that a strict mock allows expected calls. TEST(StrictMockTest, AllowsExpectedCall) { StrictMock<MockFoo> strict_foo; @@ -420,5 +443,12 @@ TEST(StrictMockTest, AcceptsClassNamedMock) { } #endif // !GTEST_OS_SYMBIAN && !GTEST_OS_WINDOWS_MOBILE +TEST(StrictMockTest, IsNaggy_IsNice_IsStrict) { + StrictMock<MockFoo> strict_foo; + EXPECT_FALSE(Mock::IsNaggy(&strict_foo)); + EXPECT_FALSE(Mock::IsNice(&strict_foo)); + EXPECT_TRUE (Mock::IsStrict(&strict_foo)); +} + } // namespace gmock_nice_strict_test } // namespace testing |