diff --git a/src/gmock-spec-builders.cc b/src/gmock-spec-builders.cc index a74f9e57..2b48af13 100644 --- a/src/gmock-spec-builders.cc +++ b/src/gmock-spec-builders.cc @@ -245,9 +245,12 @@ GTEST_API_ ThreadLocal g_gmock_implicit_sequence; // Reports an uninteresting call (whose description is in msg) in the // manner specified by 'reaction'. void ReportUninterestingCall(CallReaction reaction, const string& msg) { + // Include a stack trace only if --gmock_verbose=info is specified. + const int stack_frames_to_skip = + GMOCK_FLAG(verbose) == kInfoVerbosity ? 3 : -1; switch (reaction) { case kAllow: - Log(kInfo, msg, 3); + Log(kInfo, msg, stack_frames_to_skip); break; case kWarn: Log(kWarning, @@ -256,8 +259,8 @@ void ReportUninterestingCall(CallReaction reaction, const string& msg) { "call should not happen. Do not suppress it by blindly adding " "an EXPECT_CALL() if you don't mean to enforce the call. " "See http://code.google.com/p/googlemock/wiki/CookBook#" - "Knowing_When_to_Expect for details.", - 3); + "Knowing_When_to_Expect for details.\n", + stack_frames_to_skip); break; default: // FAIL Expect(false, NULL, -1, msg); diff --git a/test/gmock-spec-builders_test.cc b/test/gmock-spec-builders_test.cc index b8f7a11d..342c22f5 100644 --- a/test/gmock-spec-builders_test.cc +++ b/test/gmock-spec-builders_test.cc @@ -81,6 +81,7 @@ using testing::Gt; using testing::InSequence; using testing::Invoke; using testing::InvokeWithoutArgs; +using testing::IsNotSubstring; using testing::IsSubstring; using testing::Lt; using testing::Message; @@ -1977,9 +1978,25 @@ class VerboseFlagPreservingFixture : public testing::Test { #if GTEST_HAS_STREAM_REDIRECTION // Tests that an uninteresting mock function call on a naggy mock -// generates a warning containing the stack trace. +// generates a warning without the stack trace when +// --gmock_verbose=warning is specified. TEST(FunctionCallMessageTest, - UninterestingCallOnNaggyMockGeneratesFyiWithStackTrace) { + UninterestingCallOnNaggyMockGeneratesNoStackTraceWhenVerboseWarning) { + GMOCK_FLAG(verbose) = kWarningVerbosity; + NaggyMock c; + CaptureStdout(); + c.VoidMethod(false, 5, "Hi", NULL, Printable(), Unprintable()); + const std::string output = GetCapturedStdout(); + EXPECT_PRED_FORMAT2(IsSubstring, "GMOCK WARNING", output); + EXPECT_PRED_FORMAT2(IsNotSubstring, "Stack trace:", output); +} + +// Tests that an uninteresting mock function call on a naggy mock +// generates a warning containing the stack trace when +// --gmock_verbose=info is specified. +TEST(FunctionCallMessageTest, + UninterestingCallOnNaggyMockGeneratesFyiWithStackTraceWhenVerboseInfo) { + GMOCK_FLAG(verbose) = kInfoVerbosity; NaggyMock c; CaptureStdout(); c.VoidMethod(false, 5, "Hi", NULL, Printable(), Unprintable()); @@ -2112,8 +2129,7 @@ class GMockVerboseFlagTest : public VerboseFlagPreservingFixture { "\nGMOCK WARNING:\n" "Uninteresting mock function call - returning directly.\n" " Function call: DoA(5)\n" + - note + - "\nStack trace:\n", + note, "DoA"); // A non-void-returning function. @@ -2126,8 +2142,7 @@ class GMockVerboseFlagTest : public VerboseFlagPreservingFixture { "Uninteresting mock function call - returning default value.\n" " Function call: Binary(2, 1)\n" " Returns: false\n" + - note + - "\nStack trace:\n", + note, "Binary"); } }; diff --git a/test/gmock_output_test_golden.txt b/test/gmock_output_test_golden.txt index b6b2d349..650a8f07 100644 --- a/test/gmock_output_test_golden.txt +++ b/test/gmock_output_test_golden.txt @@ -76,7 +76,6 @@ Uninteresting mock function call - returning default value. Function call: Bar2(0, 1) Returns: false NOTE: You can safely ignore the above warning unless this call should not happen. Do not suppress it by blindly adding an EXPECT_CALL() if you don't mean to enforce the call. See http://code.google.com/p/googlemock/wiki/CookBook#Knowing_When_to_Expect for details. -Stack trace: [ OK ] GMockOutputTest.UninterestingCall [ RUN ] GMockOutputTest.UninterestingCallToVoidFunction @@ -84,7 +83,6 @@ GMOCK WARNING: Uninteresting mock function call - returning directly. Function call: Bar3(0, 1) NOTE: You can safely ignore the above warning unless this call should not happen. Do not suppress it by blindly adding an EXPECT_CALL() if you don't mean to enforce the call. See http://code.google.com/p/googlemock/wiki/CookBook#Knowing_When_to_Expect for details. -Stack trace: [ OK ] GMockOutputTest.UninterestingCallToVoidFunction [ RUN ] GMockOutputTest.RetiredExpectation unknown file: Failure @@ -269,7 +267,6 @@ FILE:#: Function call: Bar2(2, 2) Returns: true NOTE: You can safely ignore the above warning unless this call should not happen. Do not suppress it by blindly adding an EXPECT_CALL() if you don't mean to enforce the call. See http://code.google.com/p/googlemock/wiki/CookBook#Knowing_When_to_Expect for details. -Stack trace: GMOCK WARNING: Uninteresting mock function call - taking default action specified at: @@ -277,7 +274,6 @@ FILE:#: Function call: Bar2(1, 1) Returns: false NOTE: You can safely ignore the above warning unless this call should not happen. Do not suppress it by blindly adding an EXPECT_CALL() if you don't mean to enforce the call. See http://code.google.com/p/googlemock/wiki/CookBook#Knowing_When_to_Expect for details. -Stack trace: [ OK ] GMockOutputTest.UninterestingCallWithDefaultAction [ RUN ] GMockOutputTest.ExplicitActionsRunOutWithDefaultAction