Chromium Code Reviews| Index: base/logging_unittest.cc |
| diff --git a/base/logging_unittest.cc b/base/logging_unittest.cc |
| index 8b9701a545fbf99415bcf9f640c2000380ed7549..32d3f9588274180738d82ee2c7eb019b9be9c035 100644 |
| --- a/base/logging_unittest.cc |
| +++ b/base/logging_unittest.cc |
| @@ -234,6 +234,326 @@ TEST_F(LoggingTest, DcheckReleaseBehavior) { |
| DCHECK_EQ(some_variable, 1) << "test"; |
| } |
| +TEST_F(LoggingTest, DCheckStatements) { |
| + SetLogAssertHandler(&LogSink); |
| + |
| + EXPECT_EQ(0, log_sink_call_count); |
| + |
| + bool reached = false; |
|
Sigurður Ásgeirsson
2015/06/25 12:25:09
It's totally opaque what's being tested here and t
erikwright (departed)
2015/07/07 18:30:56
I've updated this particular test case with some s
|
| + if (false) |
| + DCHECK(false); |
| + else |
| + DCHECK(reached = true); |
| + ASSERT_EQ(DCHECK_IS_ON(), reached); |
| + |
| + reached = false; |
| + if (true) |
| + DCHECK(reached = true); |
| + else |
| + DCHECK(false); |
| + ASSERT_EQ(DCHECK_IS_ON(), reached); |
| + |
| + reached = false; |
| + switch (2) { |
| + case 1: |
| + DCHECK(false); |
| + case 2: |
| + DCHECK(reached=true); |
| + default: |
| + break; |
| + } |
| + ASSERT_EQ(DCHECK_IS_ON(), reached); |
| + |
| + // Cases with failing checks. |
| + EXPECT_EQ(0, log_sink_call_count); |
| + |
| + reached = false; |
| + if (false) |
| + DCHECK(reached = true); |
| + else |
| + DCHECK(false); |
| + ASSERT_FALSE(reached); |
| + ASSERT_EQ(DCHECK_IS_ON() ? 1 : 0, log_sink_call_count); |
| + |
| + reached = false; |
| + if (true) |
| + DCHECK(false); |
| + else |
| + DCHECK(reached = true); |
| + ASSERT_FALSE(reached); |
| + ASSERT_EQ(DCHECK_IS_ON() ? 2 : 0, log_sink_call_count); |
| + |
| + reached = false; |
| + switch (2) { |
| + case 1: |
| + DCHECK(reached = true); |
| + case 2: |
| + DCHECK(false); |
| + default: |
| + break; |
| + } |
| + ASSERT_FALSE(reached); |
| + ASSERT_EQ(DCHECK_IS_ON() ? 3 : 0, log_sink_call_count); |
| +} |
| + |
| +TEST_F(LoggingTest, CheckStatements) { |
| + SetLogAssertHandler(&LogSink); |
| + |
| + EXPECT_EQ(0, log_sink_call_count); |
| + |
| + bool reached = false; |
| + if (false) |
| + CHECK(false); |
| + else |
| + CHECK(reached = true); |
| + ASSERT_TRUE(reached); |
| + |
| + reached = false; |
| + if (true) |
| + CHECK(reached = true); |
| + else |
| + CHECK(false); |
| + ASSERT_TRUE(reached); |
| + |
| + reached = false; |
| + switch (2) { |
| + case 1: |
| + CHECK(false); |
| + case 2: |
| + CHECK(reached=true); |
| + default: |
| + break; |
| + } |
| + ASSERT_TRUE(reached); |
| + |
| + // Cases with failing checks. |
| + EXPECT_EQ(0, log_sink_call_count); |
| + |
| + reached = false; |
| + if (false) |
| + CHECK(reached = true); |
| + else |
| + CHECK(false); |
| + ASSERT_FALSE(reached); |
| + ASSERT_EQ(1, log_sink_call_count); |
| + |
| + reached = false; |
| + if (true) |
| + CHECK(false); |
| + else |
| + CHECK(reached = true); |
| + ASSERT_FALSE(reached); |
| + ASSERT_EQ(2, log_sink_call_count); |
| + |
| + reached = false; |
| + switch (2) { |
| + case 1: |
| + CHECK(reached = true); |
| + case 2: |
| + CHECK(false); |
| + default: |
| + break; |
| + } |
| + ASSERT_FALSE(reached); |
| + ASSERT_EQ(3, log_sink_call_count); |
| +} |
| + |
| +TEST_F(LoggingTest, DCheckEqStatements) { |
| + SetLogAssertHandler(&LogSink); |
| + |
| + EXPECT_EQ(0, log_sink_call_count); |
| + |
| + bool reached = false; |
| + if (false) |
| + DCHECK_EQ(false, true); |
| + else |
| + DCHECK_EQ(true, reached = true); |
| + ASSERT_EQ(DCHECK_IS_ON(), reached); |
| + |
| + reached = false; |
| + if (true) |
| + DCHECK_EQ(true, reached = true); |
| + else |
| + DCHECK_EQ(false, true); |
| + ASSERT_EQ(DCHECK_IS_ON(), reached); |
| + |
| + reached = false; |
| + switch (2) { |
| + case 1: |
| + DCHECK_EQ(false, true); |
| + case 2: |
| + DCHECK_EQ(true, reached=true); |
| + default: |
| + break; |
| + } |
| + ASSERT_EQ(DCHECK_IS_ON(), reached); |
| + |
| + // Cases with failing checks. |
| + EXPECT_EQ(0, log_sink_call_count); |
| + |
| + reached = false; |
| + if (false) |
| + DCHECK_EQ(true, reached = true); |
| + else |
| + DCHECK_EQ(false, true); |
| + ASSERT_FALSE(reached); |
| + ASSERT_EQ(DCHECK_IS_ON() ? 1 : 0, log_sink_call_count); |
| + |
| + reached = false; |
| + if (true) |
| + DCHECK_EQ(false, true); |
| + else |
| + DCHECK_EQ(true, reached = true); |
| + ASSERT_FALSE(reached); |
| + ASSERT_EQ(DCHECK_IS_ON() ? 2 : 0, log_sink_call_count); |
| + |
| + reached = false; |
| + switch (2) { |
| + case 1: |
| + DCHECK_EQ(true, reached = true); |
| + case 2: |
| + DCHECK_EQ(false, true); |
| + default: |
| + break; |
| + } |
| + ASSERT_FALSE(reached); |
| + ASSERT_EQ(DCHECK_IS_ON() ? 3 : 0, log_sink_call_count); |
| +} |
| + |
| +TEST_F(LoggingTest, CheckEqStatements) { |
| + SetLogAssertHandler(&LogSink); |
| + |
| + EXPECT_EQ(0, log_sink_call_count); |
| + |
| + bool reached = false; |
| + if (false) |
| + CHECK_EQ(false, true); |
| + else |
| + CHECK_EQ(true, reached = true); |
| + ASSERT_TRUE(reached); |
| + |
| + reached = false; |
| + if (true) |
| + CHECK_EQ(true, reached = true); |
| + else |
| + CHECK_EQ(false, true); |
| + ASSERT_TRUE(reached); |
| + |
| + reached = false; |
| + switch (2) { |
| + case 1: |
| + CHECK_EQ(false, true); |
| + case 2: |
| + CHECK_EQ(true, reached = true); |
| + default: |
| + break; |
| + } |
| + ASSERT_TRUE(reached); |
| + |
| + // Cases with failing checks. |
| + EXPECT_EQ(0, log_sink_call_count); |
| + |
| + reached = false; |
| + if (false) |
| + CHECK_EQ(true, reached = true); |
| + else |
| + CHECK_EQ(false, true); |
| + ASSERT_FALSE(reached); |
| + ASSERT_EQ(1, log_sink_call_count); |
| + |
| + reached = false; |
| + if (true) |
| + CHECK_EQ(false, true); |
| + else |
| + CHECK_EQ(true, reached = true); |
| + ASSERT_FALSE(reached); |
| + ASSERT_EQ(2, log_sink_call_count); |
| + |
| + reached = false; |
| + switch (2) { |
| + case 1: |
| + CHECK_EQ(true, reached = true); |
| + case 2: |
| + CHECK_EQ(false, true); |
| + default: |
| + break; |
| + } |
| + ASSERT_FALSE(reached); |
| + ASSERT_EQ(3, log_sink_call_count); |
| +} |
| + |
| +TEST_F(LoggingTest, LogStatements) { |
| + bool reached = false; |
| + if (true) |
| + LOG(INFO) << "Hello: " << (reached = true); |
| + else |
| + LOG(FATAL) << "Goodbye."; |
| + ASSERT_TRUE(reached); |
| + |
| + reached = false; |
| + if (false) |
| + LOG(FATAL) << "Goodbye."; |
| + else |
| + LOG(INFO) << "Hello: " << (reached = true); |
| + ASSERT_TRUE(reached); |
| + |
| + reached = false; |
| + if (true) |
| + LOG_IF(INFO, reached = true) << "Hello."; |
| + else |
| + LOG_IF(FATAL, true) << "Goodbye."; |
| + ASSERT_TRUE(reached); |
| + |
| + reached = false; |
| + if (false) |
| + LOG_IF(FATAL, true) << "Goodbye."; |
| + else |
| + LOG_IF(INFO, reached = true) << "Hello."; |
| + ASSERT_TRUE(reached); |
| + |
| + reached = false; |
| + if (false) |
| + LOG_IF(FATAL, true) << "Goodbye."; |
| + else |
| + LOG_IF(INFO, false) << "Derp: " << (reached = true); |
| + ASSERT_FALSE(reached); |
| + |
| + reached = false; |
| + if (true) |
| + DLOG(INFO) << "Hello: " << (reached = true); |
| + else |
| + DLOG(FATAL) << "Goodbye."; |
| + ASSERT_EQ(DLOG_IS_ON(INFO), reached); |
| + |
| + reached = false; |
| + if (false) |
| + DLOG(FATAL) << "Goodbye."; |
| + else |
| + DLOG(INFO) << "Hello: " << (reached = true); |
| + ASSERT_EQ(DLOG_IS_ON(INFO), reached); |
| + |
| + reached = false; |
| + if (true) |
| + DLOG_IF(INFO, true) << "Hello: " << (reached = true); |
| + else |
| + DLOG_IF(FATAL, true) << "Goodbye."; |
| + ASSERT_EQ(DLOG_IS_ON(INFO), reached); |
| + |
| + reached = false; |
| + if (false) |
| + DLOG_IF(FATAL, true) << "Goodbye."; |
| + else |
| + DLOG_IF(INFO, true) << "Hello: " << (reached = true); |
| + ASSERT_EQ(DLOG_IS_ON(INFO), reached); |
| + |
| + reached = false; |
| + if (false) |
| + DLOG_IF(FATAL, true) << "Goodbye."; |
| + else |
| + DLOG_IF(INFO, false) << "Derp: " << (reached = true); |
| + ASSERT_FALSE(reached); |
| +} |
| + |
| // Test that defining an operator<< for a type in a namespace doesn't prevent |
| // other code in that namespace from calling the operator<<(ostream, wstring) |
| // defined by logging.h. This can fail if operator<<(ostream, wstring) can't be |