OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #include "base/logging.h" | |
6 | |
7 #include "testing/gmock/include/gmock/gmock.h" | |
8 #include "testing/gtest/include/gtest/gtest.h" | |
9 | |
10 namespace logging { | |
11 | |
12 namespace { | |
13 | |
14 using ::testing::Return; | |
15 | |
16 class LoggingTest : public testing::Test { | |
17 }; | |
18 | |
19 class MockLogSource { | |
20 public: | |
21 MOCK_METHOD0(Log, const char*()); | |
22 }; | |
23 | |
24 TEST_F(LoggingTest, BasicLogging) { | |
25 MockLogSource mock_log_source; | |
26 const int kExpectedDebugOrReleaseCalls = 6; | |
27 const int kExpectedDebugCalls = 6; | |
28 const int kExpectedCalls = | |
29 kExpectedDebugOrReleaseCalls + (DEBUG_MODE ? kExpectedDebugCalls : 0); | |
30 EXPECT_CALL(mock_log_source, Log()).Times(kExpectedCalls). | |
31 WillRepeatedly(Return("log message")); | |
32 | |
33 SetMinLogLevel(LOG_INFO); | |
34 | |
35 EXPECT_TRUE(LOG_IS_ON(INFO)); | |
36 EXPECT_EQ(DEBUG_MODE != 0, DLOG_IS_ON(INFO)); | |
37 EXPECT_TRUE(VLOG_IS_ON(0)); | |
38 | |
39 LOG(INFO) << mock_log_source.Log(); | |
40 LOG_IF(INFO, true) << mock_log_source.Log(); | |
41 PLOG(INFO) << mock_log_source.Log(); | |
42 PLOG_IF(INFO, true) << mock_log_source.Log(); | |
43 VLOG(0) << mock_log_source.Log(); | |
44 VLOG_IF(0, true) << mock_log_source.Log(); | |
45 | |
46 DLOG(INFO) << mock_log_source.Log(); | |
47 DLOG_IF(INFO, true) << mock_log_source.Log(); | |
48 DPLOG(INFO) << mock_log_source.Log(); | |
49 DPLOG_IF(INFO, true) << mock_log_source.Log(); | |
50 DVLOG(0) << mock_log_source.Log(); | |
51 DVLOG_IF(0, true) << mock_log_source.Log(); | |
52 } | |
53 | |
54 TEST_F(LoggingTest, LoggingIsLazy) { | |
55 MockLogSource mock_log_source; | |
56 EXPECT_CALL(mock_log_source, Log()).Times(0); | |
57 | |
58 SetMinLogLevel(LOG_WARNING); | |
59 | |
60 EXPECT_FALSE(LOG_IS_ON(INFO)); | |
61 EXPECT_FALSE(DLOG_IS_ON(INFO)); | |
62 EXPECT_FALSE(VLOG_IS_ON(1)); | |
63 | |
64 LOG(INFO) << mock_log_source.Log(); | |
65 LOG_IF(INFO, false) << mock_log_source.Log(); | |
66 PLOG(INFO) << mock_log_source.Log(); | |
67 PLOG_IF(INFO, false) << mock_log_source.Log(); | |
68 VLOG(1) << mock_log_source.Log(); | |
69 VLOG_IF(1, true) << mock_log_source.Log(); | |
70 | |
71 DLOG(INFO) << mock_log_source.Log(); | |
72 DLOG_IF(INFO, true) << mock_log_source.Log(); | |
73 DPLOG(INFO) << mock_log_source.Log(); | |
74 DPLOG_IF(INFO, true) << mock_log_source.Log(); | |
75 DVLOG(1) << mock_log_source.Log(); | |
76 DVLOG_IF(1, true) << mock_log_source.Log(); | |
77 } | |
78 | |
79 TEST_F(LoggingTest, ChecksAreLazy) { | |
80 MockLogSource mock_log_source; | |
81 EXPECT_CALL(mock_log_source, Log()).Times(0); | |
82 | |
83 SetMinLogLevel(LOG_FATAL + 1); | |
84 EXPECT_FALSE(LOG_IS_ON(FATAL)); | |
85 | |
86 CHECK(mock_log_source.Log()); | |
87 PCHECK(mock_log_source.Log()); | |
88 CHECK_EQ(mock_log_source.Log(), static_cast<const char*>(NULL)) | |
89 << mock_log_source.Log(); | |
90 } | |
91 | |
92 TEST_F(LoggingTest, DchecksAreLazy) { | |
93 MockLogSource mock_log_source; | |
94 EXPECT_CALL(mock_log_source, Log()).Times(0); | |
95 | |
96 #if defined(NDEBUG) | |
97 logging::g_enable_dcheck = false; | |
98 #else | |
99 SetMinLogLevel(LOG_FATAL + 1); | |
100 EXPECT_FALSE(LOG_IS_ON(FATAL)); | |
101 #endif | |
102 DCHECK(mock_log_source.Log()); | |
103 DPCHECK(mock_log_source.Log()); | |
104 DCHECK_EQ(0, 0) << mock_log_source.Log(); | |
105 DCHECK_EQ(mock_log_source.Log(), static_cast<const char*>(NULL)) | |
106 << mock_log_source.Log(); | |
107 } | |
108 | |
109 } // namespace | |
110 | |
111 } // namespace logging | |
OLD | NEW |