blob: b461c898af622fb587c89f8f141172253465a3f1 [file] [log] [blame]
// Copyright 2018 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 "services/media_session/public/cpp/media_image_manager.h"
#include "base/hash.h"
#include "base/macros.h"
#include "base/strings/string16.h"
#include "base/strings/utf_string_conversions.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace media_session {
namespace {
const int kMinSize = 10;
const int kIdealSize = 40;
} // namespace
class MediaImageManagerTest : public testing::Test {
public:
MediaImageManagerTest() = default;
void SetUp() override {
manager_ = std::make_unique<MediaImageManager>(kMinSize, kIdealSize);
}
MediaImageManager* manager() const { return manager_.get(); }
private:
std::unique_ptr<MediaImageManager> manager_;
DISALLOW_COPY_AND_ASSIGN(MediaImageManagerTest);
};
TEST_F(MediaImageManagerTest, CheckExpectedImageExtensionHashes) {
const std::string extensions[] = {".png", ".jpeg", ".jpg",
".bmp", ".icon", ".gif"};
for (const auto& extension : extensions) {
// Uncomment this line to print the hashes if new ones need to be added.
// printf("0x%x %s\n", base::PersistentHash(extension), extension.c_str());
GURL url("https://www.example.com/test" + extension);
EXPECT_TRUE(MediaImageManager::GetImageExtensionScore(url));
}
}
TEST_F(MediaImageManagerTest, CheckExpectedImageTypeHashes) {
const std::string types[] = {"image/bmp", "image/gif", "image/jpeg",
"image/png", "image/x-icon"};
for (const auto& type : types) {
base::string16 type16 = base::ASCIIToUTF16(type);
// Uncomment these lines to print the hashes if new ones need to be added.
// printf("0x%x %s\n",
// base::PersistentHash(type16.data(),
// type16.size() * sizeof(base::char16)),
// type.c_str());
EXPECT_TRUE(MediaImageManager::GetImageTypeScore(type16));
}
}
TEST_F(MediaImageManagerTest, PickImageFromMimeType) {
std::vector<MediaMetadata::MediaImage> images;
media_session::MediaMetadata::MediaImage image1;
image1.type = base::ASCIIToUTF16("image/bmp");
image1.sizes.push_back(gfx::Size(kIdealSize, kIdealSize));
images.push_back(image1);
media_session::MediaMetadata::MediaImage image2;
image2.type = base::ASCIIToUTF16("image/png");
image2.sizes.push_back(gfx::Size(kIdealSize, kIdealSize));
images.push_back(image2);
EXPECT_EQ(image2, manager()->SelectImage(images));
}
TEST_F(MediaImageManagerTest, PickImageFromExtension) {
std::vector<MediaMetadata::MediaImage> images;
media_session::MediaMetadata::MediaImage image1;
image1.src = GURL("https://www.example.com/test.bmp");
image1.sizes.push_back(gfx::Size(kIdealSize, kIdealSize));
images.push_back(image1);
media_session::MediaMetadata::MediaImage image2;
image2.src = GURL("https://www.example.com/test.PNG");
image2.sizes.push_back(gfx::Size(kIdealSize, kIdealSize));
images.push_back(image2);
media_session::MediaMetadata::MediaImage image3;
image3.src = GURL("https://www.example.com/test");
image3.sizes.push_back(gfx::Size(kIdealSize, kIdealSize));
images.push_back(image3);
EXPECT_EQ(image2, manager()->SelectImage(images));
}
TEST_F(MediaImageManagerTest, IgnoreImageTooSmall) {
std::vector<MediaMetadata::MediaImage> images;
media_session::MediaMetadata::MediaImage image;
image.sizes.push_back(gfx::Size(1, 1));
images.push_back(image);
EXPECT_FALSE(manager()->SelectImage(images));
}
TEST_F(MediaImageManagerTest, PickImageUseDefaultScoreIfNoSize) {
std::vector<MediaMetadata::MediaImage> images;
media_session::MediaMetadata::MediaImage image1;
image1.src = GURL("https://www.example.com/test.bmp");
image1.sizes.push_back(gfx::Size(kIdealSize, kIdealSize));
images.push_back(image1);
media_session::MediaMetadata::MediaImage image2;
image2.src = GURL("https://www.example.com/test.PNG");
images.push_back(image2);
EXPECT_EQ(image1, manager()->SelectImage(images));
}
TEST_F(MediaImageManagerTest, PickImageCloserToIdeal) {
std::vector<MediaMetadata::MediaImage> images;
media_session::MediaMetadata::MediaImage image1;
image1.sizes.push_back(gfx::Size(kIdealSize, kIdealSize));
images.push_back(image1);
media_session::MediaMetadata::MediaImage image2;
image2.sizes.push_back(gfx::Size(kMinSize, kMinSize));
images.push_back(image2);
EXPECT_EQ(image1, manager()->SelectImage(images));
}
TEST_F(MediaImageManagerTest, PickImageWithMultipleSizes) {
std::vector<MediaMetadata::MediaImage> images;
media_session::MediaMetadata::MediaImage image1;
image1.sizes.push_back(gfx::Size(kIdealSize - 5, kIdealSize - 5));
images.push_back(image1);
media_session::MediaMetadata::MediaImage image2;
image2.sizes.push_back(gfx::Size(kMinSize, kMinSize));
image2.sizes.push_back(gfx::Size(kIdealSize, kIdealSize));
images.push_back(image2);
EXPECT_EQ(image2, manager()->SelectImage(images));
}
TEST_F(MediaImageManagerTest, PickImageWithBetterAspectRatio) {
std::vector<MediaMetadata::MediaImage> images;
media_session::MediaMetadata::MediaImage image1;
image1.sizes.push_back(gfx::Size(kIdealSize, kIdealSize));
images.push_back(image1);
media_session::MediaMetadata::MediaImage image2;
image2.sizes.push_back(gfx::Size(kIdealSize, kMinSize));
images.push_back(image2);
EXPECT_EQ(image1, manager()->SelectImage(images));
}
} // namespace media_session