// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "debug.h" #include <sstream> #include "gtest/gtest.h" namespace relocation_packer { TEST(Debug, Log) { Logger::Reset(); std::ostringstream info; std::ostringstream error; Logger::SetStreams(&info, &error); LOG(INFO) << "INFO log message"; LOG(WARNING) << "WARNING log message"; LOG(ERROR) << "ERROR log message"; EXPECT_EQ("INFO: INFO log message\n", info.str()); EXPECT_EQ("WARNING: WARNING log message\n" "ERROR: ERROR log message\n", error.str()); Logger::Reset(); } TEST(Debug, LogIf) { Logger::Reset(); std::ostringstream info; std::ostringstream error; Logger::SetStreams(&info, &error); LOG_IF(INFO, true) << "INFO log message"; LOG_IF(INFO, false) << "INFO log message, SHOULD NOT PRINT"; LOG_IF(WARNING, true) << "WARNING log message"; LOG_IF(WARNING, false) << "WARNING log message, SHOULD NOT PRINT"; LOG_IF(ERROR, true) << "ERROR log message"; LOG_IF(ERROR, false) << "ERROR log message, SHOULD NOT PRINT"; LOG_IF(FATAL, false) << "FATAL log message, SHOULD NOT PRINT"; EXPECT_EQ("INFO: INFO log message\n", info.str()); EXPECT_EQ("WARNING: WARNING log message\n" "ERROR: ERROR log message\n", error.str()); Logger::Reset(); } TEST(Debug, Vlog) { Logger::Reset(); std::ostringstream info; std::ostringstream error; Logger::SetStreams(&info, &error); VLOG(0) << "VLOG 0 INFO log message, SHOULD NOT PRINT"; VLOG(1) << "VLOG 1 INFO log message, SHOULD NOT PRINT"; VLOG(2) << "VLOG 2 INFO log message, SHOULD NOT PRINT"; EXPECT_EQ("", info.str()); EXPECT_EQ("", error.str()); Logger::SetVerbose(1); VLOG(0) << "VLOG 0 INFO log message"; VLOG(1) << "VLOG 1 INFO log message"; VLOG(2) << "VLOG 2 INFO log message, SHOULD NOT PRINT"; EXPECT_EQ("INFO: VLOG 0 INFO log message\n" "INFO: VLOG 1 INFO log message\n", info.str()); EXPECT_EQ("", error.str()); Logger::Reset(); } TEST(Debug, VlogIf) { Logger::Reset(); std::ostringstream info; std::ostringstream error; Logger::SetStreams(&info, &error); VLOG_IF(0, true) << "VLOG 0 INFO log message, SHOULD NOT PRINT"; VLOG_IF(1, true) << "VLOG 1 INFO log message, SHOULD NOT PRINT"; VLOG_IF(2, true) << "VLOG 2 INFO log message, SHOULD NOT PRINT"; EXPECT_EQ("", info.str()); EXPECT_EQ("", error.str()); Logger::SetVerbose(1); VLOG_IF(0, true) << "VLOG 0 INFO log message"; VLOG_IF(0, false) << "VLOG 0 INFO log message, SHOULD NOT PRINT"; VLOG_IF(1, true) << "VLOG 1 INFO log message"; VLOG_IF(1, false) << "VLOG 1 INFO log message, SHOULD NOT PRINT"; VLOG_IF(2, true) << "VLOG 2 INFO log message, SHOULD NOT PRINT"; VLOG_IF(2, false) << "VLOG 2 INFO log message, SHOULD NOT PRINT"; EXPECT_EQ("INFO: VLOG 0 INFO log message\n" "INFO: VLOG 1 INFO log message\n", info.str()); EXPECT_EQ("", error.str()); Logger::Reset(); } TEST(DebugDeathTest, Fatal) { ::testing::FLAGS_gtest_death_test_style = "threadsafe"; Logger::Reset(); EXPECT_DEATH(LOG(FATAL) << "FATAL log message", "FATAL: FATAL log message"); EXPECT_DEATH( LOG_IF(FATAL, true) << "FATAL log message", "FATAL: FATAL log message"); } TEST(DebugDeathTest, Check) { ::testing::FLAGS_gtest_death_test_style = "threadsafe"; Logger::Reset(); CHECK(0 == 0); EXPECT_DEATH(CHECK(0 == 1), "FATAL: .*:.*: .*: CHECK '0 == 1' failed"); } TEST(DebugDeathTest, NotReached) { ::testing::FLAGS_gtest_death_test_style = "threadsafe"; Logger::Reset(); EXPECT_DEATH(NOTREACHED(), "FATAL: .*:.*: .*: NOTREACHED\\(\\) hit"); } } // namespace relocation_packer