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

Side by Side Diff: base/logging_unittest.cc

Issue 2712823003: Various logging-related cleanups & reformatting. (Closed)
Patch Set: Fix base unit-tests Created 3 years, 6 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.cc ('k') | base/syslog_logging.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 17 matching lines...) Expand all
28 #endif // OS_WIN 28 #endif // OS_WIN
29 29
30 namespace logging { 30 namespace logging {
31 31
32 namespace { 32 namespace {
33 33
34 using ::testing::Return; 34 using ::testing::Return;
35 using ::testing::_; 35 using ::testing::_;
36 36
37 // Needs to be global since log assert handlers can't maintain state. 37 // Needs to be global since log assert handlers can't maintain state.
38 int log_sink_call_count = 0; 38 int g_log_sink_call_count = 0;
39 39
40 #if !defined(OFFICIAL_BUILD) || defined(DCHECK_ALWAYS_ON) || !defined(NDEBUG) 40 #if !defined(OFFICIAL_BUILD) || defined(DCHECK_ALWAYS_ON) || !defined(NDEBUG)
41 void LogSink(const char* file, 41 void LogSink(const char* file,
42 int line, 42 int line,
43 const base::StringPiece message, 43 const base::StringPiece message,
44 const base::StringPiece stack_trace) { 44 const base::StringPiece stack_trace) {
45 ++log_sink_call_count; 45 ++g_log_sink_call_count;
46 } 46 }
47 #endif 47 #endif
48 48
49 // Class to make sure any manipulations we do to the min log level are 49 // Class to make sure any manipulations we do to the min log level are
50 // contained (i.e., do not affect other unit tests). 50 // contained (i.e., do not affect other unit tests).
51 class LogStateSaver { 51 class LogStateSaver {
52 public: 52 public:
53 LogStateSaver() : old_min_log_level_(GetMinLogLevel()) {} 53 LogStateSaver() : old_min_log_level_(GetMinLogLevel()) {}
54 54
55 ~LogStateSaver() { 55 ~LogStateSaver() {
56 SetMinLogLevel(old_min_log_level_); 56 SetMinLogLevel(old_min_log_level_);
57 log_sink_call_count = 0; 57 g_log_sink_call_count = 0;
58 } 58 }
59 59
60 private: 60 private:
61 int old_min_log_level_; 61 int old_min_log_level_;
62 62
63 DISALLOW_COPY_AND_ASSIGN(LogStateSaver); 63 DISALLOW_COPY_AND_ASSIGN(LogStateSaver);
64 }; 64 };
65 65
66 class LoggingTest : public testing::Test { 66 class LoggingTest : public testing::Test {
67 private: 67 private:
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 EXPECT_TRUE(LOG_IS_ON(ERROR)); 138 EXPECT_TRUE(LOG_IS_ON(ERROR));
139 EXPECT_TRUE(LOG_IS_ON(FATAL)); 139 EXPECT_TRUE(LOG_IS_ON(FATAL));
140 EXPECT_TRUE(LOG_IS_ON(DFATAL)); 140 EXPECT_TRUE(LOG_IS_ON(DFATAL));
141 141
142 // LOG_IS_ON(FATAL) should always be true. 142 // LOG_IS_ON(FATAL) should always be true.
143 SetMinLogLevel(LOG_FATAL + 1); 143 SetMinLogLevel(LOG_FATAL + 1);
144 EXPECT_FALSE(LOG_IS_ON(INFO)); 144 EXPECT_FALSE(LOG_IS_ON(INFO));
145 EXPECT_FALSE(LOG_IS_ON(WARNING)); 145 EXPECT_FALSE(LOG_IS_ON(WARNING));
146 EXPECT_FALSE(LOG_IS_ON(ERROR)); 146 EXPECT_FALSE(LOG_IS_ON(ERROR));
147 EXPECT_TRUE(LOG_IS_ON(FATAL)); 147 EXPECT_TRUE(LOG_IS_ON(FATAL));
148 EXPECT_TRUE(kDfatalIsFatal == LOG_IS_ON(DFATAL)); 148 EXPECT_EQ(kDfatalIsFatal, LOG_IS_ON(DFATAL));
149 } 149 }
150 150
151 TEST_F(LoggingTest, LoggingIsLazyBySeverity) { 151 TEST_F(LoggingTest, LoggingIsLazyBySeverity) {
152 MockLogSource mock_log_source; 152 MockLogSource mock_log_source;
153 EXPECT_CALL(mock_log_source, Log()).Times(0); 153 EXPECT_CALL(mock_log_source, Log()).Times(0);
154 154
155 SetMinLogLevel(LOG_WARNING); 155 SetMinLogLevel(LOG_WARNING);
156 156
157 EXPECT_FALSE(LOG_IS_ON(INFO)); 157 EXPECT_FALSE(LOG_IS_ON(INFO));
158 EXPECT_FALSE(DLOG_IS_ON(INFO)); 158 EXPECT_FALSE(DLOG_IS_ON(INFO));
(...skipping 205 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 !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON) 374 #if DCHECK_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
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
421 ScopedLogAssertHandler scoped_assert_handler(base::Bind(LogSink)); 421 ScopedLogAssertHandler scoped_assert_handler(base::Bind(LogSink));
422 EXPECT_TRUE(DCHECK_IS_ON()); 422 EXPECT_TRUE(DCHECK_IS_ON());
423 EXPECT_TRUE(DLOG_IS_ON(DCHECK)); 423 EXPECT_TRUE(DLOG_IS_ON(DCHECK));
424 #else 424 #else
425 // Debug build. 425 // Debug build.
426 ScopedLogAssertHandler scoped_assert_handler(base::Bind(LogSink)); 426 ScopedLogAssertHandler scoped_assert_handler(base::Bind(LogSink));
427 EXPECT_TRUE(DCHECK_IS_ON()); 427 EXPECT_TRUE(DCHECK_IS_ON());
428 EXPECT_TRUE(DLOG_IS_ON(DCHECK)); 428 EXPECT_TRUE(DLOG_IS_ON(DCHECK));
429 #endif 429 #endif
430 430
431 EXPECT_EQ(0, log_sink_call_count); 431 EXPECT_EQ(0, g_log_sink_call_count);
432 DCHECK(false); 432 DCHECK(false);
433 EXPECT_EQ(DCHECK_IS_ON() ? 1 : 0, log_sink_call_count); 433 EXPECT_EQ(DCHECK_IS_ON() ? 1 : 0, g_log_sink_call_count);
434 DPCHECK(false); 434 DPCHECK(false);
435 EXPECT_EQ(DCHECK_IS_ON() ? 2 : 0, log_sink_call_count); 435 EXPECT_EQ(DCHECK_IS_ON() ? 2 : 0, g_log_sink_call_count);
436 DCHECK_EQ(0, 1); 436 DCHECK_EQ(0, 1);
437 EXPECT_EQ(DCHECK_IS_ON() ? 3 : 0, log_sink_call_count); 437 EXPECT_EQ(DCHECK_IS_ON() ? 3 : 0, g_log_sink_call_count);
438 438
439 // Test DCHECK on std::nullptr_t 439 // Test DCHECK on std::nullptr_t
440 log_sink_call_count = 0; 440 g_log_sink_call_count = 0;
441 const void* p_null = nullptr; 441 const void* p_null = nullptr;
442 const void* p_not_null = &p_null; 442 const void* p_not_null = &p_null;
443 DCHECK_EQ(p_null, nullptr); 443 DCHECK_EQ(p_null, nullptr);
444 DCHECK_EQ(nullptr, p_null); 444 DCHECK_EQ(nullptr, p_null);
445 DCHECK_NE(p_not_null, nullptr); 445 DCHECK_NE(p_not_null, nullptr);
446 DCHECK_NE(nullptr, p_not_null); 446 DCHECK_NE(nullptr, p_not_null);
447 EXPECT_EQ(0, log_sink_call_count); 447 EXPECT_EQ(0, g_log_sink_call_count);
448 448
449 // Test DCHECK on a scoped enum. 449 // Test DCHECK on a scoped enum.
450 enum class Animal { DOG, CAT }; 450 enum class Animal { DOG, CAT };
451 DCHECK_EQ(Animal::DOG, Animal::DOG); 451 DCHECK_EQ(Animal::DOG, Animal::DOG);
452 EXPECT_EQ(0, log_sink_call_count); 452 EXPECT_EQ(0, g_log_sink_call_count);
453 DCHECK_EQ(Animal::DOG, Animal::CAT); 453 DCHECK_EQ(Animal::DOG, Animal::CAT);
454 EXPECT_EQ(DCHECK_IS_ON() ? 1 : 0, log_sink_call_count); 454 EXPECT_EQ(DCHECK_IS_ON() ? 1 : 0, g_log_sink_call_count);
455 455
456 // Test DCHECK on functions and function pointers. 456 // Test DCHECK on functions and function pointers.
457 log_sink_call_count = 0; 457 g_log_sink_call_count = 0;
458 struct MemberFunctions { 458 struct MemberFunctions {
459 void MemberFunction1() { 459 void MemberFunction1() {
460 // See the comment in DcheckEmptyFunction1(). 460 // See the comment in DcheckEmptyFunction1().
461 LOG(INFO) << "Do not merge with MemberFunction2."; 461 LOG(INFO) << "Do not merge with MemberFunction2.";
462 } 462 }
463 void MemberFunction2() {} 463 void MemberFunction2() {}
464 }; 464 };
465 void (MemberFunctions::*mp1)() = &MemberFunctions::MemberFunction1; 465 void (MemberFunctions::*mp1)() = &MemberFunctions::MemberFunction1;
466 void (MemberFunctions::*mp2)() = &MemberFunctions::MemberFunction2; 466 void (MemberFunctions::*mp2)() = &MemberFunctions::MemberFunction2;
467 void (*fp1)() = DcheckEmptyFunction1; 467 void (*fp1)() = DcheckEmptyFunction1;
468 void (*fp2)() = DcheckEmptyFunction2; 468 void (*fp2)() = DcheckEmptyFunction2;
469 void (*fp3)() = DcheckEmptyFunction1; 469 void (*fp3)() = DcheckEmptyFunction1;
470 DCHECK_EQ(fp1, fp3); 470 DCHECK_EQ(fp1, fp3);
471 EXPECT_EQ(0, log_sink_call_count); 471 EXPECT_EQ(0, g_log_sink_call_count);
472 DCHECK_EQ(mp1, &MemberFunctions::MemberFunction1); 472 DCHECK_EQ(mp1, &MemberFunctions::MemberFunction1);
473 EXPECT_EQ(0, 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, 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, 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, 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, DcheckReleaseBehavior) { 482 TEST_F(LoggingTest, DcheckReleaseBehavior) {
483 int some_variable = 1; 483 int some_variable = 1;
484 // These should still reference |some_variable| so we don't get 484 // These should still reference |some_variable| so we don't get
485 // unused variable warnings. 485 // unused variable warnings.
486 DCHECK(some_variable) << "test"; 486 DCHECK(some_variable) << "test";
487 DPCHECK(some_variable) << "test"; 487 DPCHECK(some_variable) << "test";
488 DCHECK_EQ(some_variable, 1) << "test"; 488 DCHECK_EQ(some_variable, 1) << "test";
489 } 489 }
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
564 std::wstring wstr = L"Hello World"; 564 std::wstring wstr = L"Hello World";
565 std::ostringstream ostr; 565 std::ostringstream ostr;
566 ostr << wstr; 566 ostr << wstr;
567 EXPECT_EQ("Hello World", ostr.str()); 567 EXPECT_EQ("Hello World", ostr.str());
568 } 568 }
569 } // namespace nested_test 569 } // namespace nested_test
570 570
571 } // namespace 571 } // namespace
572 572
573 } // namespace logging 573 } // namespace logging
OLDNEW
« no previous file with comments | « base/logging.cc ('k') | base/syslog_logging.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698