Index: ui/gfx/image/mojo/image_traits_unittest.cc |
diff --git a/ui/gfx/image/mojo/image_traits_unittest.cc b/ui/gfx/image/mojo/image_traits_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..bce6866e21ebd0ea9eb6ce10a5e33c07ab808fcb |
--- /dev/null |
+++ b/ui/gfx/image/mojo/image_traits_unittest.cc |
@@ -0,0 +1,186 @@ |
+// Copyright 2017 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 <vector> |
+ |
+#include "base/macros.h" |
+#include "base/message_loop/message_loop.h" |
+#include "mojo/public/cpp/bindings/binding_set.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+#include "third_party/skia/include/core/SkBitmap.h" |
+#include "ui/gfx/geometry/size.h" |
+#include "ui/gfx/image/image_skia_operations.h" |
+#include "ui/gfx/image/image_skia_source.h" |
+#include "ui/gfx/image/image_unittest_util.h" |
+#include "ui/gfx/image/mojo/image_traits_test_service.mojom.h" |
+ |
+namespace gfx { |
+ |
+namespace { |
+ |
+// A test ImageSkiaSource that creates an ImageSkiaRep for any scale. |
+class TestImageSkiaSource : public ImageSkiaSource { |
+ public: |
+ explicit TestImageSkiaSource(const gfx::Size& dip_size) |
+ : dip_size_(dip_size) {} |
+ ~TestImageSkiaSource() override = default; |
+ |
+ // ImageSkiaSource: |
+ ImageSkiaRep GetImageForScale(float scale) override { |
+ return ImageSkiaRep(ScaleToCeiledSize(dip_size_, scale), scale); |
+ } |
+ |
+ private: |
+ const gfx::Size dip_size_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(TestImageSkiaSource); |
+}; |
+ |
+class ImageTraitsTest : public testing::Test, |
+ public mojom::ImageTraitsTestService { |
+ public: |
+ ImageTraitsTest() = default; |
+ |
+ // testing::Test: |
+ void SetUp() override { |
+ service_ = bindings_.CreateInterfacePtrAndBind(this); |
+ } |
+ |
+ mojom::ImageTraitsTestServicePtr& service() { return service_; } |
+ |
+ private: |
+ // mojom::ImageTraitsTestService: |
+ void EchoImageSkiaRep(const ImageSkiaRep& in, |
+ const EchoImageSkiaRepCallback& callback) override { |
+ callback.Run(in); |
+ } |
+ void EchoImageSkia(const ImageSkia& in, |
+ const EchoImageSkiaCallback& callback) override { |
+ callback.Run(in); |
+ } |
+ |
+ base::MessageLoop loop_; |
+ mojo::BindingSet<ImageTraitsTestService> bindings_; |
+ mojom::ImageTraitsTestServicePtr service_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ImageTraitsTest); |
+}; |
+ |
+} // namespace |
+ |
+TEST_F(ImageTraitsTest, NullImageSkiaRep) { |
+ ImageSkiaRep null_rep; |
+ ASSERT_TRUE(null_rep.is_null()); |
+ |
+ ImageSkiaRep output(gfx::Size(1, 1), 1.0f); |
+ ASSERT_FALSE(output.is_null()); |
+ service()->EchoImageSkiaRep(null_rep, &output); |
+ EXPECT_TRUE(output.is_null()); |
+} |
+ |
+TEST_F(ImageTraitsTest, EmptyImageSkiaRep) { |
+ SkBitmap empty_bitmap; |
+ empty_bitmap.allocN32Pixels(0, 0); |
+ // Empty SkBitmap is not null. |
+ EXPECT_FALSE(empty_bitmap.isNull()); |
+ EXPECT_TRUE(empty_bitmap.drawsNothing()); |
+ |
+ ImageSkiaRep empty_rep(empty_bitmap, 1.0f); |
+ // ImageSkiaRep with empty bitmap is not null. |
+ ASSERT_FALSE(empty_rep.is_null()); |
+ |
+ ImageSkiaRep output(gfx::Size(1, 1), 1.0f); |
+ ASSERT_FALSE(output.is_null()); |
+ service()->EchoImageSkiaRep(empty_rep, &output); |
+ EXPECT_TRUE(empty_rep.sk_bitmap().drawsNothing()); |
+ EXPECT_TRUE(test::AreBitmapsEqual(empty_rep.sk_bitmap(), output.sk_bitmap())); |
+} |
+ |
+TEST_F(ImageTraitsTest, ImageSkiaRep) { |
+ ImageSkiaRep image_rep(gfx::Size(2, 4), 2.0f); |
+ |
+ ImageSkiaRep output; |
+ service()->EchoImageSkiaRep(image_rep, &output); |
+ |
+ EXPECT_FALSE(output.is_null()); |
+ EXPECT_EQ(image_rep.scale(), output.scale()); |
+ EXPECT_TRUE(test::AreBitmapsEqual(image_rep.sk_bitmap(), output.sk_bitmap())); |
+} |
+ |
+TEST_F(ImageTraitsTest, UnscaledImageSkiaRep) { |
+ ImageSkiaRep image_rep(gfx::Size(2, 4), 0.0f); |
+ ASSERT_TRUE(image_rep.unscaled()); |
+ |
+ ImageSkiaRep output(gfx::Size(1, 1), 1.0f); |
+ EXPECT_FALSE(output.unscaled()); |
+ service()->EchoImageSkiaRep(image_rep, &output); |
+ EXPECT_TRUE(output.unscaled()); |
+ EXPECT_TRUE(test::AreBitmapsEqual(image_rep.sk_bitmap(), output.sk_bitmap())); |
+} |
+ |
+TEST_F(ImageTraitsTest, NullImageSkia) { |
+ ImageSkia null_image; |
+ ASSERT_TRUE(null_image.isNull()); |
+ |
+ ImageSkia output(ImageSkiaRep(gfx::Size(1, 1), 1.0f)); |
+ ASSERT_FALSE(output.isNull()); |
+ service()->EchoImageSkia(null_image, &output); |
+ EXPECT_TRUE(output.isNull()); |
+} |
+ |
+TEST_F(ImageTraitsTest, ImageSkiaWithNoRepsTreatedAsNull) { |
+ const gfx::Size kSize(1, 2); |
+ ImageSkia image(new TestImageSkiaSource(kSize), kSize); |
+ ASSERT_FALSE(image.isNull()); |
+ |
+ ImageSkia output(ImageSkiaRep(gfx::Size(1, 1), 1.0f)); |
+ ASSERT_FALSE(output.isNull()); |
+ service()->EchoImageSkia(image, &output); |
+ EXPECT_TRUE(output.isNull()); |
+} |
+ |
+TEST_F(ImageTraitsTest, ImageSkia) { |
+ const gfx::Size kSize(1, 2); |
+ ImageSkia image(new TestImageSkiaSource(kSize), kSize); |
+ image.GetRepresentation(1.0f); |
+ image.GetRepresentation(2.0f); |
+ |
+ ImageSkia output; |
+ service()->EchoImageSkia(image, &output); |
+ |
+ EXPECT_TRUE(test::AreImagesEqual(Image(output), Image(image))); |
+} |
+ |
+TEST_F(ImageTraitsTest, EmptyRepPreserved) { |
+ const gfx::Size kSize(1, 2); |
+ ImageSkia image(new TestImageSkiaSource(kSize), kSize); |
+ image.GetRepresentation(1.0f); |
+ |
+ SkBitmap empty_bitmap; |
+ empty_bitmap.allocN32Pixels(0, 0); |
+ image.AddRepresentation(ImageSkiaRep(empty_bitmap, 2.0f)); |
+ |
+ ImageSkia output; |
+ service()->EchoImageSkia(image, &output); |
+ |
+ EXPECT_TRUE(test::AreImagesEqual(Image(output), Image(image))); |
+} |
+ |
+TEST_F(ImageTraitsTest, ImageSkiaWithOperations) { |
+ const gfx::Size kSize(32, 32); |
+ ImageSkia image(new TestImageSkiaSource(kSize), kSize); |
+ |
+ const gfx::Size kNewSize(16, 16); |
+ ImageSkia resized = ImageSkiaOperations::CreateResizedImage( |
+ image, skia::ImageOperations::RESIZE_BEST, kNewSize); |
+ resized.GetRepresentation(1.0f); |
+ resized.GetRepresentation(2.0f); |
+ |
+ ImageSkia output; |
+ service()->EchoImageSkia(resized, &output); |
+ |
+ EXPECT_TRUE(test::AreImagesEqual(Image(output), Image(resized))); |
+} |
+ |
+} // namespace gfx |