// 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 "mojo/public/c/environment/logger.h"
#include "mojo/public/cpp/environment/environment.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace mojo {
namespace {

TEST(LoggerTest, Basic) {
  Environment environment;
  const MojoLogger* const logger = Environment::GetDefaultLogger();

  logger->LogMessage(MOJO_LOG_LEVEL_VERBOSE - 1, "Logged at VERBOSE-1 level");
  logger->LogMessage(MOJO_LOG_LEVEL_VERBOSE, "Logged at VERBOSE level");
  logger->LogMessage(MOJO_LOG_LEVEL_INFO, "Logged at INFO level");
  logger->LogMessage(MOJO_LOG_LEVEL_WARNING, "Logged at WARNING level");
  logger->LogMessage(MOJO_LOG_LEVEL_ERROR, "Logged at ERROR level");

  // This should kill us:
  EXPECT_DEATH_IF_SUPPORTED(
      { logger->LogMessage(MOJO_LOG_LEVEL_FATAL, "Logged at FATAL level"); },
      "");
}

TEST(LoggerTest, LogLevels) {
  Environment environment;
  const MojoLogger* const logger = Environment::GetDefaultLogger();

  for (MojoLogLevel log_level = MOJO_LOG_LEVEL_VERBOSE - 1;
       log_level <= MOJO_LOG_LEVEL_FATAL + 1;
       log_level++) {
    logger->SetMinimumLogLevel(log_level);

    if (log_level <= MOJO_LOG_LEVEL_FATAL)
      EXPECT_EQ(log_level, logger->GetMinimumLogLevel());
    else
      EXPECT_EQ(MOJO_LOG_LEVEL_FATAL, logger->GetMinimumLogLevel());

    logger->LogMessage(MOJO_LOG_LEVEL_VERBOSE - 1, "Logged at VERBOSE-1 level");
    logger->LogMessage(MOJO_LOG_LEVEL_VERBOSE, "Logged at VERBOSE level");
    logger->LogMessage(MOJO_LOG_LEVEL_INFO, "Logged at INFO level");
    logger->LogMessage(MOJO_LOG_LEVEL_WARNING, "Logged at WARNING level");
    logger->LogMessage(MOJO_LOG_LEVEL_ERROR, "Logged at ERROR level");

    // This should kill us:
    EXPECT_DEATH_IF_SUPPORTED(
        { logger->LogMessage(MOJO_LOG_LEVEL_FATAL, "Logged at FATAL level"); },
        "");
  }
}

}  // namespace
}  // namespace mojo
