Fixes tests leaking altered values of GMOCK_FLAG(verbose) (issue 110).
This commit is contained in:
parent
54af9ba50a
commit
76c1c612e2
@ -565,10 +565,12 @@ void TestLogWithSeverity(const string& verbosity, LogSeverity severity,
|
|||||||
// Tests that when the stack_frames_to_skip parameter is negative,
|
// Tests that when the stack_frames_to_skip parameter is negative,
|
||||||
// Log() doesn't include the stack trace in the output.
|
// Log() doesn't include the stack trace in the output.
|
||||||
TEST(LogTest, NoStackTraceWhenStackFramesToSkipIsNegative) {
|
TEST(LogTest, NoStackTraceWhenStackFramesToSkipIsNegative) {
|
||||||
|
const string saved_flag = GMOCK_FLAG(verbose);
|
||||||
GMOCK_FLAG(verbose) = kInfoVerbosity;
|
GMOCK_FLAG(verbose) = kInfoVerbosity;
|
||||||
CaptureStdout();
|
CaptureStdout();
|
||||||
Log(INFO, "Test log.\n", -1);
|
Log(INFO, "Test log.\n", -1);
|
||||||
EXPECT_STREQ("\nTest log.\n", GetCapturedStdout().c_str());
|
EXPECT_STREQ("\nTest log.\n", GetCapturedStdout().c_str());
|
||||||
|
GMOCK_FLAG(verbose) = saved_flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tests that in opt mode, a positive stack_frames_to_skip argument is
|
// Tests that in opt mode, a positive stack_frames_to_skip argument is
|
||||||
|
@ -137,6 +137,7 @@ TEST(NiceMockTest, NoWarningForUninterestingCallAfterDeath) {
|
|||||||
TEST(NiceMockTest, InfoForUninterestingCall) {
|
TEST(NiceMockTest, InfoForUninterestingCall) {
|
||||||
NiceMock<MockFoo> nice_foo;
|
NiceMock<MockFoo> nice_foo;
|
||||||
|
|
||||||
|
const string saved_flag = GMOCK_FLAG(verbose);
|
||||||
GMOCK_FLAG(verbose) = "info";
|
GMOCK_FLAG(verbose) = "info";
|
||||||
CaptureStdout();
|
CaptureStdout();
|
||||||
nice_foo.DoThis();
|
nice_foo.DoThis();
|
||||||
@ -147,6 +148,7 @@ TEST(NiceMockTest, InfoForUninterestingCall) {
|
|||||||
nice_foo.DoThat(true);
|
nice_foo.DoThat(true);
|
||||||
EXPECT_THAT(GetCapturedStdout(),
|
EXPECT_THAT(GetCapturedStdout(),
|
||||||
HasSubstr("Uninteresting mock function call"));
|
HasSubstr("Uninteresting mock function call"));
|
||||||
|
GMOCK_FLAG(verbose) = saved_flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // GTEST_HAS_STREAM_REDIRECTION_
|
#endif // GTEST_HAS_STREAM_REDIRECTION_
|
||||||
|
@ -1783,6 +1783,25 @@ class MockC {
|
|||||||
GTEST_DISALLOW_COPY_AND_ASSIGN_(MockC);
|
GTEST_DISALLOW_COPY_AND_ASSIGN_(MockC);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class VerboseFlagPreservingFixture : public testing::Test {
|
||||||
|
protected:
|
||||||
|
// The code needs to work when both ::string and ::std::string are defined
|
||||||
|
// and the flag is implemented as a testing::internal::String. In this
|
||||||
|
// case, without the call to c_str(), the compiler will complain that it
|
||||||
|
// cannot figure out what overload of string constructor to use.
|
||||||
|
// TODO(vladl@google.com): Use internal::string instead of String for
|
||||||
|
// string flags in Google Test.
|
||||||
|
VerboseFlagPreservingFixture()
|
||||||
|
: saved_verbose_flag_(GMOCK_FLAG(verbose).c_str()) {}
|
||||||
|
|
||||||
|
~VerboseFlagPreservingFixture() { GMOCK_FLAG(verbose) = saved_verbose_flag_; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
const string saved_verbose_flag_;
|
||||||
|
|
||||||
|
GTEST_DISALLOW_COPY_AND_ASSIGN_(VerboseFlagPreservingFixture);
|
||||||
|
};
|
||||||
|
|
||||||
#if GTEST_HAS_STREAM_REDIRECTION_
|
#if GTEST_HAS_STREAM_REDIRECTION_
|
||||||
|
|
||||||
// Tests that an uninteresting mock function call generates a warning
|
// Tests that an uninteresting mock function call generates a warning
|
||||||
@ -1842,7 +1861,7 @@ TEST(FunctionCallMessageTest, UninterestingCallPrintsArgumentsAndReturnValue) {
|
|||||||
|
|
||||||
// Tests how the --gmock_verbose flag affects Google Mock's output.
|
// Tests how the --gmock_verbose flag affects Google Mock's output.
|
||||||
|
|
||||||
class GMockVerboseFlagTest : public testing::Test {
|
class GMockVerboseFlagTest : public VerboseFlagPreservingFixture {
|
||||||
public:
|
public:
|
||||||
// Verifies that the given Google Mock output is correct. (When
|
// Verifies that the given Google Mock output is correct. (When
|
||||||
// should_print is true, the output should match the given regex and
|
// should_print is true, the output should match the given regex and
|
||||||
@ -1982,22 +2001,9 @@ class LogTestHelper {
|
|||||||
GTEST_DISALLOW_COPY_AND_ASSIGN_(LogTestHelper);
|
GTEST_DISALLOW_COPY_AND_ASSIGN_(LogTestHelper);
|
||||||
};
|
};
|
||||||
|
|
||||||
class GMockLogTest : public ::testing::Test {
|
class GMockLogTest : public VerboseFlagPreservingFixture {
|
||||||
protected:
|
protected:
|
||||||
virtual void SetUp() {
|
|
||||||
// The code needs to work when both ::string and ::std::string are
|
|
||||||
// defined and the flag is implemented as a
|
|
||||||
// testing::internal::String. In this case, without the call to
|
|
||||||
// c_str(), the compiler will complain that it cannot figure out
|
|
||||||
// whether the String flag should be converted to a ::string or an
|
|
||||||
// ::std::string before being assigned to original_verbose_.
|
|
||||||
original_verbose_ = GMOCK_FLAG(verbose).c_str();
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void TearDown() { GMOCK_FLAG(verbose) = original_verbose_; }
|
|
||||||
|
|
||||||
LogTestHelper helper_;
|
LogTestHelper helper_;
|
||||||
string original_verbose_;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
TEST_F(GMockLogTest, DoesNotPrintGoodCallInternallyIfVerbosityIsWarning) {
|
TEST_F(GMockLogTest, DoesNotPrintGoodCallInternallyIfVerbosityIsWarning) {
|
||||||
|
Loading…
Reference in New Issue
Block a user