| Index: base/logging_unittest.cc
|
| diff --git a/base/logging_unittest.cc b/base/logging_unittest.cc
|
| index fa28ec6e373b953b3ba6d86cbc897f158b795535..e03c45ec179c8ad008d73e001ba143b2e6039932 100644
|
| --- a/base/logging_unittest.cc
|
| +++ b/base/logging_unittest.cc
|
| @@ -14,23 +14,35 @@ namespace {
|
|
|
| using ::testing::Return;
|
|
|
| +// Needs to be global since log assert handlers can't maintain state.
|
| +int log_sink_call_count = 0;
|
| +
|
| +void LogSink(const std::string& str) {
|
| + ++log_sink_call_count;
|
| +}
|
| +
|
| // Class to make sure any manipulations we do to the min log level are
|
| // contained (i.e., do not affect other unit tests).
|
| -class MinLogLevelSaver {
|
| +class LogStateSaver {
|
| public:
|
| - MinLogLevelSaver() : old_min_log_level_(GetMinLogLevel()) {}
|
| + LogStateSaver() : old_min_log_level_(GetMinLogLevel()) {}
|
|
|
| - ~MinLogLevelSaver() { SetMinLogLevel(old_min_log_level_); }
|
| + ~LogStateSaver() {
|
| + SetMinLogLevel(old_min_log_level_);
|
| + SetLogAssertHandler(NULL);
|
| + SetLogReportHandler(NULL);
|
| + log_sink_call_count = 0;
|
| + }
|
|
|
| private:
|
| int old_min_log_level_;
|
|
|
| - DISALLOW_COPY_AND_ASSIGN(MinLogLevelSaver);
|
| + DISALLOW_COPY_AND_ASSIGN(LogStateSaver);
|
| };
|
|
|
| class LoggingTest : public testing::Test {
|
| private:
|
| - MinLogLevelSaver min_log_level_saver_;
|
| + LogStateSaver log_state_saver_;
|
| };
|
|
|
| class MockLogSource {
|
| @@ -140,6 +152,33 @@ TEST_F(LoggingTest, DchecksAreLazy) {
|
| << mock_log_source.Log();
|
| }
|
|
|
| +TEST_F(LoggingTest, Dcheck) {
|
| +#if defined(LOGGING_IS_OFFICIAL_BUILD)
|
| + // Official build.
|
| + EXPECT_FALSE(DCHECK_IS_ON());
|
| + EXPECT_FALSE(DLOG_IS_ON(DCHECK));
|
| +#elif defined(NDEBUG)
|
| + // Unofficial release build.
|
| + logging::g_enable_dcheck = true;
|
| + logging::SetLogReportHandler(&LogSink);
|
| + EXPECT_TRUE(DCHECK_IS_ON());
|
| + EXPECT_FALSE(DLOG_IS_ON(DCHECK));
|
| +#else
|
| + // Unofficial debug build.
|
| + logging::SetLogAssertHandler(&LogSink);
|
| + EXPECT_TRUE(DCHECK_IS_ON());
|
| + EXPECT_TRUE(DLOG_IS_ON(DCHECK));
|
| +#endif // defined(LOGGING_IS_OFFICIAL_BUILD)
|
| +
|
| + EXPECT_EQ(0, log_sink_call_count);
|
| + DCHECK(false);
|
| + EXPECT_EQ(DCHECK_IS_ON() ? 1 : 0, log_sink_call_count);
|
| + DPCHECK(false);
|
| + EXPECT_EQ(DCHECK_IS_ON() ? 2 : 0, log_sink_call_count);
|
| + DCHECK_EQ(0, 1);
|
| + EXPECT_EQ(DCHECK_IS_ON() ? 3 : 0, log_sink_call_count);
|
| +}
|
| +
|
| TEST_F(LoggingTest, DcheckReleaseBehavior) {
|
| int some_variable = 1;
|
| // These should still reference |some_variable| so we don't get
|
|
|