11767c5feSopenharmony_ci// Copyright (C) 2011 The Libphonenumber Authors 21767c5feSopenharmony_ci// 31767c5feSopenharmony_ci// Licensed under the Apache License, Version 2.0 (the "License"); 41767c5feSopenharmony_ci// you may not use this file except in compliance with the License. 51767c5feSopenharmony_ci// You may obtain a copy of the License at 61767c5feSopenharmony_ci// 71767c5feSopenharmony_ci// http://www.apache.org/licenses/LICENSE-2.0 81767c5feSopenharmony_ci// 91767c5feSopenharmony_ci// Unless required by applicable law or agreed to in writing, software 101767c5feSopenharmony_ci// distributed under the License is distributed on an "AS IS" BASIS, 111767c5feSopenharmony_ci// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 121767c5feSopenharmony_ci// See the License for the specific language governing permissions and 131767c5feSopenharmony_ci// limitations under the License. 141767c5feSopenharmony_ci 151767c5feSopenharmony_ci// Author: Philippe Liard 161767c5feSopenharmony_ci 171767c5feSopenharmony_ci#include <string> 181767c5feSopenharmony_ci 191767c5feSopenharmony_ci#include <gtest/gtest.h> 201767c5feSopenharmony_ci 211767c5feSopenharmony_ci#include "phonenumbers/base/memory/scoped_ptr.h" 221767c5feSopenharmony_ci#include "phonenumbers/default_logger.h" 231767c5feSopenharmony_ci#include "phonenumbers/logger.h" 241767c5feSopenharmony_ci 251767c5feSopenharmony_cinamespace i18n { 261767c5feSopenharmony_cinamespace phonenumbers { 271767c5feSopenharmony_ci 281767c5feSopenharmony_ci// String logger implementation used for testing. Messages are output to a 291767c5feSopenharmony_ci// string for convenience. 301767c5feSopenharmony_ciclass StringLogger : public Logger { 311767c5feSopenharmony_ci public: 321767c5feSopenharmony_ci virtual ~StringLogger() {} 331767c5feSopenharmony_ci 341767c5feSopenharmony_ci const string& message() const { 351767c5feSopenharmony_ci return msg_; 361767c5feSopenharmony_ci } 371767c5feSopenharmony_ci 381767c5feSopenharmony_ci virtual void WriteMessage(const string& msg) { 391767c5feSopenharmony_ci msg_ += msg; 401767c5feSopenharmony_ci } 411767c5feSopenharmony_ci 421767c5feSopenharmony_ci private: 431767c5feSopenharmony_ci string msg_; 441767c5feSopenharmony_ci}; 451767c5feSopenharmony_ci 461767c5feSopenharmony_ciclass LoggerTest : public ::testing::Test { 471767c5feSopenharmony_ci protected: 481767c5feSopenharmony_ci virtual void SetUp() { 491767c5feSopenharmony_ci test_logger_.reset(new StringLogger()); 501767c5feSopenharmony_ci test_logger_->set_level(LOG_INFO); 511767c5feSopenharmony_ci // Save the current logger implementation and restore it when the test is 521767c5feSopenharmony_ci // done to avoid side-effects in other tests (including phonenumberutil 531767c5feSopenharmony_ci // tests) as the logger implementation is global. 541767c5feSopenharmony_ci old_logger_ = Logger::mutable_logger_impl(); 551767c5feSopenharmony_ci Logger::set_logger_impl(test_logger_.get()); 561767c5feSopenharmony_ci } 571767c5feSopenharmony_ci 581767c5feSopenharmony_ci virtual void TearDown() { 591767c5feSopenharmony_ci // Restore the previous logger implementation to avoid side-effects in other 601767c5feSopenharmony_ci // tests as mentioned above. 611767c5feSopenharmony_ci Logger::set_logger_impl(old_logger_); 621767c5feSopenharmony_ci } 631767c5feSopenharmony_ci 641767c5feSopenharmony_ci scoped_ptr<StringLogger> test_logger_; 651767c5feSopenharmony_ci Logger* old_logger_; 661767c5feSopenharmony_ci}; 671767c5feSopenharmony_ci 681767c5feSopenharmony_ciTEST_F(LoggerTest, LoggerIgnoresHigherVerbosity) { 691767c5feSopenharmony_ci // The logger verbosity is set to LOG_INFO, therefore LOG_DEBUG messages 701767c5feSopenharmony_ci // should be ignored. 711767c5feSopenharmony_ci LOG(LOG_DEBUG) << "Hello"; 721767c5feSopenharmony_ci EXPECT_EQ("", test_logger_->message()); 731767c5feSopenharmony_ci} 741767c5feSopenharmony_ci 751767c5feSopenharmony_ciTEST_F(LoggerTest, LoggerOutputsNewline) { 761767c5feSopenharmony_ci LOG(LOG_INFO) << "Hello"; 771767c5feSopenharmony_ci EXPECT_EQ("Hello\n", test_logger_->message()); 781767c5feSopenharmony_ci} 791767c5feSopenharmony_ci 801767c5feSopenharmony_ciTEST_F(LoggerTest, LoggerLogsEqualVerbosity) { 811767c5feSopenharmony_ci LOG(LOG_INFO) << "Hello"; 821767c5feSopenharmony_ci EXPECT_EQ("Hello\n", test_logger_->message()); 831767c5feSopenharmony_ci} 841767c5feSopenharmony_ci 851767c5feSopenharmony_ciTEST_F(LoggerTest, LoggerLogsMoreSeriousMessages) { 861767c5feSopenharmony_ci // The logger verbosity is set to LOG_INFO, therefore LOG_WARNING messages 871767c5feSopenharmony_ci // should still be printed. 881767c5feSopenharmony_ci LOG(LOG_WARNING) << "Hello"; 891767c5feSopenharmony_ci EXPECT_EQ("Hello\n", test_logger_->message()); 901767c5feSopenharmony_ci} 911767c5feSopenharmony_ci 921767c5feSopenharmony_ciTEST_F(LoggerTest, LoggerConcatenatesMessages) { 931767c5feSopenharmony_ci LOG(LOG_INFO) << "Hello"; 941767c5feSopenharmony_ci ASSERT_EQ("Hello\n", test_logger_->message()); 951767c5feSopenharmony_ci 961767c5feSopenharmony_ci LOG(LOG_INFO) << " World"; 971767c5feSopenharmony_ci EXPECT_EQ("Hello\n World\n", test_logger_->message()); 981767c5feSopenharmony_ci} 991767c5feSopenharmony_ci 1001767c5feSopenharmony_ciTEST_F(LoggerTest, LoggerHandlesDifferentTypes) { 1011767c5feSopenharmony_ci LOG(LOG_INFO) << "Hello " << 42; 1021767c5feSopenharmony_ci EXPECT_EQ("Hello 42\n", test_logger_->message()); 1031767c5feSopenharmony_ci} 1041767c5feSopenharmony_ci 1051767c5feSopenharmony_ciTEST_F(LoggerTest, LoggerIgnoresVerboseLogs) { 1061767c5feSopenharmony_ci // VLOG is always lower verbosity than LOG, so with LOG_INFO set as the 1071767c5feSopenharmony_ci // verbosity level, no VLOG call should result in anything. 1081767c5feSopenharmony_ci VLOG(1) << "Hello"; 1091767c5feSopenharmony_ci EXPECT_EQ("", test_logger_->message()); 1101767c5feSopenharmony_ci 1111767c5feSopenharmony_ci // VLOG(0) is the same as LOG_DEBUG. 1121767c5feSopenharmony_ci VLOG(0) << "Hello"; 1131767c5feSopenharmony_ci EXPECT_EQ("", test_logger_->message()); 1141767c5feSopenharmony_ci 1151767c5feSopenharmony_ci // With LOG_DEBUG as the current verbosity level, VLOG(1) should still not 1161767c5feSopenharmony_ci // result in anything. 1171767c5feSopenharmony_ci test_logger_->set_level(LOG_DEBUG); 1181767c5feSopenharmony_ci 1191767c5feSopenharmony_ci VLOG(1) << "Hello"; 1201767c5feSopenharmony_ci EXPECT_EQ("", test_logger_->message()); 1211767c5feSopenharmony_ci 1221767c5feSopenharmony_ci // However, VLOG(0) does. 1231767c5feSopenharmony_ci VLOG(0) << "Hello"; 1241767c5feSopenharmony_ci EXPECT_EQ("Hello\n", test_logger_->message()); 1251767c5feSopenharmony_ci} 1261767c5feSopenharmony_ci 1271767c5feSopenharmony_ciTEST_F(LoggerTest, LoggerShowsDebugLogsAtDebugLevel) { 1281767c5feSopenharmony_ci test_logger_->set_level(LOG_DEBUG); 1291767c5feSopenharmony_ci // Debug logs should still be seen. 1301767c5feSopenharmony_ci LOG(LOG_DEBUG) << "Debug hello"; 1311767c5feSopenharmony_ci EXPECT_EQ("Debug hello\n", test_logger_->message()); 1321767c5feSopenharmony_ci} 1331767c5feSopenharmony_ci 1341767c5feSopenharmony_ciTEST_F(LoggerTest, LoggerOutputsDebugLogsWhenVerbositySet) { 1351767c5feSopenharmony_ci // This should now output LOG_DEBUG. 1361767c5feSopenharmony_ci int verbose_log_level = 2; 1371767c5feSopenharmony_ci test_logger_->set_verbosity_level(verbose_log_level); 1381767c5feSopenharmony_ci 1391767c5feSopenharmony_ci LOG(LOG_DEBUG) << "Debug hello"; 1401767c5feSopenharmony_ci EXPECT_EQ("Debug hello\n", test_logger_->message()); 1411767c5feSopenharmony_ci} 1421767c5feSopenharmony_ci 1431767c5feSopenharmony_ciTEST_F(LoggerTest, LoggerOutputsErrorLogsWhenVerbositySet) { 1441767c5feSopenharmony_ci // This should now output LOG_ERROR. 1451767c5feSopenharmony_ci int verbose_log_level = 2; 1461767c5feSopenharmony_ci test_logger_->set_verbosity_level(verbose_log_level); 1471767c5feSopenharmony_ci 1481767c5feSopenharmony_ci LOG(ERROR) << "Error hello"; 1491767c5feSopenharmony_ci EXPECT_EQ("Error hello\n", test_logger_->message()); 1501767c5feSopenharmony_ci} 1511767c5feSopenharmony_ci 1521767c5feSopenharmony_ciTEST_F(LoggerTest, LoggerOutputsLogsAccordingToVerbosity) { 1531767c5feSopenharmony_ci int verbose_log_level = 2; 1541767c5feSopenharmony_ci test_logger_->set_verbosity_level(verbose_log_level); 1551767c5feSopenharmony_ci 1561767c5feSopenharmony_ci // More verbose than the current limit. 1571767c5feSopenharmony_ci VLOG(verbose_log_level + 1) << "Hello 3"; 1581767c5feSopenharmony_ci EXPECT_EQ("", test_logger_->message()); 1591767c5feSopenharmony_ci 1601767c5feSopenharmony_ci // Less verbose than the current limit. 1611767c5feSopenharmony_ci VLOG(verbose_log_level - 1) << "Hello"; 1621767c5feSopenharmony_ci EXPECT_EQ("Hello\n", test_logger_->message()); 1631767c5feSopenharmony_ci 1641767c5feSopenharmony_ci // At the current limit. This will be appended to the previous log output. 1651767c5feSopenharmony_ci VLOG(verbose_log_level) << "Hello 2"; 1661767c5feSopenharmony_ci EXPECT_EQ("Hello\nHello 2\n", test_logger_->message()); 1671767c5feSopenharmony_ci} 1681767c5feSopenharmony_ci 1691767c5feSopenharmony_ci} // namespace phonenumbers 1701767c5feSopenharmony_ci} // namespace i18n 171