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 |