// Copyright (c) 2012 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 "ui/base/layout.h"

#include "testing/gtest/include/gtest/gtest.h"

#if defined(OS_CHROMEOS)
#include "base/command_line.h"
#include "ui/base/ui_base_switches.h"
#endif

namespace ui {

TEST(LayoutTest, GetScaleFactorScale) {
  EXPECT_FLOAT_EQ(1.0f, GetScaleForScaleFactor(SCALE_FACTOR_100P));
  EXPECT_FLOAT_EQ(1.25f, GetScaleForScaleFactor(SCALE_FACTOR_125P));
  EXPECT_FLOAT_EQ(1.33f, GetScaleForScaleFactor(SCALE_FACTOR_133P));
  EXPECT_FLOAT_EQ(1.4f, GetScaleForScaleFactor(SCALE_FACTOR_140P));
  EXPECT_FLOAT_EQ(1.5f, GetScaleForScaleFactor(SCALE_FACTOR_150P));
  EXPECT_FLOAT_EQ(1.8f, GetScaleForScaleFactor(SCALE_FACTOR_180P));
  EXPECT_FLOAT_EQ(2.0f, GetScaleForScaleFactor(SCALE_FACTOR_200P));
  EXPECT_FLOAT_EQ(2.5f, GetScaleForScaleFactor(SCALE_FACTOR_250P));
  EXPECT_FLOAT_EQ(3.0f, GetScaleForScaleFactor(SCALE_FACTOR_300P));
}

TEST(LayoutTest, GetScaleFactorFromScalePartlySupported) {
  std::vector<ScaleFactor> supported_factors;
  supported_factors.push_back(SCALE_FACTOR_100P);
  supported_factors.push_back(SCALE_FACTOR_180P);
  test::ScopedSetSupportedScaleFactors scoped_supported(supported_factors);
  EXPECT_EQ(SCALE_FACTOR_100P, GetSupportedScaleFactor(0.1f));
  EXPECT_EQ(SCALE_FACTOR_100P, GetSupportedScaleFactor(0.9f));
  EXPECT_EQ(SCALE_FACTOR_100P, GetSupportedScaleFactor(1.0f));
  EXPECT_EQ(SCALE_FACTOR_100P, GetSupportedScaleFactor(1.39f));
  EXPECT_EQ(SCALE_FACTOR_180P, GetSupportedScaleFactor(1.41f));
  EXPECT_EQ(SCALE_FACTOR_180P, GetSupportedScaleFactor(1.8f));
  EXPECT_EQ(SCALE_FACTOR_180P, GetSupportedScaleFactor(2.0f));
  EXPECT_EQ(SCALE_FACTOR_180P, GetSupportedScaleFactor(999.0f));
}

TEST(LayoutTest, GetScaleFactorFromScaleAllSupported) {
  std::vector<ScaleFactor> supported_factors;
  for (int factor = SCALE_FACTOR_100P; factor < NUM_SCALE_FACTORS; ++factor) {
    supported_factors.push_back(static_cast<ScaleFactor>(factor));
  }
  test::ScopedSetSupportedScaleFactors scoped_supported(supported_factors);

  EXPECT_EQ(SCALE_FACTOR_100P, GetSupportedScaleFactor(0.1f));
  EXPECT_EQ(SCALE_FACTOR_100P, GetSupportedScaleFactor(0.9f));
  EXPECT_EQ(SCALE_FACTOR_100P, GetSupportedScaleFactor(1.0f));
  EXPECT_EQ(SCALE_FACTOR_125P, GetSupportedScaleFactor(1.19f));
  EXPECT_EQ(SCALE_FACTOR_125P, GetSupportedScaleFactor(1.21f));
  EXPECT_EQ(SCALE_FACTOR_133P, GetSupportedScaleFactor(1.291f));
  EXPECT_EQ(SCALE_FACTOR_133P, GetSupportedScaleFactor(1.3f));
  EXPECT_EQ(SCALE_FACTOR_140P, GetSupportedScaleFactor(1.4f));
  EXPECT_EQ(SCALE_FACTOR_150P, GetSupportedScaleFactor(1.59f));
  EXPECT_EQ(SCALE_FACTOR_150P, GetSupportedScaleFactor(1.61f));
  EXPECT_EQ(SCALE_FACTOR_180P, GetSupportedScaleFactor(1.7f));
  EXPECT_EQ(SCALE_FACTOR_180P, GetSupportedScaleFactor(1.89f));
  EXPECT_EQ(SCALE_FACTOR_200P, GetSupportedScaleFactor(1.91f));
  EXPECT_EQ(SCALE_FACTOR_200P, GetSupportedScaleFactor(2.0f));
  EXPECT_EQ(SCALE_FACTOR_200P, GetSupportedScaleFactor(2.1f));
  EXPECT_EQ(SCALE_FACTOR_250P, GetSupportedScaleFactor(2.3f));
  EXPECT_EQ(SCALE_FACTOR_250P, GetSupportedScaleFactor(2.5f));
  EXPECT_EQ(SCALE_FACTOR_250P, GetSupportedScaleFactor(2.6f));
  EXPECT_EQ(SCALE_FACTOR_300P, GetSupportedScaleFactor(2.9f));
  EXPECT_EQ(SCALE_FACTOR_300P, GetSupportedScaleFactor(3.0f));
  EXPECT_EQ(SCALE_FACTOR_300P, GetSupportedScaleFactor(3.1f));
  EXPECT_EQ(SCALE_FACTOR_300P, GetSupportedScaleFactor(999.0f));
}

}  // namespace ui
