// 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