// Copyright 2018 The Chromium OS 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 <memory>
#include <string>
#include <vector>

#include <base/files/scoped_temp_dir.h>
#include <base/files/file_path.h>
#include <base/files/file_util.h>
#include <gtest/gtest.h>

#include "vm_tools/garcon/icon_index_file.h"

namespace vm_tools {
namespace garcon {

namespace {

class IconIndexFileTest : public ::testing::Test {
 public:
  IconIndexFileTest() {
    CHECK(temp_dir_.CreateUniqueTempDir());
    icon_theme_dir_ = temp_dir_.GetPath();
  }
  ~IconIndexFileTest() override = default;

  base::FilePath WriteIndexThemeFile(const std::string& contents) {
    base::FilePath file_path = icon_theme_dir_.Append("index.theme");
    EXPECT_EQ(contents.size(),
              base::WriteFile(file_path, contents.c_str(), contents.size()));
    return file_path;
  }

  void ValidateIndexThemeFile(
      const std::string& contents,
      int icon_size,
      int scale,
      const std::vector<base::FilePath>& expected_result) {
    WriteIndexThemeFile(contents);
    std::vector<base::FilePath> actual_result;
    std::unique_ptr<IconIndexFile> icon_index_file =
        IconIndexFile::ParseIconIndexFile(icon_theme_dir_);
    if (icon_index_file) {
      actual_result =
          icon_index_file->GetPathsForSizeAndScale(icon_size, scale);
    }
    EXPECT_TRUE(expected_result == actual_result);
  }

  base::FilePath icon_theme_dir() { return icon_theme_dir_; }

 private:
  base::ScopedTempDir temp_dir_;
  base::FilePath icon_theme_dir_;

  DISALLOW_COPY_AND_ASSIGN(IconIndexFileTest);
};

}  // namespace

// This test verifies that an empty index.theme file results in empty
// directories.
TEST_F(IconIndexFileTest, EmptyIndexFile) {
  ValidateIndexThemeFile("", 48, 1, {});
}

// This test verifies that if a directory is not listed in the icon theme
// section then it's not returned.
TEST_F(IconIndexFileTest, DirectoryNotListed) {
  ValidateIndexThemeFile(
      "[Icon Theme]\n"
      "Name=Hicolor\n"
      "Comment=Fallback icon theme\n"
      "Hidden=true\n"
      "Directories=48x48@2/apps\n"
      "\n\n"
      "[48x48/apps]\n"
      "Size=48\n"
      "Context=Applications\n"
      "Type=Threshold\n",
      48, 1, {});
}

// This test verifies that correct directory is returned when there is only one
// directory listed in index.theme file.
TEST_F(IconIndexFileTest, OneDirectoryOnly) {
  ValidateIndexThemeFile(
      "[Icon Theme]\n"
      "Name=Hicolor\n"
      "Comment=Fallback icon theme\n"
      "Hidden=true\n"
      "Directories=48x48/apps\n"
      "\n\n"
      "[48x48/apps]\n"
      "Size=48\n"
      "Context=Applications\n"
      "Type=Threshold\n",
      48, 1, {icon_theme_dir().Append("48x48").Append("apps")});
}

// This test verifies that the perfect matched directory is in front.
TEST_F(IconIndexFileTest, PerfectMatchInFront) {
  ValidateIndexThemeFile(
      "[Icon Theme]\n"
      "Name=Hicolor\n"
      "Comment=Fallback icon theme\n"
      "Hidden=true\n"
      "Directories=48x48@2/apps,96x96/apps\n"
      "\n\n"
      "[48x48@2/apps]\n"
      "Size=48\n"
      "Scale=2\n"
      "Context=Applications\n"
      "Type=Threshold\n\n"
      "[96x96/apps]\n"
      "Size=96\n"
      "Context=Applications\n"
      "Type=Threshold\n",
      96, 1,
      {icon_theme_dir().Append("96x96").Append("apps"),
       icon_theme_dir().Append("48x48@2").Append("apps")});
}

// This test verifies that the logrithmic distance is used.
TEST_F(IconIndexFileTest, LogrithmicDistance) {
  ValidateIndexThemeFile(
      "[Icon Theme]\n"
      "Name=Hicolor\n"
      "Comment=Fallback icon theme\n"
      "Hidden=true\n"
      "Directories=12x12/apps,40x40/apps\n"
      "\n\n"
      "[12x12/apps]\n"
      "Size=12\n"
      "Context=Applications\n"
      "Type=Threshold\n\n"
      "[40x40/apps]\n"
      "Size=40\n"
      "Context=Applications\n"
      "Type=Threshold\n",
      24, 1,
      {icon_theme_dir().Append("40x40").Append("apps"),
       icon_theme_dir().Append("12x12").Append("apps")});
}

// This test verifies that a directory which is within limit is in front of
// one that's not within limit even though its distance is farther.
TEST_F(IconIndexFileTest, WithinLimitIsInFront) {
  ValidateIndexThemeFile(
      "[Icon Theme]\n"
      "Name=Hicolor\n"
      "Comment=Fallback icon theme\n"
      "Hidden=true\n"
      "Directories=12x12/apps,40x40/apps\n"
      "\n\n"
      "[12x12/apps]\n"
      "Size=12\n"
      "Context=Applications\n"
      "Type=Threshold\n\n"
      "[40x40/apps]\n"
      "Size=40\n"
      "Context=Applications\n"
      "Type=Fixed\n",
      24, 1,
      {icon_theme_dir().Append("12x12").Append("apps"),
       icon_theme_dir().Append("40x40").Append("apps")});
}

// This test verifies that a perfect match is in front of one that's not perfect
// match but within limit, which in turn is in front of one that's not within
// limit.
TEST_F(IconIndexFileTest, PerfectThenWithinLimitThenOther) {
  ValidateIndexThemeFile(
      "[Icon Theme]\n"
      "Name=Hicolor\n"
      "Comment=Fallback icon theme\n"
      "Hidden=true\n"
      "Directories=12x12@2/apps,40x40/apps,24x24/apps\n"
      "\n\n"
      "[12x12@2/apps]\n"
      "Size=12\n"
      "Scale=2\n"
      "Context=Applications\n"
      "Type=Threshold\n\n"
      "[40x40/apps]\n"
      "Size=40\n"
      "Context=Applications\n"
      "Type=Scalable\n"
      "[24x24/apps]\n"
      "Size=24\n"
      "Context=Applications\n"
      "Type=Fixed\n",
      24, 1,
      {icon_theme_dir().Append("24x24").Append("apps"),
       icon_theme_dir().Append("12x12@2").Append("apps"),
       icon_theme_dir().Append("40x40").Append("apps")});
}

// This test verifies that distance is zero between the same size and scale.
TEST_F(IconIndexFileTest, BasicZeroDistance) {
  IconIndexFile::DirectoryEntry directory_entry = {.size = 48, .scale = 2};
  EXPECT_EQ(0, IconIndexFile::Distance(directory_entry, 48, 2));
}

// This test verifies that distance is zero when the scaled size matches.
TEST_F(IconIndexFileTest, ScaledZeroDistance) {
  IconIndexFile::DirectoryEntry directory_entry = {.size = 48, .scale = 2};
  EXPECT_EQ(0, IconIndexFile::Distance(directory_entry, 96, 1));
}

// This test verifies a correct retun of distance.
TEST_F(IconIndexFileTest, NonZeroDistance) {
  IconIndexFile::DirectoryEntry directory_entry = {.size = 48, .scale = 2};
  EXPECT_EQ(100, IconIndexFile::Distance(directory_entry, 48, 1));
}

// This test verifies that PerfectMatch returns true when size and scale matches
// respectively.
TEST_F(IconIndexFileTest, PerfectMatch) {
  IconIndexFile::DirectoryEntry directory_entry = {.size = 48, .scale = 2};
  EXPECT_TRUE(IconIndexFile::PerfectMatch(directory_entry, 48, 2));
}

// This test verifies that PerfectMatch returns false when they don't.
TEST_F(IconIndexFileTest, NotPerfectMatch) {
  IconIndexFile::DirectoryEntry directory_entry = {.size = 48, .scale = 2};
  EXPECT_FALSE(IconIndexFile::PerfectMatch(directory_entry, 96, 1));
}

// This test verifies a threshold type within limit case works correctly.
TEST_F(IconIndexFileTest, ThresholdWithinLimit) {
  IconIndexFile::DirectoryEntry directory_entry = {
      .type = "Threshold", .size = 48, .scale = 2};
  EXPECT_TRUE(IconIndexFile::WithinLimit(directory_entry, 96 * 1));
}

// This test verifies a threshold type not with limit case works correctly.
TEST_F(IconIndexFileTest, ThresholdNotWithinLimit) {
  IconIndexFile::DirectoryEntry directory_entry = {
      .type = "Threshold", .size = 48, .scale = 2};
  EXPECT_FALSE(IconIndexFile::WithinLimit(directory_entry, 97 * 1));
}

// This test verifies a scalable type within limit case works correctly.
TEST_F(IconIndexFileTest, ScalableWithinLimit) {
  IconIndexFile::DirectoryEntry directory_entry = {
      .type = "Scalable", .min_size = 48, .max_size = 96};
  EXPECT_TRUE(IconIndexFile::WithinLimit(directory_entry, 64 * 1));
}

// This test verifies a scalable type not with limit case works correctly.
TEST_F(IconIndexFileTest, ScalableNotWithinLimit) {
  IconIndexFile::DirectoryEntry directory_entry = {
      .type = "Scalable", .min_size = 48, .max_size = 96};
  EXPECT_FALSE(IconIndexFile::WithinLimit(directory_entry, 97 * 1));
}

// This test verifies a fixed type within limit case works correctly.
TEST_F(IconIndexFileTest, FixedWithinLimit) {
  IconIndexFile::DirectoryEntry directory_entry = {.type = "Fixed", .size = 48};
  EXPECT_TRUE(IconIndexFile::WithinLimit(directory_entry, 48 * 1));
}

// This test verifies a fixed type not with limit case works correctly.
TEST_F(IconIndexFileTest, FixedNotWithinLimit) {
  IconIndexFile::DirectoryEntry directory_entry = {.type = "Fixed", .size = 48};
  EXPECT_FALSE(IconIndexFile::WithinLimit(directory_entry, 48 * 2));
}

}  // namespace garcon
}  // namespace vm_tools
