| Index: ui/gfx/icon_family_unittest.cc
|
| diff --git a/ui/gfx/icon_family_unittest.cc b/ui/gfx/icon_family_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..5843e333a8b4a2ab020b7cbde909757d54b379fe
|
| --- /dev/null
|
| +++ b/ui/gfx/icon_family_unittest.cc
|
| @@ -0,0 +1,134 @@
|
| +// Copyright 2013 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 "testing/gtest/include/gtest/gtest.h"
|
| +#include "ui/gfx/icon_family.h"
|
| +#include "ui/gfx/image/image_unittest_util.h"
|
| +
|
| +namespace {
|
| +
|
| +namespace gt = gfx::test;
|
| +
|
| +// Tests that |image_skia| != NULL, and has the given width and height.
|
| +void ExpectImageSkiaNonNullAndSize(const gfx::ImageSkia* image_skia, int width,
|
| + int height) {
|
| + EXPECT_NE(static_cast<gfx::ImageSkia*>(NULL), image_skia);
|
| + EXPECT_EQ(width, image_skia->width());
|
| + EXPECT_EQ(height, image_skia->height());
|
| +}
|
| +
|
| +class IconFamilyTest : public testing::Test {
|
| + public:
|
| + // Construct an IconFamily. Implicitly tests Add and Empty.
|
| + virtual void SetUp() {
|
| + EXPECT_TRUE(icon_family.empty());
|
| +
|
| + // Aspect ratio 1:1.
|
| + icon_family.Add(gt::CreateImageSkia(32, 32));
|
| + EXPECT_FALSE(icon_family.empty());
|
| + icon_family.Add(gt::CreateImageSkia(16, 16));
|
| + icon_family.Add(gt::CreateImageSkia(64, 64));
|
| + // Aspect ratio 1:2.
|
| + icon_family.Add(gt::CreateImageSkia(3, 6));
|
| + icon_family.Add(gt::CreateImageSkia(12, 24));
|
| + // Aspect ratio 2:1.
|
| + icon_family.Add(gt::CreateImageSkia(256, 128));
|
| + icon_family.Add(gt::CreateImageSkia(128, 64));
|
| +
|
| + EXPECT_FALSE(icon_family.empty());
|
| + }
|
| +
|
| + gfx::IconFamily icon_family;
|
| +};
|
| +
|
| +TEST_F(IconFamilyTest, Clear) {
|
| + icon_family.clear();
|
| + EXPECT_TRUE(icon_family.empty());
|
| +}
|
| +
|
| +// Tests iteration over an IconFamily.
|
| +TEST_F(IconFamilyTest, Iteration) {
|
| + gfx::IconFamily::const_iterator it = icon_family.begin();
|
| + gfx::IconFamily::const_iterator end = icon_family.end();
|
| +
|
| + // Expect iteration in order of aspect ratio (from thinnest to widest), then
|
| + // size.
|
| + EXPECT_TRUE(it != end);
|
| + EXPECT_EQ(gfx::Size(3, 6), it->size());
|
| + ++it;
|
| + EXPECT_TRUE(it != end);
|
| + EXPECT_EQ(gfx::Size(12, 24), it->size());
|
| + it++; // Test post-increment.
|
| + EXPECT_TRUE(it != end);
|
| + EXPECT_EQ(gfx::Size(16, 16), it->size());
|
| + ++it;
|
| + EXPECT_TRUE(it != end);
|
| + EXPECT_EQ(gfx::Size(32, 32), it->size());
|
| + --it; // Test decrement
|
| + EXPECT_TRUE(it != end);
|
| + EXPECT_EQ(gfx::Size(16, 16), it->size());
|
| + ++it;
|
| + ++it;
|
| + EXPECT_TRUE(it != end);
|
| + EXPECT_EQ(gfx::Size(64, 64), (*it).size()); // Test operator*.
|
| + ++it;
|
| + EXPECT_TRUE(it != end);
|
| + EXPECT_EQ(gfx::Size(128, 64), it->size());
|
| + ++it;
|
| + EXPECT_TRUE(it != end);
|
| + EXPECT_EQ(gfx::Size(256, 128), it->size());
|
| + ++it;
|
| +
|
| + EXPECT_TRUE(it == end);
|
| +}
|
| +
|
| +TEST_F(IconFamilyTest, Get) {
|
| + // Get on an empty family.
|
| + gfx::IconFamily empty_family;
|
| + EXPECT_TRUE(empty_family.empty());
|
| + EXPECT_EQ(static_cast<gfx::ImageSkia*>(NULL), empty_family.Get(32, 32));
|
| + EXPECT_EQ(static_cast<gfx::ImageSkia*>(NULL), empty_family.Get(0, 32));
|
| + EXPECT_EQ(static_cast<gfx::ImageSkia*>(NULL), empty_family.Get(32, 0));
|
| +
|
| + // Get various aspect ratios and sizes on the sample family.
|
| + // Exact match.
|
| + ExpectImageSkiaNonNullAndSize(icon_family.Get(32, 32), 32, 32);
|
| + // Same aspect ratio, slightly smaller.
|
| + ExpectImageSkiaNonNullAndSize(icon_family.Get(31, 31), 32, 32);
|
| + // Same aspect ratio, much smaller.
|
| + ExpectImageSkiaNonNullAndSize(icon_family.Get(17, 17), 32, 32);
|
| + // Exact match.
|
| + ExpectImageSkiaNonNullAndSize(icon_family.Get(16, 16), 16, 16);
|
| + // Smaller than any image.
|
| + ExpectImageSkiaNonNullAndSize(icon_family.Get(3, 3), 16, 16);
|
| + // Larger than any image.
|
| + ExpectImageSkiaNonNullAndSize(icon_family.Get(512, 512), 64, 64);
|
| + // Wider aspect ratio.
|
| + ExpectImageSkiaNonNullAndSize(icon_family.Get(32, 16), 128, 64);
|
| + ExpectImageSkiaNonNullAndSize(icon_family.Get(130, 65), 256, 128);
|
| + // Thinner aspect ratio.
|
| + ExpectImageSkiaNonNullAndSize(icon_family.Get(16, 32), 12, 24);
|
| + // TODO(mgiuca): No idea why this fails.
|
| + //ExpectImageSkiaNonNullAndSize(icon_family.Get(2, 4), 3, 6);
|
| + // TODO(mgiuca): In between two aspect ratios. Test the border cases and
|
| + // possibly change the calculation to use a ratio instead of difference.
|
| + // TODO(mgiuca): An aspect ratio thinner than 1:2. (Smaller, equal, greater
|
| + // than all.)
|
| + // TODO(mgiuca): An aspect ratio wider than 2:1. (Smaller, equal, greater than
|
| + // all.)
|
| + // Get the smallest square image.
|
| + ExpectImageSkiaNonNullAndSize(icon_family.Get(0, 0), 16, 16);
|
| + // Get the image >=0x5 with the thinnest aspect ratio.
|
| + // TODO(mgiuca): Currently fails because the width is <5.
|
| + //ExpectImageSkiaNonNullAndSize(icon_family.Get(0, 5), 3, 6);
|
| + // Get the image >=0x7 with the thinnest aspect ratio.
|
| + ExpectImageSkiaNonNullAndSize(icon_family.Get(0, 7), 12, 24);
|
| + // Get the image >=127x0 with the widest aspect ratio.
|
| + // TODO(mgiuca): Currently fails because the height is <127.
|
| + //ExpectImageSkiaNonNullAndSize(icon_family.Get(127, 0), 128, 64);
|
| + // Get the image >=129x0 with the widest aspect ratio.
|
| + ExpectImageSkiaNonNullAndSize(icon_family.Get(129, 0), 256, 128);
|
| +}
|
| +
|
| +} // namespace
|
|
|