| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <stdlib.h> | 5 #include <stdlib.h> |
| 6 | 6 |
| 7 #include <sstream> | 7 #include <sstream> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "mojo/public/cpp/environment/environment.h" | 10 #include "mojo/public/cpp/environment/environment.h" |
| (...skipping 27 matching lines...) Expand all Loading... |
| 38 virtual ~LoggingTest() {} | 38 virtual ~LoggingTest() {} |
| 39 | 39 |
| 40 protected: | 40 protected: |
| 41 // Note: Does not reset |minimum_log_level_|. | 41 // Note: Does not reset |minimum_log_level_|. |
| 42 static void ResetMockLogger() { | 42 static void ResetMockLogger() { |
| 43 log_message_was_called_ = false; | 43 log_message_was_called_ = false; |
| 44 last_log_level_ = MOJO_LOG_LEVEL_INFO; | 44 last_log_level_ = MOJO_LOG_LEVEL_INFO; |
| 45 last_message_.clear(); | 45 last_message_.clear(); |
| 46 } | 46 } |
| 47 | 47 |
| 48 // A function returning |bool| that shouldn't be called. |
| 49 static bool NotCalledCondition() { |
| 50 not_called_condition_was_called_ = true; |
| 51 return false; |
| 52 } |
| 53 |
| 48 static bool log_message_was_called() { return log_message_was_called_; } | 54 static bool log_message_was_called() { return log_message_was_called_; } |
| 49 static MojoLogLevel last_log_level() { return last_log_level_; } | 55 static MojoLogLevel last_log_level() { return last_log_level_; } |
| 50 static const std::string& last_message() { return last_message_; } | 56 static const std::string& last_message() { return last_message_; } |
| 57 static bool not_called_condition_was_called() { |
| 58 return not_called_condition_was_called_; |
| 59 } |
| 51 | 60 |
| 52 private: | 61 private: |
| 53 // Note: We record calls even if |log_level| is below |minimum_log_level_| | 62 // Note: We record calls even if |log_level| is below |minimum_log_level_| |
| 54 // (since the macros should mostly avoid this, and we want to be able to check | 63 // (since the macros should mostly avoid this, and we want to be able to check |
| 55 // that they do). | 64 // that they do). |
| 56 static void MockLogMessage(MojoLogLevel log_level, const char* message) { | 65 static void MockLogMessage(MojoLogLevel log_level, const char* message) { |
| 57 log_message_was_called_ = true; | 66 log_message_was_called_ = true; |
| 58 last_log_level_ = log_level; | 67 last_log_level_ = log_level; |
| 59 last_message_ = message; | 68 last_message_ = message; |
| 60 } | 69 } |
| 61 | 70 |
| 62 static MojoLogLevel MockGetMinimumLogLevel() { | 71 static MojoLogLevel MockGetMinimumLogLevel() { |
| 63 return minimum_log_level_; | 72 return minimum_log_level_; |
| 64 } | 73 } |
| 65 | 74 |
| 66 static void MockSetMinimumLogLevel(MojoLogLevel minimum_log_level) { | 75 static void MockSetMinimumLogLevel(MojoLogLevel minimum_log_level) { |
| 67 minimum_log_level_ = minimum_log_level; | 76 minimum_log_level_ = minimum_log_level; |
| 68 } | 77 } |
| 69 | 78 |
| 70 Environment environment_; | 79 Environment environment_; |
| 71 | 80 |
| 72 static const MojoLogger kMockLogger; | 81 static const MojoLogger kMockLogger; |
| 73 static MojoLogLevel minimum_log_level_; | 82 static MojoLogLevel minimum_log_level_; |
| 74 static bool log_message_was_called_; | 83 static bool log_message_was_called_; |
| 75 static MojoLogLevel last_log_level_; | 84 static MojoLogLevel last_log_level_; |
| 76 static std::string last_message_; | 85 static std::string last_message_; |
| 86 static bool not_called_condition_was_called_; |
| 77 | 87 |
| 78 MOJO_DISALLOW_COPY_AND_ASSIGN(LoggingTest); | 88 MOJO_DISALLOW_COPY_AND_ASSIGN(LoggingTest); |
| 79 }; | 89 }; |
| 80 | 90 |
| 81 // static | 91 // static |
| 82 const MojoLogger LoggingTest::kMockLogger = { | 92 const MojoLogger LoggingTest::kMockLogger = { |
| 83 &LoggingTest::MockLogMessage, | 93 &LoggingTest::MockLogMessage, |
| 84 &LoggingTest::MockGetMinimumLogLevel, | 94 &LoggingTest::MockGetMinimumLogLevel, |
| 85 &LoggingTest::MockSetMinimumLogLevel | 95 &LoggingTest::MockSetMinimumLogLevel |
| 86 }; | 96 }; |
| 87 | 97 |
| 88 // static | 98 // static |
| 89 MojoLogLevel LoggingTest::minimum_log_level_ = MOJO_LOG_LEVEL_INFO; | 99 MojoLogLevel LoggingTest::minimum_log_level_ = MOJO_LOG_LEVEL_INFO; |
| 90 | 100 |
| 91 // static | 101 // static |
| 92 bool LoggingTest::log_message_was_called_ = MOJO_LOG_LEVEL_INFO; | 102 bool LoggingTest::log_message_was_called_ = MOJO_LOG_LEVEL_INFO; |
| 93 | 103 |
| 94 // static | 104 // static |
| 95 MojoLogLevel LoggingTest::last_log_level_ = MOJO_LOG_LEVEL_INFO; | 105 MojoLogLevel LoggingTest::last_log_level_ = MOJO_LOG_LEVEL_INFO; |
| 96 | 106 |
| 97 // static | 107 // static |
| 98 std::string LoggingTest::last_message_; | 108 std::string LoggingTest::last_message_; |
| 99 | 109 |
| 110 // static |
| 111 bool LoggingTest::not_called_condition_was_called_ = false; |
| 112 |
| 100 std::string ExpectedLogMessage(int line, const char* message) { | 113 std::string ExpectedLogMessage(int line, const char* message) { |
| 101 std::ostringstream s; | 114 std::ostringstream s; |
| 102 s << OUR_FILENAME "(" << line << "): " << message; | 115 s << OUR_FILENAME "(" << line << "): " << message; |
| 103 return s.str(); | 116 return s.str(); |
| 104 } | 117 } |
| 105 | 118 |
| 106 // A function returning |bool| that shouldn't be called. | |
| 107 bool NotCalled() { | |
| 108 abort(); | |
| 109 // I think all compilers are smart enough to recognize that nothing is run | |
| 110 // after |abort()|. (Some definitely complain that things after it are | |
| 111 // unreachable.) | |
| 112 } | |
| 113 | |
| 114 TEST_F(LoggingTest, InternalLogMessage) { | 119 TEST_F(LoggingTest, InternalLogMessage) { |
| 115 internal::LogMessage("foo.cc", 123, MOJO_LOG_LEVEL_INFO).stream() | 120 internal::LogMessage("foo.cc", 123, MOJO_LOG_LEVEL_INFO).stream() |
| 116 << "hello " << "world"; | 121 << "hello " << "world"; |
| 117 EXPECT_TRUE(log_message_was_called()); | 122 EXPECT_TRUE(log_message_was_called()); |
| 118 EXPECT_EQ(MOJO_LOG_LEVEL_INFO, last_log_level()); | 123 EXPECT_EQ(MOJO_LOG_LEVEL_INFO, last_log_level()); |
| 119 EXPECT_EQ("foo.cc(123): hello world", last_message()); | 124 EXPECT_EQ("foo.cc(123): hello world", last_message()); |
| 120 | 125 |
| 121 ResetMockLogger(); | 126 ResetMockLogger(); |
| 122 | 127 |
| 123 internal::LogMessage("./path/to/foo.cc", 123, MOJO_LOG_LEVEL_WARNING).stream() | 128 internal::LogMessage("./path/to/foo.cc", 123, MOJO_LOG_LEVEL_WARNING).stream() |
| (...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 329 | 334 |
| 330 ResetMockLogger(); | 335 ResetMockLogger(); |
| 331 | 336 |
| 332 MOJO_LOG_IF(FATAL, 1 * 2 == 3) << "hello"; | 337 MOJO_LOG_IF(FATAL, 1 * 2 == 3) << "hello"; |
| 333 EXPECT_FALSE(log_message_was_called()); | 338 EXPECT_FALSE(log_message_was_called()); |
| 334 | 339 |
| 335 ResetMockLogger(); | 340 ResetMockLogger(); |
| 336 | 341 |
| 337 // |MOJO_LOG_IF()| shouldn't evaluate its condition if the level is below the | 342 // |MOJO_LOG_IF()| shouldn't evaluate its condition if the level is below the |
| 338 // minimum. | 343 // minimum. |
| 339 MOJO_LOG_IF(INFO, NotCalled()) << "hello"; | 344 MOJO_LOG_IF(INFO, NotCalledCondition()) << "hello"; |
| 345 EXPECT_FALSE(not_called_condition_was_called()); |
| 340 EXPECT_FALSE(log_message_was_called()); | 346 EXPECT_FALSE(log_message_was_called()); |
| 341 } | 347 } |
| 342 | 348 |
| 343 TEST_F(LoggingTest, Check) { | 349 TEST_F(LoggingTest, Check) { |
| 344 MOJO_CHECK(true) << "hello"; | 350 MOJO_CHECK(true) << "hello"; |
| 345 EXPECT_FALSE(log_message_was_called()); | 351 EXPECT_FALSE(log_message_was_called()); |
| 346 | 352 |
| 347 ResetMockLogger(); | 353 ResetMockLogger(); |
| 348 | 354 |
| 349 PtrToMemberHelper helper; | 355 PtrToMemberHelper helper; |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 381 #else | 387 #else |
| 382 EXPECT_TRUE(log_message_was_called()); | 388 EXPECT_TRUE(log_message_was_called()); |
| 383 EXPECT_EQ(MOJO_LOG_LEVEL_INFO, last_log_level()); | 389 EXPECT_EQ(MOJO_LOG_LEVEL_INFO, last_log_level()); |
| 384 EXPECT_EQ(ExpectedLogMessage(__LINE__ - 6, "hello"), last_message()); | 390 EXPECT_EQ(ExpectedLogMessage(__LINE__ - 6, "hello"), last_message()); |
| 385 #endif | 391 #endif |
| 386 } | 392 } |
| 387 | 393 |
| 388 TEST_F(LoggingTest, DlogIf) { | 394 TEST_F(LoggingTest, DlogIf) { |
| 389 // We start at |MOJO_LOG_LEVEL_INFO|. It shouldn't evaluate the condition in | 395 // We start at |MOJO_LOG_LEVEL_INFO|. It shouldn't evaluate the condition in |
| 390 // this case. | 396 // this case. |
| 391 MOJO_DLOG_IF(VERBOSE, NotCalled()) << "hello"; | 397 MOJO_DLOG_IF(VERBOSE, NotCalledCondition()) << "hello"; |
| 398 EXPECT_FALSE(not_called_condition_was_called()); |
| 392 EXPECT_FALSE(log_message_was_called()); | 399 EXPECT_FALSE(log_message_was_called()); |
| 393 | 400 |
| 394 ResetMockLogger(); | 401 ResetMockLogger(); |
| 395 | 402 |
| 396 MOJO_DLOG_IF(INFO, 1 == 0) << "hello"; | 403 MOJO_DLOG_IF(INFO, 1 == 0) << "hello"; |
| 397 EXPECT_FALSE(log_message_was_called()); | 404 EXPECT_FALSE(log_message_was_called()); |
| 398 | 405 |
| 399 ResetMockLogger(); | 406 ResetMockLogger(); |
| 400 | 407 |
| 401 MOJO_DLOG_IF(INFO, 1 == 1) << "hello"; | 408 MOJO_DLOG_IF(INFO, 1 == 1) << "hello"; |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 458 ResetMockLogger(); | 465 ResetMockLogger(); |
| 459 | 466 |
| 460 // Also try to make sure that we parenthesize the condition properly. | 467 // Also try to make sure that we parenthesize the condition properly. |
| 461 bool x = true; | 468 bool x = true; |
| 462 MOJO_DCHECK(false || x) << "hello"; | 469 MOJO_DCHECK(false || x) << "hello"; |
| 463 EXPECT_FALSE(log_message_was_called()); | 470 EXPECT_FALSE(log_message_was_called()); |
| 464 } | 471 } |
| 465 | 472 |
| 466 } // namespace | 473 } // namespace |
| 467 } // namespace mojo | 474 } // namespace mojo |
| OLD | NEW |