| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/basictypes.h" | 5 #include "base/basictypes.h" |
| 6 #include "base/logging.h" | 6 #include "base/logging.h" |
| 7 | 7 |
| 8 #include "testing/gmock/include/gmock/gmock.h" | 8 #include "testing/gmock/include/gmock/gmock.h" |
| 9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
| 10 | 10 |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 73 VLOG_IF(0, true) << mock_log_source.Log(); | 73 VLOG_IF(0, true) << mock_log_source.Log(); |
| 74 | 74 |
| 75 DLOG(INFO) << mock_log_source.Log(); | 75 DLOG(INFO) << mock_log_source.Log(); |
| 76 DLOG_IF(INFO, true) << mock_log_source.Log(); | 76 DLOG_IF(INFO, true) << mock_log_source.Log(); |
| 77 DPLOG(INFO) << mock_log_source.Log(); | 77 DPLOG(INFO) << mock_log_source.Log(); |
| 78 DPLOG_IF(INFO, true) << mock_log_source.Log(); | 78 DPLOG_IF(INFO, true) << mock_log_source.Log(); |
| 79 DVLOG(0) << mock_log_source.Log(); | 79 DVLOG(0) << mock_log_source.Log(); |
| 80 DVLOG_IF(0, true) << mock_log_source.Log(); | 80 DVLOG_IF(0, true) << mock_log_source.Log(); |
| 81 } | 81 } |
| 82 | 82 |
| 83 TEST_F(LoggingTest, LogIsOn) { |
| 84 #if defined(NDEBUG) |
| 85 const bool kDfatalIsFatal = false; |
| 86 #else // defined(NDEBUG) |
| 87 const bool kDfatalIsFatal = true; |
| 88 #endif // defined(NDEBUG) |
| 89 |
| 90 SetMinLogLevel(LOG_INFO); |
| 91 EXPECT_TRUE(LOG_IS_ON(INFO)); |
| 92 EXPECT_TRUE(LOG_IS_ON(WARNING)); |
| 93 EXPECT_TRUE(LOG_IS_ON(ERROR)); |
| 94 EXPECT_TRUE(LOG_IS_ON(ERROR_REPORT)); |
| 95 EXPECT_TRUE(LOG_IS_ON(FATAL)); |
| 96 EXPECT_TRUE(LOG_IS_ON(DFATAL)); |
| 97 |
| 98 SetMinLogLevel(LOG_WARNING); |
| 99 EXPECT_FALSE(LOG_IS_ON(INFO)); |
| 100 EXPECT_TRUE(LOG_IS_ON(WARNING)); |
| 101 EXPECT_TRUE(LOG_IS_ON(ERROR)); |
| 102 EXPECT_TRUE(LOG_IS_ON(ERROR_REPORT)); |
| 103 EXPECT_TRUE(LOG_IS_ON(FATAL)); |
| 104 EXPECT_TRUE(LOG_IS_ON(DFATAL)); |
| 105 |
| 106 SetMinLogLevel(LOG_ERROR); |
| 107 EXPECT_FALSE(LOG_IS_ON(INFO)); |
| 108 EXPECT_FALSE(LOG_IS_ON(WARNING)); |
| 109 EXPECT_TRUE(LOG_IS_ON(ERROR)); |
| 110 EXPECT_TRUE(LOG_IS_ON(ERROR_REPORT)); |
| 111 EXPECT_TRUE(LOG_IS_ON(FATAL)); |
| 112 EXPECT_TRUE(LOG_IS_ON(DFATAL)); |
| 113 |
| 114 SetMinLogLevel(LOG_ERROR_REPORT); |
| 115 EXPECT_FALSE(LOG_IS_ON(INFO)); |
| 116 EXPECT_FALSE(LOG_IS_ON(WARNING)); |
| 117 EXPECT_FALSE(LOG_IS_ON(ERROR)); |
| 118 EXPECT_TRUE(LOG_IS_ON(ERROR_REPORT)); |
| 119 EXPECT_TRUE(LOG_IS_ON(FATAL)); |
| 120 EXPECT_EQ(kDfatalIsFatal, LOG_IS_ON(DFATAL)); |
| 121 |
| 122 // LOG_IS_ON(ERROR_REPORT) should always be true. |
| 123 SetMinLogLevel(LOG_FATAL); |
| 124 EXPECT_FALSE(LOG_IS_ON(INFO)); |
| 125 EXPECT_FALSE(LOG_IS_ON(WARNING)); |
| 126 EXPECT_FALSE(LOG_IS_ON(ERROR)); |
| 127 EXPECT_TRUE(LOG_IS_ON(ERROR_REPORT)); |
| 128 EXPECT_TRUE(LOG_IS_ON(FATAL)); |
| 129 EXPECT_EQ(kDfatalIsFatal, LOG_IS_ON(DFATAL)); |
| 130 |
| 131 // So should LOG_IS_ON(FATAL). |
| 132 SetMinLogLevel(LOG_FATAL + 1); |
| 133 EXPECT_FALSE(LOG_IS_ON(INFO)); |
| 134 EXPECT_FALSE(LOG_IS_ON(WARNING)); |
| 135 EXPECT_FALSE(LOG_IS_ON(ERROR)); |
| 136 EXPECT_TRUE(LOG_IS_ON(ERROR_REPORT)); |
| 137 EXPECT_TRUE(LOG_IS_ON(FATAL)); |
| 138 EXPECT_EQ(kDfatalIsFatal, LOG_IS_ON(DFATAL)); |
| 139 } |
| 140 |
| 83 TEST_F(LoggingTest, LoggingIsLazy) { | 141 TEST_F(LoggingTest, LoggingIsLazy) { |
| 84 MockLogSource mock_log_source; | 142 MockLogSource mock_log_source; |
| 85 EXPECT_CALL(mock_log_source, Log()).Times(0); | 143 EXPECT_CALL(mock_log_source, Log()).Times(0); |
| 86 | 144 |
| 87 SetMinLogLevel(LOG_WARNING); | 145 SetMinLogLevel(LOG_WARNING); |
| 88 | 146 |
| 89 EXPECT_FALSE(LOG_IS_ON(INFO)); | 147 EXPECT_FALSE(LOG_IS_ON(INFO)); |
| 90 EXPECT_FALSE(DLOG_IS_ON(INFO)); | 148 EXPECT_FALSE(DLOG_IS_ON(INFO)); |
| 91 EXPECT_FALSE(VLOG_IS_ON(1)); | 149 EXPECT_FALSE(VLOG_IS_ON(1)); |
| 92 | 150 |
| 93 LOG(INFO) << mock_log_source.Log(); | 151 LOG(INFO) << mock_log_source.Log(); |
| 94 LOG_IF(INFO, false) << mock_log_source.Log(); | 152 LOG_IF(INFO, false) << mock_log_source.Log(); |
| 95 PLOG(INFO) << mock_log_source.Log(); | 153 PLOG(INFO) << mock_log_source.Log(); |
| 96 PLOG_IF(INFO, false) << mock_log_source.Log(); | 154 PLOG_IF(INFO, false) << mock_log_source.Log(); |
| 97 VLOG(1) << mock_log_source.Log(); | 155 VLOG(1) << mock_log_source.Log(); |
| 98 VLOG_IF(1, true) << mock_log_source.Log(); | 156 VLOG_IF(1, true) << mock_log_source.Log(); |
| 99 | 157 |
| 100 DLOG(INFO) << mock_log_source.Log(); | 158 DLOG(INFO) << mock_log_source.Log(); |
| 101 DLOG_IF(INFO, true) << mock_log_source.Log(); | 159 DLOG_IF(INFO, true) << mock_log_source.Log(); |
| 102 DPLOG(INFO) << mock_log_source.Log(); | 160 DPLOG(INFO) << mock_log_source.Log(); |
| 103 DPLOG_IF(INFO, true) << mock_log_source.Log(); | 161 DPLOG_IF(INFO, true) << mock_log_source.Log(); |
| 104 DVLOG(1) << mock_log_source.Log(); | 162 DVLOG(1) << mock_log_source.Log(); |
| 105 DVLOG_IF(1, true) << mock_log_source.Log(); | 163 DVLOG_IF(1, true) << mock_log_source.Log(); |
| 106 } | 164 } |
| 107 | 165 |
| 108 TEST_F(LoggingTest, ChecksAreNotLazy) { | 166 TEST_F(LoggingTest, CheckStreamsAreLazy) { |
| 109 MockLogSource mock_log_source, uncalled_mock_log_source; | 167 MockLogSource mock_log_source, uncalled_mock_log_source; |
| 110 EXPECT_CALL(mock_log_source, Log()).Times(8). | 168 EXPECT_CALL(mock_log_source, Log()).Times(8). |
| 111 WillRepeatedly(Return("check message")); | 169 WillRepeatedly(Return("check message")); |
| 112 EXPECT_CALL(uncalled_mock_log_source, Log()).Times(0); | 170 EXPECT_CALL(uncalled_mock_log_source, Log()).Times(0); |
| 113 | 171 |
| 114 SetMinLogLevel(LOG_FATAL + 1); | 172 SetLogAssertHandler(&LogSink); |
| 115 EXPECT_FALSE(LOG_IS_ON(FATAL)); | |
| 116 | 173 |
| 117 CHECK(mock_log_source.Log()) << uncalled_mock_log_source.Log(); | 174 CHECK(mock_log_source.Log()) << uncalled_mock_log_source.Log(); |
| 118 PCHECK(!mock_log_source.Log()) << mock_log_source.Log(); | 175 PCHECK(!mock_log_source.Log()) << mock_log_source.Log(); |
| 119 CHECK_EQ(mock_log_source.Log(), mock_log_source.Log()) | 176 CHECK_EQ(mock_log_source.Log(), mock_log_source.Log()) |
| 120 << uncalled_mock_log_source.Log(); | 177 << uncalled_mock_log_source.Log(); |
| 121 CHECK_NE(mock_log_source.Log(), mock_log_source.Log()) | 178 CHECK_NE(mock_log_source.Log(), mock_log_source.Log()) |
| 122 << mock_log_source.Log(); | 179 << mock_log_source.Log(); |
| 123 } | 180 } |
| 124 | 181 |
| 125 TEST_F(LoggingTest, DebugLoggingReleaseBehavior) { | 182 TEST_F(LoggingTest, DebugLoggingReleaseBehavior) { |
| 126 #if !defined(NDEBUG) | 183 #if !defined(NDEBUG) |
| 127 int debug_only_variable = 1; | 184 int debug_only_variable = 1; |
| 128 #endif | 185 #endif |
| 129 // These should avoid emitting references to |debug_only_variable| | 186 // These should avoid emitting references to |debug_only_variable| |
| 130 // in release mode. | 187 // in release mode. |
| 131 DLOG_IF(INFO, debug_only_variable) << "test"; | 188 DLOG_IF(INFO, debug_only_variable) << "test"; |
| 132 DLOG_ASSERT(debug_only_variable) << "test"; | 189 DLOG_ASSERT(debug_only_variable) << "test"; |
| 133 DPLOG_IF(INFO, debug_only_variable) << "test"; | 190 DPLOG_IF(INFO, debug_only_variable) << "test"; |
| 134 DVLOG_IF(1, debug_only_variable) << "test"; | 191 DVLOG_IF(1, debug_only_variable) << "test"; |
| 135 } | 192 } |
| 136 | 193 |
| 137 TEST_F(LoggingTest, DchecksAreLazy) { | 194 TEST_F(LoggingTest, DcheckStreamsAreLazy) { |
| 138 MockLogSource mock_log_source; | 195 MockLogSource mock_log_source; |
| 139 EXPECT_CALL(mock_log_source, Log()).Times(0); | 196 EXPECT_CALL(mock_log_source, Log()).Times(0); |
| 140 | 197 |
| 141 #if !defined(LOGGING_IS_OFFICIAL_BUILD) && defined(NDEBUG) | 198 #if !defined(LOGGING_IS_OFFICIAL_BUILD) && defined(NDEBUG) |
| 142 // Unofficial release build. | 199 // Unofficial release build. |
| 143 logging::g_enable_dcheck = false; | 200 logging::g_enable_dcheck = false; |
| 144 #else // !defined(LOGGING_IS_OFFICIAL_BUILD) && defined(NDEBUG) | |
| 145 SetMinLogLevel(LOG_FATAL + 1); | |
| 146 EXPECT_FALSE(LOG_IS_ON(FATAL)); | |
| 147 #endif // !defined(LOGGING_IS_OFFICIAL_BUILD) && defined(NDEBUG) | |
| 148 DCHECK(mock_log_source.Log()) << mock_log_source.Log(); | 201 DCHECK(mock_log_source.Log()) << mock_log_source.Log(); |
| 149 DPCHECK(mock_log_source.Log()) << mock_log_source.Log(); | 202 DPCHECK(mock_log_source.Log()) << mock_log_source.Log(); |
| 150 DCHECK_EQ(0, 0) << mock_log_source.Log(); | 203 DCHECK_EQ(0, 0) << mock_log_source.Log(); |
| 151 DCHECK_EQ(mock_log_source.Log(), static_cast<const char*>(NULL)) | 204 DCHECK_EQ(mock_log_source.Log(), static_cast<const char*>(NULL)) |
| 152 << mock_log_source.Log(); | 205 << mock_log_source.Log(); |
| 206 #endif // !defined(LOGGING_IS_OFFICIAL_BUILD) && defined(NDEBUG) |
| 153 } | 207 } |
| 154 | 208 |
| 155 TEST_F(LoggingTest, Dcheck) { | 209 TEST_F(LoggingTest, Dcheck) { |
| 156 #if defined(LOGGING_IS_OFFICIAL_BUILD) | 210 #if defined(LOGGING_IS_OFFICIAL_BUILD) |
| 157 // Official build. | 211 // Official build. |
| 158 EXPECT_FALSE(DCHECK_IS_ON()); | 212 EXPECT_FALSE(DCHECK_IS_ON()); |
| 159 EXPECT_FALSE(DLOG_IS_ON(DCHECK)); | 213 EXPECT_FALSE(DLOG_IS_ON(DCHECK)); |
| 160 #elif defined(NDEBUG) | 214 #elif defined(NDEBUG) |
| 161 // Unofficial release build. | 215 // Unofficial release build. |
| 162 logging::g_enable_dcheck = true; | 216 logging::g_enable_dcheck = true; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 184 // These should still reference |some_variable| so we don't get | 238 // These should still reference |some_variable| so we don't get |
| 185 // unused variable warnings. | 239 // unused variable warnings. |
| 186 DCHECK(some_variable) << "test"; | 240 DCHECK(some_variable) << "test"; |
| 187 DPCHECK(some_variable) << "test"; | 241 DPCHECK(some_variable) << "test"; |
| 188 DCHECK_EQ(some_variable, 1) << "test"; | 242 DCHECK_EQ(some_variable, 1) << "test"; |
| 189 } | 243 } |
| 190 | 244 |
| 191 } // namespace | 245 } // namespace |
| 192 | 246 |
| 193 } // namespace logging | 247 } // namespace logging |
| OLD | NEW |