aboutsummaryrefslogtreecommitdiffstats
path: root/googlemock
diff options
context:
space:
mode:
authorJonathan Wendeborn <jonathan.wendeborn@bruker.com>2018-10-16 08:07:15 +0200
committerJonathan Wendeborn <jonathan.wendeborn@bruker.com>2018-10-16 08:07:15 +0200
commit67a240a107888c0d3baba528f05820dcc8ac737f (patch)
treea8bcf64d3a65da74a154a9bb719f2f1a71312abe /googlemock
parentecd530865cefdfa7dea58e84f6aa1b548950363d (diff)
downloadgoogletest-67a240a107888c0d3baba528f05820dcc8ac737f.tar.gz
googletest-67a240a107888c0d3baba528f05820dcc8ac737f.tar.bz2
googletest-67a240a107888c0d3baba528f05820dcc8ac737f.zip
Added Mock::IsNaggy, IsNice, and IsStrict
Diffstat (limited to 'googlemock')
-rw-r--r--googlemock/include/gmock/gmock-spec-builders.h10
-rw-r--r--googlemock/src/gmock-spec-builders.cc29
-rw-r--r--googlemock/test/gmock-nice-strict_test.cc30
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