blob: 970600689455cff97c4096ce769af57153b5db4b [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ash/wallpaper_handlers/sea_pen_utils.h"
#include "ash/test/ash_test_base.h"
#include "ash/webui/common/mojom/sea_pen.mojom.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/display/test/display_manager_test_api.h"
#include "ui/gfx/geometry/size.h"
namespace wallpaper_handlers {
namespace {
using SeaPenUtilsTest = ash::AshTestBase;
using SeaPenTemplateChip = ash::personalization_app::mojom::SeaPenTemplateChip;
using SeaPenTemplateOption =
ash::personalization_app::mojom::SeaPenTemplateOption;
using SeaPenTemplateId = ash::personalization_app::mojom::SeaPenTemplateId;
TEST_F(SeaPenUtilsTest, GetLargestDisplaySizeSimple) {
UpdateDisplay("1280x720");
EXPECT_EQ(gfx::Size(1280, 720), GetLargestDisplaySizeLandscape());
}
TEST_F(SeaPenUtilsTest, GetLargestDisplaySizeRotated) {
gfx::Size expected(640, 480);
for (const std::string& display_spec :
{"640x480/l", "640x480/r", "640x480/u", "480x640"}) {
UpdateDisplay(display_spec);
EXPECT_EQ(expected, GetLargestDisplaySizeLandscape()) << display_spec;
}
}
TEST_F(SeaPenUtilsTest, GetLargestDisplaySizeMultiple) {
UpdateDisplay("1600x900,1920x1080");
EXPECT_EQ(gfx::Size(1920, 1080), GetLargestDisplaySizeLandscape());
}
TEST_F(SeaPenUtilsTest, GetLargestDisplaySizeScaleFactor) {
// The second display is a portrait 4k display with a scale factor of 2.
// Naively calling display.size() will return {1080,1920}. We still want
// {3840,2160}.
UpdateDisplay("2560x1440,3840x2160*2/l");
EXPECT_EQ(gfx::Size(3840, 2160), GetLargestDisplaySizeLandscape());
}
TEST_F(SeaPenUtilsTest, IsValidTemplate) {
base::flat_map<ash::personalization_app::mojom::SeaPenTemplateChip,
ash::personalization_app::mojom::SeaPenTemplateOption>
options(
{{ash::personalization_app::mojom::SeaPenTemplateChip::kFlowerColor,
ash::personalization_app::mojom::SeaPenTemplateOption::
kFlowerColorBlue},
{ash::personalization_app::mojom::SeaPenTemplateChip::kFlowerType,
ash::personalization_app::mojom::SeaPenTemplateOption::
kFlowerTypeRose}});
ash::personalization_app::mojom::SeaPenTemplateQueryPtr template_query =
ash::personalization_app::mojom::SeaPenTemplateQuery::New(
ash::personalization_app::mojom::SeaPenTemplateId::kFlower, options,
ash::personalization_app::mojom::SeaPenUserVisibleQuery::New(
"test template query", "test template title"));
EXPECT_TRUE(IsValidTemplateQuery(template_query));
}
TEST_F(SeaPenUtilsTest, IsValidTemplate_wrongChip) {
base::flat_map<ash::personalization_app::mojom::SeaPenTemplateChip,
ash::personalization_app::mojom::SeaPenTemplateOption>
options(
{{ash::personalization_app::mojom::SeaPenTemplateChip::kFlowerColor,
ash::personalization_app::mojom::SeaPenTemplateOption::
kFlowerColorBlue},
{ash::personalization_app::mojom::SeaPenTemplateChip::
kCharactersColor,
ash::personalization_app::mojom::SeaPenTemplateOption::
kFlowerTypeRose}});
ash::personalization_app::mojom::SeaPenTemplateQueryPtr template_query =
ash::personalization_app::mojom::SeaPenTemplateQuery::New(
ash::personalization_app::mojom::SeaPenTemplateId::kFlower, options,
ash::personalization_app::mojom::SeaPenUserVisibleQuery::New(
"test template query", "test template title"));
EXPECT_FALSE(IsValidTemplateQuery(template_query));
}
TEST_F(SeaPenUtilsTest, IsValidTemplate_wrongOption) {
base::flat_map<ash::personalization_app::mojom::SeaPenTemplateChip,
ash::personalization_app::mojom::SeaPenTemplateOption>
options(
{{ash::personalization_app::mojom::SeaPenTemplateChip::kFlowerColor,
ash::personalization_app::mojom::SeaPenTemplateOption::
kFlowerColorBlue},
{ash::personalization_app::mojom::SeaPenTemplateChip::kFlowerType,
ash::personalization_app::mojom::SeaPenTemplateOption::
kMineralColorCool}});
ash::personalization_app::mojom::SeaPenTemplateQueryPtr template_query =
ash::personalization_app::mojom::SeaPenTemplateQuery::New(
ash::personalization_app::mojom::SeaPenTemplateId::kFlower, options,
ash::personalization_app::mojom::SeaPenUserVisibleQuery::New(
"test template query", "test template title"));
EXPECT_FALSE(IsValidTemplateQuery(template_query));
}
TEST_F(SeaPenUtilsTest, IsValidTemplate_tooManyOptions) {
base::flat_map<ash::personalization_app::mojom::SeaPenTemplateChip,
ash::personalization_app::mojom::SeaPenTemplateOption>
options(
{{ash::personalization_app::mojom::SeaPenTemplateChip::kFlowerColor,
ash::personalization_app::mojom::SeaPenTemplateOption::
kFlowerColorBlue},
{ash::personalization_app::mojom::SeaPenTemplateChip::kMineralColor,
ash::personalization_app::mojom::SeaPenTemplateOption::
kMineralColorCool},
{ash::personalization_app::mojom::SeaPenTemplateChip::kFlowerType,
ash::personalization_app::mojom::SeaPenTemplateOption::
kFlowerTypeRose}});
ash::personalization_app::mojom::SeaPenTemplateQueryPtr template_query =
ash::personalization_app::mojom::SeaPenTemplateQuery::New(
ash::personalization_app::mojom::SeaPenTemplateId::kFlower, options,
ash::personalization_app::mojom::SeaPenUserVisibleQuery::New(
"test template query", "test template title"));
EXPECT_FALSE(IsValidTemplateQuery(template_query));
}
TEST_F(SeaPenUtilsTest, IsValidTemplate_tooFewOptions) {
base::flat_map<ash::personalization_app::mojom::SeaPenTemplateChip,
ash::personalization_app::mojom::SeaPenTemplateOption>
options({
{ash::personalization_app::mojom::SeaPenTemplateChip::kFlowerColor,
ash::personalization_app::mojom::SeaPenTemplateOption::
kFlowerColorBlue},
});
ash::personalization_app::mojom::SeaPenTemplateQueryPtr template_query =
ash::personalization_app::mojom::SeaPenTemplateQuery::New(
ash::personalization_app::mojom::SeaPenTemplateId::kFlower, options,
ash::personalization_app::mojom::SeaPenUserVisibleQuery::New(
"test template query", "test template title"));
EXPECT_FALSE(IsValidTemplateQuery(template_query));
}
TEST_F(SeaPenUtilsTest, IsValidTemplate_duplicateChips) {
base::flat_map<ash::personalization_app::mojom::SeaPenTemplateChip,
ash::personalization_app::mojom::SeaPenTemplateOption>
options(
{{ash::personalization_app::mojom::SeaPenTemplateChip::kFlowerType,
ash::personalization_app::mojom::SeaPenTemplateOption::
kFlowerTypeRose},
{ash::personalization_app::mojom::SeaPenTemplateChip::kFlowerType,
ash::personalization_app::mojom::SeaPenTemplateOption::
kFlowerTypeBirdOfParadise}});
ash::personalization_app::mojom::SeaPenTemplateQueryPtr template_query =
ash::personalization_app::mojom::SeaPenTemplateQuery::New(
ash::personalization_app::mojom::SeaPenTemplateId::kFlower, options,
ash::personalization_app::mojom::SeaPenUserVisibleQuery::New(
"test template query", "test template title"));
EXPECT_FALSE(IsValidTemplateQuery(template_query));
}
TEST_F(SeaPenUtilsTest, GetFeedbackText) {
base::flat_map<ash::personalization_app::mojom::SeaPenTemplateChip,
ash::personalization_app::mojom::SeaPenTemplateOption>
options(
{{ash::personalization_app::mojom::SeaPenTemplateChip::kFlowerType,
ash::personalization_app::mojom::SeaPenTemplateOption::
kFlowerTypeRose},
{ash::personalization_app::mojom::SeaPenTemplateChip::kFlowerColor,
ash::personalization_app::mojom::SeaPenTemplateOption::
kFlowerColorBlue}});
ash::personalization_app::mojom::SeaPenTemplateQueryPtr template_query =
ash::personalization_app::mojom::SeaPenTemplateQuery::New(
ash::personalization_app::mojom::SeaPenTemplateId::kFlower, options,
ash::personalization_app::mojom::SeaPenUserVisibleQuery::New(
"test template query", "test template title"));
ash::personalization_app::mojom::SeaPenFeedbackMetadataPtr metadata =
ash::personalization_app::mojom::SeaPenFeedbackMetadata::New();
metadata->log_id = "Flower";
metadata->is_positive = true;
metadata->generation_seed = 4294967290;
std::string feedback_text =
"#AIWallpaper Positive: test template query\ntemplate: Flower\noptions: "
"(<flower_type>, rose)(<flower_color>, blue)\ngeneration_seed: "
"4294967290\n";
EXPECT_EQ(feedback_text, GetFeedbackText(template_query, metadata));
}
} // namespace
} // namespace wallpaper_handlers