blob: c639c74219fd5e3861bc37779ac9c25ddf79e22e [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 "third_party/blink/renderer/modules/manifest/image_resource_type_converters.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/public/mojom/manifest/manifest.mojom-blink.h"
#include "third_party/blink/public/platform/web_size.h"
#include "third_party/blink/public/platform/web_string.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_image_resource.h"
#include "third_party/blink/renderer/platform/weborigin/kurl.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
namespace mojo {
namespace {
using Purpose = blink::mojom::blink::ManifestImageResource::Purpose;
using blink::mojom::blink::ManifestImageResource;
using blink::mojom::blink::ManifestImageResourcePtr;
TEST(ImageResourceConverter, EmptySizesTest) {
blink::ManifestImageResource* resource =
blink::ManifestImageResource::Create();
ManifestImageResourcePtr converted = ManifestImageResource::From(resource);
ASSERT_TRUE(converted->sizes.IsEmpty());
// Explicitly set to empty.
resource->setSizes("");
converted = ManifestImageResource::From(resource);
ASSERT_TRUE(converted->sizes.IsEmpty());
}
TEST(ImageResourceConverter, ValidSizesTest) {
blink::ManifestImageResource* resource =
blink::ManifestImageResource::Create();
resource->setSizes("2x3");
ManifestImageResourcePtr converted = ManifestImageResource::From(resource);
ASSERT_EQ(converted->sizes.size(), 1u);
EXPECT_EQ(converted->sizes.front(), gfx::Size(2, 3));
resource->setSizes("42X24");
converted = ManifestImageResource::From(resource);
ASSERT_EQ(converted->sizes.size(), 1u);
EXPECT_EQ(converted->sizes.front(), gfx::Size(42, 24));
resource->setSizes("any");
converted = ManifestImageResource::From(resource);
ASSERT_EQ(converted->sizes.size(), 1u);
EXPECT_EQ(converted->sizes.front(), gfx::Size(0, 0));
resource->setSizes("ANY");
converted = ManifestImageResource::From(resource);
ASSERT_EQ(converted->sizes.size(), 1u);
EXPECT_EQ(converted->sizes.front(), gfx::Size(0, 0));
resource->setSizes("2x2 4x4");
converted = ManifestImageResource::From(resource);
ASSERT_EQ(converted->sizes.size(), 2u);
EXPECT_EQ(converted->sizes.front(), gfx::Size(2, 2));
EXPECT_EQ(converted->sizes.back(), gfx::Size(4, 4));
resource->setSizes("2x2 4x4 2x2");
converted = ManifestImageResource::From(resource);
ASSERT_EQ(2u, converted->sizes.size());
EXPECT_EQ(gfx::Size(2, 2), converted->sizes.front());
EXPECT_EQ(gfx::Size(4, 4), converted->sizes.back());
resource->setSizes(" 2x2 any");
converted = ManifestImageResource::From(resource);
ASSERT_EQ(2u, converted->sizes.size());
EXPECT_EQ(gfx::Size(2, 2), converted->sizes.front());
EXPECT_EQ(gfx::Size(0, 0), converted->sizes.back());
}
TEST(ImageResourceConverter, InvalidSizesTest) {
blink::ManifestImageResource* resource =
blink::ManifestImageResource::Create();
resource->setSizes("02x3");
ManifestImageResourcePtr converted = ManifestImageResource::From(resource);
ASSERT_TRUE(converted->sizes.IsEmpty());
resource->setSizes("42X024");
converted = ManifestImageResource::From(resource);
ASSERT_TRUE(converted->sizes.IsEmpty());
resource->setSizes("42x");
converted = ManifestImageResource::From(resource);
ASSERT_TRUE(converted->sizes.IsEmpty());
resource->setSizes("foo");
converted = ManifestImageResource::From(resource);
ASSERT_TRUE(converted->sizes.IsEmpty());
}
TEST(ImageResourceConverter, EmptyPurposeTest) {
blink::ManifestImageResource* resource =
blink::ManifestImageResource::Create();
ManifestImageResourcePtr converted = ManifestImageResource::From(resource);
ASSERT_TRUE(converted->purpose.IsEmpty());
// Explicitly set to empty.
resource->setPurpose("");
converted = ManifestImageResource::From(resource);
ASSERT_TRUE(converted->purpose.IsEmpty());
}
TEST(ImageResourceConverter, ValidPurposeTest) {
blink::ManifestImageResource* resource =
blink::ManifestImageResource::Create();
resource->setPurpose("any");
ManifestImageResourcePtr converted = ManifestImageResource::From(resource);
ASSERT_EQ(1u, converted->purpose.size());
ASSERT_EQ(Purpose::ANY, converted->purpose.front());
resource->setPurpose(" Monochrome");
converted = ManifestImageResource::From(resource);
ASSERT_EQ(1u, converted->purpose.size());
ASSERT_EQ(Purpose::MONOCHROME, converted->purpose.front());
resource->setPurpose(" Monochrome AnY");
converted = ManifestImageResource::From(resource);
ASSERT_EQ(2u, converted->purpose.size());
ASSERT_EQ(Purpose::MONOCHROME, converted->purpose.front());
ASSERT_EQ(Purpose::ANY, converted->purpose.back());
resource->setPurpose("any monochrome AnY");
converted = ManifestImageResource::From(resource);
ASSERT_EQ(2u, converted->purpose.size());
ASSERT_EQ(Purpose::ANY, converted->purpose.front());
ASSERT_EQ(Purpose::MONOCHROME, converted->purpose.back());
}
TEST(ImageResourceConverter, InvalidPurposeTest) {
blink::ManifestImageResource* resource =
blink::ManifestImageResource::Create();
resource->setPurpose("any?");
ManifestImageResourcePtr converted = ManifestImageResource::From(resource);
ASSERT_TRUE(converted->purpose.IsEmpty());
}
TEST(ImageResourceConverter, EmptyTypeTest) {
blink::ManifestImageResource* resource =
blink::ManifestImageResource::Create();
ManifestImageResourcePtr converted = ManifestImageResource::From(resource);
ASSERT_TRUE(converted->type.IsEmpty());
// Explicitly set to empty.
resource->setType("");
converted = ManifestImageResource::From(resource);
ASSERT_TRUE(converted->type.IsEmpty());
}
TEST(ImageResourceConverter, InvalidTypeTest) {
blink::ManifestImageResource* resource =
blink::ManifestImageResource::Create();
resource->setType("image/NOTVALID!");
ManifestImageResourcePtr converted = ManifestImageResource::From(resource);
ASSERT_TRUE(converted->type.IsEmpty());
}
TEST(ImageResourceConverter, ValidTypeTest) {
blink::ManifestImageResource* resource =
blink::ManifestImageResource::Create();
resource->setType("image/jpeg");
ManifestImageResourcePtr converted = ManifestImageResource::From(resource);
EXPECT_EQ("image/jpeg", converted->type);
}
TEST(ImageResourceConverter, ExampleValueTest) {
blink::ManifestImageResource* resource =
blink::ManifestImageResource::Create();
resource->setSrc("http://example.com/lolcat.jpg");
resource->setPurpose("MONOCHROME");
resource->setSizes("32x32 64x64 128x128");
resource->setType("image/jpeg");
auto expected_resource = ManifestImageResource::New();
expected_resource->src = blink::KURL("http://example.com/lolcat.jpg");
expected_resource->purpose = {Purpose::MONOCHROME};
expected_resource->sizes = {{32, 32}, {64, 64}, {128, 128}};
expected_resource->type = "image/jpeg";
EXPECT_EQ(expected_resource, ManifestImageResource::From(resource));
}
TEST(ImageResourceConverter, BlinkToMojoTypeTest) {
blink::ManifestImageResource* icon = blink::ManifestImageResource::Create();
icon->setSrc("http://example.com/lolcat.jpg");
icon->setPurpose("MONOCHROME");
icon->setSizes("32x32 64x64 128x128");
icon->setType("image/jpeg");
blink::Manifest::ImageResource mojo_icon =
blink::ConvertManifestImageResource(icon);
EXPECT_EQ(mojo_icon.src.spec(), "http://example.com/lolcat.jpg");
EXPECT_EQ(mojo_icon.type, blink::WebString("image/jpeg").Utf16());
EXPECT_EQ(mojo_icon.sizes[1], gfx::Size(64, 64));
EXPECT_EQ(mojo_icon.purpose[0],
blink::mojom::ManifestImageResource_Purpose::MONOCHROME);
}
} // namespace
} // namespace mojo