Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: base/logging_unittest.cc

Issue 2954883002: Add dvlog_always_on to enable DVLOG without DEBUG and DCHECK option
Patch Set: Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « base/logging.h ('k') | base/message_loop/incoming_task_queue.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/logging.h" 5 #include "base/logging.h"
6 #include "base/bind.h" 6 #include "base/bind.h"
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "base/compiler_specific.h" 8 #include "base/compiler_specific.h"
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/strings/string_piece.h" 10 #include "base/strings/string_piece.h"
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 class MockLogAssertHandler { 76 class MockLogAssertHandler {
77 public: 77 public:
78 MOCK_METHOD4( 78 MOCK_METHOD4(
79 HandleLogAssert, 79 HandleLogAssert,
80 void(const char*, int, const base::StringPiece, const base::StringPiece)); 80 void(const char*, int, const base::StringPiece, const base::StringPiece));
81 }; 81 };
82 82
83 TEST_F(LoggingTest, BasicLogging) { 83 TEST_F(LoggingTest, BasicLogging) {
84 MockLogSource mock_log_source; 84 MockLogSource mock_log_source;
85 EXPECT_CALL(mock_log_source, Log()) 85 EXPECT_CALL(mock_log_source, Log())
86 .Times(DCHECK_IS_ON() ? 16 : 8) 86 .Times(DCHECK_IS_ON() || DVLOG_IS_ON() ? 16 : 8)
87 .WillRepeatedly(Return("log message")); 87 .WillRepeatedly(Return("log message"));
88 88
89 SetMinLogLevel(LOG_INFO); 89 SetMinLogLevel(LOG_INFO);
90 90
91 EXPECT_TRUE(LOG_IS_ON(INFO)); 91 EXPECT_TRUE(LOG_IS_ON(INFO));
92 EXPECT_TRUE((DCHECK_IS_ON() != 0) == DLOG_IS_ON(INFO)); 92 EXPECT_TRUE((DCHECK_IS_ON() != 0) == DLOG_IS_ON(INFO));
93 EXPECT_TRUE(VLOG_IS_ON(0)); 93 EXPECT_TRUE(VLOG_IS_ON(0));
94 94
95 LOG(INFO) << mock_log_source.Log(); 95 LOG(INFO) << mock_log_source.Log();
96 LOG_IF(INFO, true) << mock_log_source.Log(); 96 LOG_IF(INFO, true) << mock_log_source.Log();
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 ASSERT_NE(0u, child_crash_addr_1); 364 ASSERT_NE(0u, child_crash_addr_1);
365 ASSERT_NE(0u, child_crash_addr_2); 365 ASSERT_NE(0u, child_crash_addr_2);
366 ASSERT_NE(0u, child_crash_addr_3); 366 ASSERT_NE(0u, child_crash_addr_3);
367 ASSERT_NE(child_crash_addr_1, child_crash_addr_2); 367 ASSERT_NE(child_crash_addr_1, child_crash_addr_2);
368 ASSERT_NE(child_crash_addr_1, child_crash_addr_3); 368 ASSERT_NE(child_crash_addr_1, child_crash_addr_3);
369 ASSERT_NE(child_crash_addr_2, child_crash_addr_3); 369 ASSERT_NE(child_crash_addr_2, child_crash_addr_3);
370 } 370 }
371 #endif // OS_POSIX 371 #endif // OS_POSIX
372 372
373 TEST_F(LoggingTest, DebugLoggingReleaseBehavior) { 373 TEST_F(LoggingTest, DebugLoggingReleaseBehavior) {
374 #if DCHECK_IS_ON() 374 #if DCHECK_IS_ON() || DVLOG_IS_ON()
375 int debug_only_variable = 1; 375 int debug_only_variable = 1;
376 #endif 376 #endif
377 // These should avoid emitting references to |debug_only_variable| 377 // These should avoid emitting references to |debug_only_variable|
378 // in release mode. 378 // in release mode.
379 DLOG_IF(INFO, debug_only_variable) << "test"; 379 DLOG_IF(INFO, debug_only_variable) << "test";
380 DLOG_ASSERT(debug_only_variable) << "test"; 380 DLOG_ASSERT(debug_only_variable) << "test";
381 DPLOG_IF(INFO, debug_only_variable) << "test"; 381 DPLOG_IF(INFO, debug_only_variable) << "test";
382 DVLOG_IF(1, debug_only_variable) << "test"; 382 DVLOG_IF(1, debug_only_variable) << "test";
383 } 383 }
384 384
385 TEST_F(LoggingTest, DcheckStreamsAreLazy) { 385 TEST_F(LoggingTest, DcheckStreamsAreLazy) {
386 MockLogSource mock_log_source; 386 MockLogSource mock_log_source;
387 EXPECT_CALL(mock_log_source, Log()).Times(0); 387 EXPECT_CALL(mock_log_source, Log()).Times(0);
388 #if DCHECK_IS_ON() 388 #if DCHECK_IS_ON() || DVLOG_IS_ON()
389 DCHECK(true) << mock_log_source.Log(); 389 DCHECK(true) << mock_log_source.Log();
390 DCHECK_EQ(0, 0) << mock_log_source.Log(); 390 DCHECK_EQ(0, 0) << mock_log_source.Log();
391 #else 391 #else
392 DCHECK(mock_log_source.Log()) << mock_log_source.Log(); 392 DCHECK(mock_log_source.Log()) << mock_log_source.Log();
393 DPCHECK(mock_log_source.Log()) << mock_log_source.Log(); 393 DPCHECK(mock_log_source.Log()) << mock_log_source.Log();
394 DCHECK_EQ(0, 0) << mock_log_source.Log(); 394 DCHECK_EQ(0, 0) << mock_log_source.Log();
395 DCHECK_EQ(mock_log_source.Log(), static_cast<const char*>(NULL)) 395 DCHECK_EQ(mock_log_source.Log(), static_cast<const char*>(NULL))
396 << mock_log_source.Log(); 396 << mock_log_source.Log();
397 #endif 397 #endif
398 } 398 }
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
472 DCHECK_EQ(mp1, &MemberFunctions::MemberFunction1); 472 DCHECK_EQ(mp1, &MemberFunctions::MemberFunction1);
473 EXPECT_EQ(0, g_log_sink_call_count); 473 EXPECT_EQ(0, g_log_sink_call_count);
474 DCHECK_EQ(mp2, &MemberFunctions::MemberFunction2); 474 DCHECK_EQ(mp2, &MemberFunctions::MemberFunction2);
475 EXPECT_EQ(0, g_log_sink_call_count); 475 EXPECT_EQ(0, g_log_sink_call_count);
476 DCHECK_EQ(fp1, fp2); 476 DCHECK_EQ(fp1, fp2);
477 EXPECT_EQ(DCHECK_IS_ON() ? 1 : 0, g_log_sink_call_count); 477 EXPECT_EQ(DCHECK_IS_ON() ? 1 : 0, g_log_sink_call_count);
478 DCHECK_EQ(mp2, &MemberFunctions::MemberFunction1); 478 DCHECK_EQ(mp2, &MemberFunctions::MemberFunction1);
479 EXPECT_EQ(DCHECK_IS_ON() ? 2 : 0, g_log_sink_call_count); 479 EXPECT_EQ(DCHECK_IS_ON() ? 2 : 0, g_log_sink_call_count);
480 } 480 }
481 481
482 TEST_F(LoggingTest, Dvlog) {
483 #if defined(NDEBUG) && !defined(DVLOG_ALWAYS_ON)
484 // Release build.
485 EXPECT_FALSE(DVLOG_IS_ON());
486 #elif defined(NDEBUG) && defined(DVLOG_ALWAYS_ON)
487 // Release build with real DVLOGs
488 EXPECT_TRUE(DVLOG_IS_ON());
489 #else
490 // Debug build.
491 EXPECT_TRUE(DVLOG_IS_ON());
492 #endif
493 }
494
482 TEST_F(LoggingTest, DcheckReleaseBehavior) { 495 TEST_F(LoggingTest, DcheckReleaseBehavior) {
483 int some_variable = 1; 496 int some_variable = 1;
484 // These should still reference |some_variable| so we don't get 497 // These should still reference |some_variable| so we don't get
485 // unused variable warnings. 498 // unused variable warnings.
486 DCHECK(some_variable) << "test"; 499 DCHECK(some_variable) << "test";
487 DPCHECK(some_variable) << "test"; 500 DPCHECK(some_variable) << "test";
488 DCHECK_EQ(some_variable, 1) << "test"; 501 DCHECK_EQ(some_variable, 1) << "test";
489 } 502 }
490 503
491 TEST_F(LoggingTest, DCheckEqStatements) { 504 TEST_F(LoggingTest, DCheckEqStatements) {
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
564 std::wstring wstr = L"Hello World"; 577 std::wstring wstr = L"Hello World";
565 std::ostringstream ostr; 578 std::ostringstream ostr;
566 ostr << wstr; 579 ostr << wstr;
567 EXPECT_EQ("Hello World", ostr.str()); 580 EXPECT_EQ("Hello World", ostr.str());
568 } 581 }
569 } // namespace nested_test 582 } // namespace nested_test
570 583
571 } // namespace 584 } // namespace
572 585
573 } // namespace logging 586 } // namespace logging
OLDNEW
« no previous file with comments | « base/logging.h ('k') | base/message_loop/incoming_task_queue.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698