| Index: ui/aura/image_grid_unittest.cc
|
| diff --git a/ui/aura/image_grid_unittest.cc b/ui/aura/image_grid_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..606a3803dcff462d2730ad0bf4c2d4a5c3b6e9a0
|
| --- /dev/null
|
| +++ b/ui/aura/image_grid_unittest.cc
|
| @@ -0,0 +1,201 @@
|
| +// Copyright (c) 2011 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 "third_party/skia/include/core/SkBitmap.h"
|
| +#include "ui/aura/test/aura_test_base.h"
|
| +#include "ui/aura/image_grid.h"
|
| +#include "ui/gfx/image/image.h"
|
| +
|
| +using aura::internal::ImageGrid;
|
| +
|
| +namespace aura {
|
| +namespace test {
|
| +
|
| +namespace {
|
| +
|
| +// Creates a gfx::Image with the requested dimensions.
|
| +gfx::Image* CreateImage(const gfx::Size& size) {
|
| + SkBitmap* bitmap = new SkBitmap();
|
| + bitmap->setConfig(SkBitmap::kARGB_8888_Config, size.width(), size.height());
|
| + return new gfx::Image(bitmap);
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +typedef AuraTestBase ImageGridTest;
|
| +
|
| +// Test that an ImageGrid's layers are transformed correctly when SetSize() is
|
| +// called.
|
| +TEST_F(ImageGridTest, Basic) {
|
| + // Size of the images around the grid's border.
|
| + const int kBorder = 2;
|
| +
|
| + scoped_ptr<gfx::Image> image_1x1(CreateImage(gfx::Size(1, 1)));
|
| + scoped_ptr<gfx::Image> image_1xB(CreateImage(gfx::Size(1, kBorder)));
|
| + scoped_ptr<gfx::Image> image_Bx1(CreateImage(gfx::Size(kBorder, 1)));
|
| + scoped_ptr<gfx::Image> image_BxB(CreateImage(gfx::Size(kBorder, kBorder)));
|
| +
|
| + ImageGrid grid;
|
| + grid.Init(image_BxB.get(), image_1xB.get(), image_BxB.get(),
|
| + image_Bx1.get(), image_1x1.get(), image_Bx1.get(),
|
| + image_BxB.get(), image_1xB.get(), image_BxB.get());
|
| +
|
| + ImageGrid::TestAPI test_api(&grid);
|
| + ASSERT_TRUE(test_api.top_left_layer() != NULL);
|
| + ASSERT_TRUE(test_api.top_layer() != NULL);
|
| + ASSERT_TRUE(test_api.top_right_layer() != NULL);
|
| + ASSERT_TRUE(test_api.left_layer() != NULL);
|
| + ASSERT_TRUE(test_api.center_layer() != NULL);
|
| + ASSERT_TRUE(test_api.right_layer() != NULL);
|
| + ASSERT_TRUE(test_api.bottom_left_layer() != NULL);
|
| + ASSERT_TRUE(test_api.bottom_layer() != NULL);
|
| + ASSERT_TRUE(test_api.bottom_right_layer() != NULL);
|
| +
|
| + const gfx::Size size(20, 30);
|
| + grid.SetSize(size);
|
| +
|
| + // The top-left layer should be flush with the top-left corner and unscaled.
|
| + EXPECT_EQ(gfx::Rect(0, 0, kBorder, kBorder).ToString(),
|
| + test_api.GetTransformedLayerBounds(
|
| + *test_api.top_left_layer()).ToString());
|
| +
|
| + // The top layer should be flush with the top edge and stretched horizontally
|
| + // between the two top corners.
|
| + EXPECT_EQ(gfx::Rect(
|
| + kBorder, 0, size.width() - 2 * kBorder, kBorder).ToString(),
|
| + test_api.GetTransformedLayerBounds(
|
| + *test_api.top_layer()).ToString());
|
| +
|
| + // The top-right layer should be flush with the top-right corner and unscaled.
|
| + EXPECT_EQ(gfx::Rect(size.width() - kBorder, 0, kBorder, kBorder).ToString(),
|
| + test_api.GetTransformedLayerBounds(
|
| + *test_api.top_right_layer()).ToString());
|
| +
|
| + // The left layer should be flush with the left edge and stretched vertically
|
| + // between the two left corners.
|
| + EXPECT_EQ(gfx::Rect(
|
| + 0, kBorder, kBorder, size.height() - 2 * kBorder).ToString(),
|
| + test_api.GetTransformedLayerBounds(
|
| + *test_api.left_layer()).ToString());
|
| +
|
| + // The center layer should fill the space in the middle of the grid.
|
| + EXPECT_EQ(gfx::Rect(
|
| + kBorder, kBorder, size.width() - 2 * kBorder,
|
| + size.height() - 2 * kBorder).ToString(),
|
| + test_api.GetTransformedLayerBounds(
|
| + *test_api.center_layer()).ToString());
|
| +
|
| + // The right layer should be flush with the right edge and stretched
|
| + // vertically between the two right corners.
|
| + EXPECT_EQ(gfx::Rect(
|
| + size.width() - kBorder, kBorder,
|
| + kBorder, size.height() - 2 * kBorder).ToString(),
|
| + test_api.GetTransformedLayerBounds(
|
| + *test_api.right_layer()).ToString());
|
| +
|
| + // The bottom-left layer should be flush with the bottom-left corner and
|
| + // unscaled.
|
| + EXPECT_EQ(gfx::Rect(0, size.height() - kBorder, kBorder, kBorder).ToString(),
|
| + test_api.GetTransformedLayerBounds(
|
| + *test_api.bottom_left_layer()).ToString());
|
| +
|
| + // The bottom layer should be flush with the bottom edge and stretched
|
| + // horizontally between the two bottom corners.
|
| + EXPECT_EQ(gfx::Rect(
|
| + kBorder, size.height() - kBorder,
|
| + size.width() - 2 * kBorder, kBorder).ToString(),
|
| + test_api.GetTransformedLayerBounds(
|
| + *test_api.bottom_layer()).ToString());
|
| +
|
| + // The bottom-right layer should be flush with the bottom-right corner and
|
| + // unscaled.
|
| + EXPECT_EQ(gfx::Rect(
|
| + size.width() - kBorder, size.height() - kBorder,
|
| + kBorder, kBorder).ToString(),
|
| + test_api.GetTransformedLayerBounds(
|
| + *test_api.bottom_right_layer()).ToString());
|
| +}
|
| +
|
| +// Check that we don't crash if only a single image is supplied.
|
| +TEST_F(ImageGridTest, SingleImage) {
|
| + const int kBorder = 1;
|
| + scoped_ptr<gfx::Image> image(CreateImage(gfx::Size(kBorder, kBorder)));
|
| +
|
| + ImageGrid grid;
|
| + grid.Init(NULL, image.get(), NULL,
|
| + NULL, NULL, NULL,
|
| + NULL, NULL, NULL);
|
| +
|
| + ImageGrid::TestAPI test_api(&grid);
|
| + EXPECT_TRUE(test_api.top_left_layer() == NULL);
|
| + ASSERT_TRUE(test_api.top_layer() != NULL);
|
| + EXPECT_TRUE(test_api.top_right_layer() == NULL);
|
| + EXPECT_TRUE(test_api.left_layer() == NULL);
|
| + EXPECT_TRUE(test_api.center_layer() == NULL);
|
| + EXPECT_TRUE(test_api.right_layer() == NULL);
|
| + EXPECT_TRUE(test_api.bottom_left_layer() == NULL);
|
| + EXPECT_TRUE(test_api.bottom_layer() == NULL);
|
| + EXPECT_TRUE(test_api.bottom_right_layer() == NULL);
|
| +
|
| + const gfx::Size kSize(10, 10);
|
| + grid.SetSize(kSize);
|
| +
|
| + // The top layer should be scaled horizontally across the entire width, but it
|
| + // shouldn't be scaled vertically.
|
| + EXPECT_EQ(gfx::Rect(0, 0, kSize.width(), kBorder).ToString(),
|
| + test_api.GetTransformedLayerBounds(
|
| + *test_api.top_layer()).ToString());
|
| +}
|
| +
|
| +// Test that side (top, left, right, bottom) layers that are narrower than their
|
| +// adjacent corner layers stay pinned to the outside edges instead of getting
|
| +// moved inwards or scaled. This exercises the scenario used for shadows.
|
| +TEST_F(ImageGridTest, SmallerSides) {
|
| + const int kCorner = 2;
|
| + const int kEdge = 1;
|
| +
|
| + scoped_ptr<gfx::Image> top_left_image(
|
| + CreateImage(gfx::Size(kCorner, kCorner)));
|
| + scoped_ptr<gfx::Image> top_image(CreateImage(gfx::Size(kEdge, kEdge)));
|
| + scoped_ptr<gfx::Image> top_right_image(
|
| + CreateImage(gfx::Size(kCorner, kCorner)));
|
| + scoped_ptr<gfx::Image> left_image(CreateImage(gfx::Size(kEdge, kEdge)));
|
| + scoped_ptr<gfx::Image> right_image(CreateImage(gfx::Size(kEdge, kEdge)));
|
| +
|
| + ImageGrid grid;
|
| + grid.Init(top_left_image.get(), top_image.get(), top_right_image.get(),
|
| + left_image.get(), NULL, right_image.get(),
|
| + NULL, NULL, NULL);
|
| + ImageGrid::TestAPI test_api(&grid);
|
| +
|
| + const gfx::Size kSize(20, 30);
|
| + grid.SetSize(kSize);
|
| +
|
| + // The top layer should be flush with the top edge and stretched horizontally
|
| + // between the two top corners.
|
| + EXPECT_EQ(gfx::Rect(
|
| + kCorner, 0, kSize.width() - 2 * kCorner, kEdge).ToString(),
|
| + test_api.GetTransformedLayerBounds(
|
| + *test_api.top_layer()).ToString());
|
| +
|
| +
|
| + // The left layer should be flush with the left edge and stretched vertically
|
| + // between the top left corner and the bottom.
|
| + EXPECT_EQ(gfx::Rect(
|
| + 0, kCorner, kEdge, kSize.height() - kCorner).ToString(),
|
| + test_api.GetTransformedLayerBounds(
|
| + *test_api.left_layer()).ToString());
|
| +
|
| + // The right layer should be flush with the right edge and stretched
|
| + // vertically between the top right corner and the bottom.
|
| + EXPECT_EQ(gfx::Rect(
|
| + kSize.width() - kEdge, kCorner,
|
| + kEdge, kSize.height() - kCorner).ToString(),
|
| + test_api.GetTransformedLayerBounds(
|
| + *test_api.right_layer()).ToString());
|
| +}
|
| +
|
| +} // namespace test
|
| +} // namespace aura
|
|
|