| // Copyright (c) 2012 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 "ui/views/bubble/bubble_border.h" |
| |
| #include "ui/views/test/views_test_base.h" |
| |
| namespace views { |
| |
| typedef ViewsTestBase BubbleBorderTest; |
| |
| TEST_F(BubbleBorderTest, GetMirroredArrow) { |
| // Horizontal mirroring. |
| EXPECT_EQ(BubbleBorder::TOP_RIGHT, |
| BubbleBorder::horizontal_mirror(BubbleBorder::TOP_LEFT)); |
| EXPECT_EQ(BubbleBorder::TOP_LEFT, |
| BubbleBorder::horizontal_mirror(BubbleBorder::TOP_RIGHT)); |
| |
| EXPECT_EQ(BubbleBorder::BOTTOM_RIGHT, |
| BubbleBorder::horizontal_mirror(BubbleBorder::BOTTOM_LEFT)); |
| EXPECT_EQ(BubbleBorder::BOTTOM_LEFT, |
| BubbleBorder::horizontal_mirror(BubbleBorder::BOTTOM_RIGHT)); |
| |
| EXPECT_EQ(BubbleBorder::RIGHT_TOP, |
| BubbleBorder::horizontal_mirror(BubbleBorder::LEFT_TOP)); |
| EXPECT_EQ(BubbleBorder::LEFT_TOP, |
| BubbleBorder::horizontal_mirror(BubbleBorder::RIGHT_TOP)); |
| |
| EXPECT_EQ(BubbleBorder::RIGHT_BOTTOM, |
| BubbleBorder::horizontal_mirror(BubbleBorder::LEFT_BOTTOM)); |
| EXPECT_EQ(BubbleBorder::LEFT_BOTTOM, |
| BubbleBorder::horizontal_mirror(BubbleBorder::RIGHT_BOTTOM)); |
| |
| EXPECT_EQ(BubbleBorder::TOP_CENTER, |
| BubbleBorder::horizontal_mirror(BubbleBorder::TOP_CENTER)); |
| EXPECT_EQ(BubbleBorder::BOTTOM_CENTER, |
| BubbleBorder::horizontal_mirror(BubbleBorder::BOTTOM_CENTER)); |
| |
| EXPECT_EQ(BubbleBorder::RIGHT_CENTER, |
| BubbleBorder::horizontal_mirror(BubbleBorder::LEFT_CENTER)); |
| EXPECT_EQ(BubbleBorder::LEFT_CENTER, |
| BubbleBorder::horizontal_mirror(BubbleBorder::RIGHT_CENTER)); |
| |
| EXPECT_EQ(BubbleBorder::NONE, |
| BubbleBorder::horizontal_mirror(BubbleBorder::NONE)); |
| EXPECT_EQ(BubbleBorder::FLOAT, |
| BubbleBorder::horizontal_mirror(BubbleBorder::FLOAT)); |
| |
| // Vertical mirroring. |
| EXPECT_EQ(BubbleBorder::BOTTOM_LEFT, |
| BubbleBorder::vertical_mirror(BubbleBorder::TOP_LEFT)); |
| EXPECT_EQ(BubbleBorder::BOTTOM_RIGHT, |
| BubbleBorder::vertical_mirror(BubbleBorder::TOP_RIGHT)); |
| |
| EXPECT_EQ(BubbleBorder::TOP_LEFT, |
| BubbleBorder::vertical_mirror(BubbleBorder::BOTTOM_LEFT)); |
| EXPECT_EQ(BubbleBorder::TOP_RIGHT, |
| BubbleBorder::vertical_mirror(BubbleBorder::BOTTOM_RIGHT)); |
| |
| EXPECT_EQ(BubbleBorder::LEFT_BOTTOM, |
| BubbleBorder::vertical_mirror(BubbleBorder::LEFT_TOP)); |
| EXPECT_EQ(BubbleBorder::RIGHT_BOTTOM, |
| BubbleBorder::vertical_mirror(BubbleBorder::RIGHT_TOP)); |
| |
| EXPECT_EQ(BubbleBorder::LEFT_TOP, |
| BubbleBorder::vertical_mirror(BubbleBorder::LEFT_BOTTOM)); |
| EXPECT_EQ(BubbleBorder::RIGHT_TOP, |
| BubbleBorder::vertical_mirror(BubbleBorder::RIGHT_BOTTOM)); |
| |
| EXPECT_EQ(BubbleBorder::BOTTOM_CENTER, |
| BubbleBorder::vertical_mirror(BubbleBorder::TOP_CENTER)); |
| EXPECT_EQ(BubbleBorder::TOP_CENTER, |
| BubbleBorder::vertical_mirror(BubbleBorder::BOTTOM_CENTER)); |
| |
| EXPECT_EQ(BubbleBorder::LEFT_CENTER, |
| BubbleBorder::vertical_mirror(BubbleBorder::LEFT_CENTER)); |
| EXPECT_EQ(BubbleBorder::RIGHT_CENTER, |
| BubbleBorder::vertical_mirror(BubbleBorder::RIGHT_CENTER)); |
| |
| EXPECT_EQ(BubbleBorder::NONE, |
| BubbleBorder::vertical_mirror(BubbleBorder::NONE)); |
| EXPECT_EQ(BubbleBorder::FLOAT, |
| BubbleBorder::vertical_mirror(BubbleBorder::FLOAT)); |
| } |
| |
| TEST_F(BubbleBorderTest, HasArrow) { |
| EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::TOP_LEFT)); |
| EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::TOP_RIGHT)); |
| |
| EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::BOTTOM_LEFT)); |
| EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::BOTTOM_RIGHT)); |
| |
| EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::LEFT_TOP)); |
| EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::RIGHT_TOP)); |
| |
| EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::LEFT_BOTTOM)); |
| EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::RIGHT_BOTTOM)); |
| |
| EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::TOP_CENTER)); |
| EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::BOTTOM_CENTER)); |
| |
| EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::LEFT_CENTER)); |
| EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::RIGHT_CENTER)); |
| |
| EXPECT_FALSE(BubbleBorder::has_arrow(BubbleBorder::NONE)); |
| EXPECT_FALSE(BubbleBorder::has_arrow(BubbleBorder::FLOAT)); |
| } |
| |
| TEST_F(BubbleBorderTest, IsArrowOnLeft) { |
| EXPECT_TRUE(BubbleBorder::is_arrow_on_left(BubbleBorder::TOP_LEFT)); |
| EXPECT_FALSE(BubbleBorder::is_arrow_on_left(BubbleBorder::TOP_RIGHT)); |
| |
| EXPECT_TRUE(BubbleBorder::is_arrow_on_left(BubbleBorder::BOTTOM_LEFT)); |
| EXPECT_FALSE(BubbleBorder::is_arrow_on_left(BubbleBorder::BOTTOM_RIGHT)); |
| |
| EXPECT_TRUE(BubbleBorder::is_arrow_on_left(BubbleBorder::LEFT_TOP)); |
| EXPECT_FALSE(BubbleBorder::is_arrow_on_left(BubbleBorder::RIGHT_TOP)); |
| |
| EXPECT_TRUE(BubbleBorder::is_arrow_on_left(BubbleBorder::LEFT_BOTTOM)); |
| EXPECT_FALSE(BubbleBorder::is_arrow_on_left(BubbleBorder::RIGHT_BOTTOM)); |
| |
| EXPECT_FALSE(BubbleBorder::is_arrow_on_left(BubbleBorder::TOP_CENTER)); |
| EXPECT_FALSE(BubbleBorder::is_arrow_on_left(BubbleBorder::BOTTOM_CENTER)); |
| |
| EXPECT_TRUE(BubbleBorder::is_arrow_on_left(BubbleBorder::LEFT_CENTER)); |
| EXPECT_FALSE(BubbleBorder::is_arrow_on_left(BubbleBorder::RIGHT_CENTER)); |
| |
| EXPECT_FALSE(BubbleBorder::is_arrow_on_left(BubbleBorder::NONE)); |
| EXPECT_FALSE(BubbleBorder::is_arrow_on_left(BubbleBorder::FLOAT)); |
| } |
| |
| TEST_F(BubbleBorderTest, IsArrowOnTop) { |
| EXPECT_TRUE(BubbleBorder::is_arrow_on_top(BubbleBorder::TOP_LEFT)); |
| EXPECT_TRUE(BubbleBorder::is_arrow_on_top(BubbleBorder::TOP_RIGHT)); |
| |
| EXPECT_FALSE(BubbleBorder::is_arrow_on_top(BubbleBorder::BOTTOM_LEFT)); |
| EXPECT_FALSE(BubbleBorder::is_arrow_on_top(BubbleBorder::BOTTOM_RIGHT)); |
| |
| EXPECT_TRUE(BubbleBorder::is_arrow_on_top(BubbleBorder::LEFT_TOP)); |
| EXPECT_TRUE(BubbleBorder::is_arrow_on_top(BubbleBorder::RIGHT_TOP)); |
| |
| EXPECT_FALSE(BubbleBorder::is_arrow_on_top(BubbleBorder::LEFT_BOTTOM)); |
| EXPECT_FALSE(BubbleBorder::is_arrow_on_top(BubbleBorder::RIGHT_BOTTOM)); |
| |
| EXPECT_TRUE(BubbleBorder::is_arrow_on_top(BubbleBorder::TOP_CENTER)); |
| EXPECT_FALSE(BubbleBorder::is_arrow_on_top(BubbleBorder::BOTTOM_CENTER)); |
| |
| EXPECT_FALSE(BubbleBorder::is_arrow_on_top(BubbleBorder::LEFT_CENTER)); |
| EXPECT_FALSE(BubbleBorder::is_arrow_on_top(BubbleBorder::RIGHT_CENTER)); |
| |
| EXPECT_FALSE(BubbleBorder::is_arrow_on_top(BubbleBorder::NONE)); |
| EXPECT_FALSE(BubbleBorder::is_arrow_on_top(BubbleBorder::FLOAT)); |
| } |
| |
| TEST_F(BubbleBorderTest, IsArrowOnHorizontal) { |
| EXPECT_TRUE(BubbleBorder::is_arrow_on_horizontal(BubbleBorder::TOP_LEFT)); |
| EXPECT_TRUE(BubbleBorder::is_arrow_on_horizontal(BubbleBorder::TOP_RIGHT)); |
| |
| EXPECT_TRUE(BubbleBorder::is_arrow_on_horizontal(BubbleBorder::BOTTOM_LEFT)); |
| EXPECT_TRUE(BubbleBorder::is_arrow_on_horizontal(BubbleBorder::BOTTOM_RIGHT)); |
| |
| EXPECT_FALSE(BubbleBorder::is_arrow_on_horizontal(BubbleBorder::LEFT_TOP)); |
| EXPECT_FALSE(BubbleBorder::is_arrow_on_horizontal(BubbleBorder::RIGHT_TOP)); |
| |
| EXPECT_FALSE(BubbleBorder::is_arrow_on_horizontal(BubbleBorder::LEFT_BOTTOM)); |
| EXPECT_FALSE( |
| BubbleBorder::is_arrow_on_horizontal(BubbleBorder::RIGHT_BOTTOM)); |
| |
| EXPECT_TRUE(BubbleBorder::is_arrow_on_horizontal(BubbleBorder::TOP_CENTER)); |
| EXPECT_TRUE( |
| BubbleBorder::is_arrow_on_horizontal(BubbleBorder::BOTTOM_CENTER)); |
| |
| EXPECT_FALSE(BubbleBorder::is_arrow_on_horizontal(BubbleBorder::LEFT_CENTER)); |
| EXPECT_FALSE( |
| BubbleBorder::is_arrow_on_horizontal(BubbleBorder::RIGHT_CENTER)); |
| |
| EXPECT_FALSE(BubbleBorder::is_arrow_on_horizontal(BubbleBorder::NONE)); |
| EXPECT_FALSE(BubbleBorder::is_arrow_on_horizontal(BubbleBorder::FLOAT)); |
| } |
| |
| TEST_F(BubbleBorderTest, IsArrowAtCenter) { |
| EXPECT_FALSE(BubbleBorder::is_arrow_at_center(BubbleBorder::TOP_LEFT)); |
| EXPECT_FALSE(BubbleBorder::is_arrow_at_center(BubbleBorder::TOP_RIGHT)); |
| |
| EXPECT_FALSE(BubbleBorder::is_arrow_at_center(BubbleBorder::BOTTOM_LEFT)); |
| EXPECT_FALSE(BubbleBorder::is_arrow_at_center(BubbleBorder::BOTTOM_RIGHT)); |
| |
| EXPECT_FALSE(BubbleBorder::is_arrow_at_center(BubbleBorder::LEFT_TOP)); |
| EXPECT_FALSE(BubbleBorder::is_arrow_at_center(BubbleBorder::RIGHT_TOP)); |
| |
| EXPECT_FALSE(BubbleBorder::is_arrow_at_center(BubbleBorder::LEFT_BOTTOM)); |
| EXPECT_FALSE(BubbleBorder::is_arrow_at_center(BubbleBorder::RIGHT_BOTTOM)); |
| |
| EXPECT_TRUE(BubbleBorder::is_arrow_at_center(BubbleBorder::TOP_CENTER)); |
| EXPECT_TRUE(BubbleBorder::is_arrow_at_center(BubbleBorder::BOTTOM_CENTER)); |
| |
| EXPECT_TRUE(BubbleBorder::is_arrow_at_center(BubbleBorder::LEFT_CENTER)); |
| EXPECT_TRUE(BubbleBorder::is_arrow_at_center(BubbleBorder::RIGHT_CENTER)); |
| |
| EXPECT_FALSE(BubbleBorder::is_arrow_at_center(BubbleBorder::NONE)); |
| EXPECT_FALSE(BubbleBorder::is_arrow_at_center(BubbleBorder::FLOAT)); |
| } |
| |
| TEST_F(BubbleBorderTest, TestMinimalSize) { |
| gfx::Rect anchor = gfx::Rect(100, 100, 20, 20); |
| gfx::Size contents = gfx::Size(10, 10); |
| BubbleBorder b1(BubbleBorder::RIGHT_TOP, BubbleBorder::NO_SHADOW, 0); |
| |
| // The height should be much bigger then the requested size + border and |
| // padding since it needs to be able to include the tip bitmap. |
| gfx::Rect visible_tip_1 = b1.GetBounds(anchor, contents); |
| EXPECT_GE(visible_tip_1.height(), 30); |
| EXPECT_LE(visible_tip_1.width(), 30); |
| |
| // With the tip being invisible the height should now be much smaller. |
| b1.set_paint_arrow(BubbleBorder::PAINT_TRANSPARENT); |
| gfx::Rect invisible_tip_1 = b1.GetBounds(anchor, contents); |
| EXPECT_LE(invisible_tip_1.height(), 30); |
| EXPECT_LE(invisible_tip_1.width(), 30); |
| |
| // When the orientation of the tip changes, the above mentioned tests need to |
| // be reverse for width and height. |
| BubbleBorder b2(BubbleBorder::TOP_RIGHT, BubbleBorder::NO_SHADOW, 0); |
| |
| // The width should be much bigger then the requested size + border and |
| // padding since it needs to be able to include the tip bitmap. |
| gfx::Rect visible_tip_2 = b2.GetBounds(anchor, contents); |
| EXPECT_GE(visible_tip_2.width(), 30); |
| EXPECT_LE(visible_tip_2.height(), 30); |
| |
| // With the tip being invisible the width should now be much smaller. |
| b2.set_paint_arrow(BubbleBorder::PAINT_TRANSPARENT); |
| gfx::Rect invisible_tip_2 = b2.GetBounds(anchor, contents); |
| EXPECT_LE(invisible_tip_2.width(), 30); |
| EXPECT_LE(invisible_tip_2.height(), 30); |
| } |
| |
| |
| } // namespace views |