OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/gfx/icon_util.h" | 5 #include "ui/gfx/icon_util.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
| 9 #include <memory> |
9 #include <vector> | 10 #include <vector> |
10 | 11 |
11 #include "base/files/file_util.h" | 12 #include "base/files/file_util.h" |
12 #include "base/files/scoped_temp_dir.h" | 13 #include "base/files/scoped_temp_dir.h" |
13 #include "base/memory/scoped_ptr.h" | |
14 #include "base/path_service.h" | 14 #include "base/path_service.h" |
15 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
16 #include "third_party/skia/include/core/SkBitmap.h" | 16 #include "third_party/skia/include/core/SkBitmap.h" |
17 #include "ui/gfx/geometry/size.h" | 17 #include "ui/gfx/geometry/size.h" |
18 #include "ui/gfx/gfx_paths.h" | 18 #include "ui/gfx/gfx_paths.h" |
19 #include "ui/gfx/icon_util_unittests_resource.h" | 19 #include "ui/gfx/icon_util_unittests_resource.h" |
20 #include "ui/gfx/image/image.h" | 20 #include "ui/gfx/image/image.h" |
21 #include "ui/gfx/image/image_family.h" | 21 #include "ui/gfx/image/image_family.h" |
22 | 22 |
23 namespace { | 23 namespace { |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
154 // Invalid size parameter. | 154 // Invalid size parameter. |
155 gfx::Size invalid_icon_size(kSmallIconHeight, 0); | 155 gfx::Size invalid_icon_size(kSmallIconHeight, 0); |
156 EXPECT_EQ(IconUtil::CreateSkBitmapFromHICON(icon.get(), invalid_icon_size), | 156 EXPECT_EQ(IconUtil::CreateSkBitmapFromHICON(icon.get(), invalid_icon_size), |
157 static_cast<SkBitmap*>(NULL)); | 157 static_cast<SkBitmap*>(NULL)); |
158 | 158 |
159 // Invalid icon. | 159 // Invalid icon. |
160 EXPECT_EQ(IconUtil::CreateSkBitmapFromHICON(NULL, icon_size), | 160 EXPECT_EQ(IconUtil::CreateSkBitmapFromHICON(NULL, icon_size), |
161 static_cast<SkBitmap*>(NULL)); | 161 static_cast<SkBitmap*>(NULL)); |
162 | 162 |
163 // The following code should succeed. | 163 // The following code should succeed. |
164 scoped_ptr<SkBitmap> bitmap; | 164 std::unique_ptr<SkBitmap> bitmap; |
165 bitmap.reset(IconUtil::CreateSkBitmapFromHICON(icon.get(), icon_size)); | 165 bitmap.reset(IconUtil::CreateSkBitmapFromHICON(icon.get(), icon_size)); |
166 EXPECT_NE(bitmap.get(), static_cast<SkBitmap*>(NULL)); | 166 EXPECT_NE(bitmap.get(), static_cast<SkBitmap*>(NULL)); |
167 } | 167 } |
168 | 168 |
169 // The following test case makes sure IconUtil::CreateHICONFromSkBitmap fails | 169 // The following test case makes sure IconUtil::CreateHICONFromSkBitmap fails |
170 // gracefully when called with invalid input parameters. | 170 // gracefully when called with invalid input parameters. |
171 TEST_F(IconUtilTest, TestBitmapToIconInvalidParameters) { | 171 TEST_F(IconUtilTest, TestBitmapToIconInvalidParameters) { |
172 ScopedHICON icon; | 172 ScopedHICON icon; |
173 scoped_ptr<SkBitmap> bitmap; | 173 std::unique_ptr<SkBitmap> bitmap; |
174 | 174 |
175 // Wrong bitmap format. | 175 // Wrong bitmap format. |
176 bitmap.reset(new SkBitmap); | 176 bitmap.reset(new SkBitmap); |
177 ASSERT_NE(bitmap.get(), static_cast<SkBitmap*>(NULL)); | 177 ASSERT_NE(bitmap.get(), static_cast<SkBitmap*>(NULL)); |
178 bitmap->setInfo(SkImageInfo::MakeA8(kSmallIconWidth, kSmallIconHeight)); | 178 bitmap->setInfo(SkImageInfo::MakeA8(kSmallIconWidth, kSmallIconHeight)); |
179 icon = IconUtil::CreateHICONFromSkBitmap(*bitmap); | 179 icon = IconUtil::CreateHICONFromSkBitmap(*bitmap); |
180 EXPECT_FALSE(icon.is_valid()); | 180 EXPECT_FALSE(icon.is_valid()); |
181 | 181 |
182 // Invalid bitmap size. | 182 // Invalid bitmap size. |
183 bitmap.reset(new SkBitmap); | 183 bitmap.reset(new SkBitmap); |
184 ASSERT_NE(bitmap.get(), static_cast<SkBitmap*>(NULL)); | 184 ASSERT_NE(bitmap.get(), static_cast<SkBitmap*>(NULL)); |
185 bitmap->setInfo(SkImageInfo::MakeN32Premul(0, 0)); | 185 bitmap->setInfo(SkImageInfo::MakeN32Premul(0, 0)); |
186 icon = IconUtil::CreateHICONFromSkBitmap(*bitmap); | 186 icon = IconUtil::CreateHICONFromSkBitmap(*bitmap); |
187 EXPECT_FALSE(icon.is_valid()); | 187 EXPECT_FALSE(icon.is_valid()); |
188 | 188 |
189 // Valid bitmap configuration but no pixels allocated. | 189 // Valid bitmap configuration but no pixels allocated. |
190 bitmap.reset(new SkBitmap); | 190 bitmap.reset(new SkBitmap); |
191 ASSERT_NE(bitmap.get(), static_cast<SkBitmap*>(NULL)); | 191 ASSERT_NE(bitmap.get(), static_cast<SkBitmap*>(NULL)); |
192 bitmap->setInfo(SkImageInfo::MakeN32Premul(kSmallIconWidth, | 192 bitmap->setInfo(SkImageInfo::MakeN32Premul(kSmallIconWidth, |
193 kSmallIconHeight)); | 193 kSmallIconHeight)); |
194 icon = IconUtil::CreateHICONFromSkBitmap(*bitmap); | 194 icon = IconUtil::CreateHICONFromSkBitmap(*bitmap); |
195 EXPECT_FALSE(icon.is_valid()); | 195 EXPECT_FALSE(icon.is_valid()); |
196 } | 196 } |
197 | 197 |
198 // The following test case makes sure IconUtil::CreateIconFileFromImageFamily | 198 // The following test case makes sure IconUtil::CreateIconFileFromImageFamily |
199 // fails gracefully when called with invalid input parameters. | 199 // fails gracefully when called with invalid input parameters. |
200 TEST_F(IconUtilTest, TestCreateIconFileInvalidParameters) { | 200 TEST_F(IconUtilTest, TestCreateIconFileInvalidParameters) { |
201 scoped_ptr<SkBitmap> bitmap; | 201 std::unique_ptr<SkBitmap> bitmap; |
202 gfx::ImageFamily image_family; | 202 gfx::ImageFamily image_family; |
203 base::FilePath valid_icon_filename = temp_directory_.path().AppendASCII( | 203 base::FilePath valid_icon_filename = temp_directory_.path().AppendASCII( |
204 kTempIconFilename); | 204 kTempIconFilename); |
205 base::FilePath invalid_icon_filename = temp_directory_.path().AppendASCII( | 205 base::FilePath invalid_icon_filename = temp_directory_.path().AppendASCII( |
206 "<>?.ico"); | 206 "<>?.ico"); |
207 | 207 |
208 // Wrong bitmap format. | 208 // Wrong bitmap format. |
209 bitmap.reset(new SkBitmap); | 209 bitmap.reset(new SkBitmap); |
210 ASSERT_NE(bitmap.get(), static_cast<SkBitmap*>(NULL)); | 210 ASSERT_NE(bitmap.get(), static_cast<SkBitmap*>(NULL)); |
211 // Must allocate pixels or else ImageSkia will ignore the bitmap and just | 211 // Must allocate pixels or else ImageSkia will ignore the bitmap and just |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
264 gfx::ImageFamily image_family; | 264 gfx::ImageFamily image_family; |
265 image_family.Add(gfx::Image()); | 265 image_family.Add(gfx::Image()); |
266 EXPECT_FALSE(IconUtil::CreateIconFileFromImageFamily(image_family, | 266 EXPECT_FALSE(IconUtil::CreateIconFileFromImageFamily(image_family, |
267 icon_filename)); | 267 icon_filename)); |
268 EXPECT_FALSE(base::PathExists(icon_filename)); | 268 EXPECT_FALSE(base::PathExists(icon_filename)); |
269 } | 269 } |
270 | 270 |
271 // This test case makes sure that when we load an icon from disk and convert | 271 // This test case makes sure that when we load an icon from disk and convert |
272 // the HICON into a bitmap, the bitmap has the expected format and dimensions. | 272 // the HICON into a bitmap, the bitmap has the expected format and dimensions. |
273 TEST_F(IconUtilTest, TestCreateSkBitmapFromHICON) { | 273 TEST_F(IconUtilTest, TestCreateSkBitmapFromHICON) { |
274 scoped_ptr<SkBitmap> bitmap; | 274 std::unique_ptr<SkBitmap> bitmap; |
275 base::FilePath small_icon_filename = test_data_directory_.AppendASCII( | 275 base::FilePath small_icon_filename = test_data_directory_.AppendASCII( |
276 kSmallIconName); | 276 kSmallIconName); |
277 gfx::Size small_icon_size(kSmallIconWidth, kSmallIconHeight); | 277 gfx::Size small_icon_size(kSmallIconWidth, kSmallIconHeight); |
278 ScopedHICON small_icon(LoadIconFromFile( | 278 ScopedHICON small_icon(LoadIconFromFile( |
279 small_icon_filename, small_icon_size.width(), small_icon_size.height())); | 279 small_icon_filename, small_icon_size.width(), small_icon_size.height())); |
280 ASSERT_TRUE(small_icon.is_valid()); | 280 ASSERT_TRUE(small_icon.is_valid()); |
281 bitmap.reset( | 281 bitmap.reset( |
282 IconUtil::CreateSkBitmapFromHICON(small_icon.get(), small_icon_size)); | 282 IconUtil::CreateSkBitmapFromHICON(small_icon.get(), small_icon_size)); |
283 ASSERT_NE(bitmap.get(), static_cast<SkBitmap*>(NULL)); | 283 ASSERT_NE(bitmap.get(), static_cast<SkBitmap*>(NULL)); |
284 EXPECT_EQ(bitmap->width(), small_icon_size.width()); | 284 EXPECT_EQ(bitmap->width(), small_icon_size.width()); |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
398 image_family.clear(); | 398 image_family.clear(); |
399 image_family.Add(gfx::Image()); | 399 image_family.Add(gfx::Image()); |
400 image_family.Add(gfx::Image::CreateFrom1xBitmap(CreateBlackSkBitmap(16, 16))); | 400 image_family.Add(gfx::Image::CreateFrom1xBitmap(CreateBlackSkBitmap(16, 16))); |
401 ASSERT_TRUE(IconUtil::CreateIconFileFromImageFamily(image_family, | 401 ASSERT_TRUE(IconUtil::CreateIconFileFromImageFamily(image_family, |
402 icon_filename)); | 402 icon_filename)); |
403 CheckAllIconSizes(icon_filename, 48); | 403 CheckAllIconSizes(icon_filename, 48); |
404 } | 404 } |
405 | 405 |
406 TEST_F(IconUtilTest, TestCreateImageFamilyFromIconResource) { | 406 TEST_F(IconUtilTest, TestCreateImageFamilyFromIconResource) { |
407 HMODULE module = GetModuleHandle(NULL); | 407 HMODULE module = GetModuleHandle(NULL); |
408 scoped_ptr<gfx::ImageFamily> family( | 408 std::unique_ptr<gfx::ImageFamily> family( |
409 IconUtil::CreateImageFamilyFromIconResource(module, IDR_MAINFRAME)); | 409 IconUtil::CreateImageFamilyFromIconResource(module, IDR_MAINFRAME)); |
410 ASSERT_TRUE(family.get()); | 410 ASSERT_TRUE(family.get()); |
411 EXPECT_FALSE(family->empty()); | 411 EXPECT_FALSE(family->empty()); |
412 std::vector<gfx::Image> images; | 412 std::vector<gfx::Image> images; |
413 for (const auto& image : *family) | 413 for (const auto& image : *family) |
414 images.push_back(image); | 414 images.push_back(image); |
415 | 415 |
416 // Assert that the family contains all of the images from the icon resource. | 416 // Assert that the family contains all of the images from the icon resource. |
417 EXPECT_EQ(5u, images.size()); | 417 EXPECT_EQ(5u, images.size()); |
418 EXPECT_EQ(16, images[0].Width()); | 418 EXPECT_EQ(16, images[0].Width()); |
419 EXPECT_EQ(24, images[1].Width()); | 419 EXPECT_EQ(24, images[1].Width()); |
420 EXPECT_EQ(32, images[2].Width()); | 420 EXPECT_EQ(32, images[2].Width()); |
421 EXPECT_EQ(48, images[3].Width()); | 421 EXPECT_EQ(48, images[3].Width()); |
422 EXPECT_EQ(256, images[4].Width()); | 422 EXPECT_EQ(256, images[4].Width()); |
423 } | 423 } |
424 | 424 |
425 // This tests that kNumIconDimensionsUpToMediumSize has the correct value. | 425 // This tests that kNumIconDimensionsUpToMediumSize has the correct value. |
426 TEST_F(IconUtilTest, TestNumIconDimensionsUpToMediumSize) { | 426 TEST_F(IconUtilTest, TestNumIconDimensionsUpToMediumSize) { |
427 ASSERT_LE(IconUtil::kNumIconDimensionsUpToMediumSize, | 427 ASSERT_LE(IconUtil::kNumIconDimensionsUpToMediumSize, |
428 IconUtil::kNumIconDimensions); | 428 IconUtil::kNumIconDimensions); |
429 EXPECT_EQ(IconUtil::kMediumIconSize, | 429 EXPECT_EQ(IconUtil::kMediumIconSize, |
430 IconUtil::kIconDimensions[ | 430 IconUtil::kIconDimensions[ |
431 IconUtil::kNumIconDimensionsUpToMediumSize - 1]); | 431 IconUtil::kNumIconDimensionsUpToMediumSize - 1]); |
432 } | 432 } |
OLD | NEW |