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