OLD | NEW |
(Empty) | |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include <vector> |
| 6 |
| 7 #include "base/macros.h" |
| 8 #include "base/message_loop/message_loop.h" |
| 9 #include "mojo/public/cpp/bindings/binding_set.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" |
| 11 #include "third_party/skia/include/core/SkBitmap.h" |
| 12 #include "ui/gfx/geometry/size.h" |
| 13 #include "ui/gfx/image/image_skia_operations.h" |
| 14 #include "ui/gfx/image/image_skia_source.h" |
| 15 #include "ui/gfx/image/image_unittest_util.h" |
| 16 #include "ui/gfx/image/mojo/image_traits_test_service.mojom.h" |
| 17 |
| 18 namespace gfx { |
| 19 |
| 20 namespace { |
| 21 |
| 22 // A test ImageSkiaSource that creates an ImageSkiaRep for any scale. |
| 23 class TestImageSkiaSource : public ImageSkiaSource { |
| 24 public: |
| 25 explicit TestImageSkiaSource(const gfx::Size& dip_size) |
| 26 : dip_size_(dip_size) {} |
| 27 ~TestImageSkiaSource() override = default; |
| 28 |
| 29 // ImageSkiaSource: |
| 30 ImageSkiaRep GetImageForScale(float scale) override { |
| 31 return ImageSkiaRep(ScaleToCeiledSize(dip_size_, scale), scale); |
| 32 } |
| 33 |
| 34 private: |
| 35 const gfx::Size dip_size_; |
| 36 |
| 37 DISALLOW_COPY_AND_ASSIGN(TestImageSkiaSource); |
| 38 }; |
| 39 |
| 40 class ImageTraitsTest : public testing::Test, |
| 41 public mojom::ImageTraitsTestService { |
| 42 public: |
| 43 ImageTraitsTest() = default; |
| 44 |
| 45 // testing::Test: |
| 46 void SetUp() override { |
| 47 service_ = bindings_.CreateInterfacePtrAndBind(this); |
| 48 } |
| 49 |
| 50 mojom::ImageTraitsTestServicePtr& service() { return service_; } |
| 51 |
| 52 private: |
| 53 // mojom::ImageTraitsTestService: |
| 54 void EchoImageSkiaRep(const ImageSkiaRep& in, |
| 55 const EchoImageSkiaRepCallback& callback) override { |
| 56 callback.Run(in); |
| 57 } |
| 58 void EchoImageSkia(const ImageSkia& in, |
| 59 const EchoImageSkiaCallback& callback) override { |
| 60 callback.Run(in); |
| 61 } |
| 62 |
| 63 base::MessageLoop loop_; |
| 64 mojo::BindingSet<ImageTraitsTestService> bindings_; |
| 65 mojom::ImageTraitsTestServicePtr service_; |
| 66 |
| 67 DISALLOW_COPY_AND_ASSIGN(ImageTraitsTest); |
| 68 }; |
| 69 |
| 70 } // namespace |
| 71 |
| 72 TEST_F(ImageTraitsTest, NullImageSkiaRep) { |
| 73 ImageSkiaRep null_rep; |
| 74 ASSERT_TRUE(null_rep.is_null()); |
| 75 |
| 76 ImageSkiaRep output(gfx::Size(1, 1), 1.0f); |
| 77 ASSERT_FALSE(output.is_null()); |
| 78 service()->EchoImageSkiaRep(null_rep, &output); |
| 79 EXPECT_TRUE(output.is_null()); |
| 80 } |
| 81 |
| 82 TEST_F(ImageTraitsTest, EmptyImageSkiaRep) { |
| 83 SkBitmap empty_bitmap; |
| 84 empty_bitmap.allocN32Pixels(0, 0); |
| 85 // Empty SkBitmap is not null. |
| 86 EXPECT_FALSE(empty_bitmap.isNull()); |
| 87 EXPECT_TRUE(empty_bitmap.drawsNothing()); |
| 88 |
| 89 ImageSkiaRep empty_rep(empty_bitmap, 1.0f); |
| 90 // ImageSkiaRep with empty bitmap is not null. |
| 91 ASSERT_FALSE(empty_rep.is_null()); |
| 92 |
| 93 ImageSkiaRep output(gfx::Size(1, 1), 1.0f); |
| 94 ASSERT_FALSE(output.is_null()); |
| 95 service()->EchoImageSkiaRep(empty_rep, &output); |
| 96 EXPECT_TRUE(empty_rep.sk_bitmap().drawsNothing()); |
| 97 EXPECT_TRUE(test::AreBitmapsEqual(empty_rep.sk_bitmap(), output.sk_bitmap())); |
| 98 } |
| 99 |
| 100 TEST_F(ImageTraitsTest, ImageSkiaRep) { |
| 101 ImageSkiaRep image_rep(gfx::Size(2, 4), 2.0f); |
| 102 |
| 103 ImageSkiaRep output; |
| 104 service()->EchoImageSkiaRep(image_rep, &output); |
| 105 |
| 106 EXPECT_FALSE(output.is_null()); |
| 107 EXPECT_EQ(image_rep.scale(), output.scale()); |
| 108 EXPECT_TRUE(test::AreBitmapsEqual(image_rep.sk_bitmap(), output.sk_bitmap())); |
| 109 } |
| 110 |
| 111 TEST_F(ImageTraitsTest, UnscaledImageSkiaRep) { |
| 112 ImageSkiaRep image_rep(gfx::Size(2, 4), 0.0f); |
| 113 ASSERT_TRUE(image_rep.unscaled()); |
| 114 |
| 115 ImageSkiaRep output(gfx::Size(1, 1), 1.0f); |
| 116 EXPECT_FALSE(output.unscaled()); |
| 117 service()->EchoImageSkiaRep(image_rep, &output); |
| 118 EXPECT_TRUE(output.unscaled()); |
| 119 EXPECT_TRUE(test::AreBitmapsEqual(image_rep.sk_bitmap(), output.sk_bitmap())); |
| 120 } |
| 121 |
| 122 TEST_F(ImageTraitsTest, NullImageSkia) { |
| 123 ImageSkia null_image; |
| 124 ASSERT_TRUE(null_image.isNull()); |
| 125 |
| 126 ImageSkia output(ImageSkiaRep(gfx::Size(1, 1), 1.0f)); |
| 127 ASSERT_FALSE(output.isNull()); |
| 128 service()->EchoImageSkia(null_image, &output); |
| 129 EXPECT_TRUE(output.isNull()); |
| 130 } |
| 131 |
| 132 TEST_F(ImageTraitsTest, ImageSkiaWithNoRepsTreatedAsNull) { |
| 133 const gfx::Size kSize(1, 2); |
| 134 ImageSkia image(new TestImageSkiaSource(kSize), kSize); |
| 135 ASSERT_FALSE(image.isNull()); |
| 136 |
| 137 ImageSkia output(ImageSkiaRep(gfx::Size(1, 1), 1.0f)); |
| 138 ASSERT_FALSE(output.isNull()); |
| 139 service()->EchoImageSkia(image, &output); |
| 140 EXPECT_TRUE(output.isNull()); |
| 141 } |
| 142 |
| 143 TEST_F(ImageTraitsTest, ImageSkia) { |
| 144 const gfx::Size kSize(1, 2); |
| 145 ImageSkia image(new TestImageSkiaSource(kSize), kSize); |
| 146 image.GetRepresentation(1.0f); |
| 147 image.GetRepresentation(2.0f); |
| 148 |
| 149 ImageSkia output; |
| 150 service()->EchoImageSkia(image, &output); |
| 151 |
| 152 EXPECT_TRUE(test::AreImagesEqual(Image(output), Image(image))); |
| 153 } |
| 154 |
| 155 TEST_F(ImageTraitsTest, EmptyRepPreserved) { |
| 156 const gfx::Size kSize(1, 2); |
| 157 ImageSkia image(new TestImageSkiaSource(kSize), kSize); |
| 158 image.GetRepresentation(1.0f); |
| 159 |
| 160 SkBitmap empty_bitmap; |
| 161 empty_bitmap.allocN32Pixels(0, 0); |
| 162 image.AddRepresentation(ImageSkiaRep(empty_bitmap, 2.0f)); |
| 163 |
| 164 ImageSkia output; |
| 165 service()->EchoImageSkia(image, &output); |
| 166 |
| 167 EXPECT_TRUE(test::AreImagesEqual(Image(output), Image(image))); |
| 168 } |
| 169 |
| 170 TEST_F(ImageTraitsTest, ImageSkiaWithOperations) { |
| 171 const gfx::Size kSize(32, 32); |
| 172 ImageSkia image(new TestImageSkiaSource(kSize), kSize); |
| 173 |
| 174 const gfx::Size kNewSize(16, 16); |
| 175 ImageSkia resized = ImageSkiaOperations::CreateResizedImage( |
| 176 image, skia::ImageOperations::RESIZE_BEST, kNewSize); |
| 177 resized.GetRepresentation(1.0f); |
| 178 resized.GetRepresentation(2.0f); |
| 179 |
| 180 ImageSkia output; |
| 181 service()->EchoImageSkia(resized, &output); |
| 182 |
| 183 EXPECT_TRUE(test::AreImagesEqual(Image(output), Image(resized))); |
| 184 } |
| 185 |
| 186 } // namespace gfx |
OLD | NEW |