Home | History | Annotate | Download | only in bubble
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "ui/views/bubble/bubble_border.h"
      6 
      7 #include "ui/views/test/views_test_base.h"
      8 
      9 namespace views {
     10 
     11 typedef ViewsTestBase BubbleBorderTest;
     12 
     13 TEST_F(BubbleBorderTest, GetMirroredArrow) {
     14   // Horizontal mirroring.
     15   EXPECT_EQ(BubbleBorder::TOP_RIGHT,
     16             BubbleBorder::horizontal_mirror(BubbleBorder::TOP_LEFT));
     17   EXPECT_EQ(BubbleBorder::TOP_LEFT,
     18             BubbleBorder::horizontal_mirror(BubbleBorder::TOP_RIGHT));
     19 
     20   EXPECT_EQ(BubbleBorder::BOTTOM_RIGHT,
     21             BubbleBorder::horizontal_mirror(BubbleBorder::BOTTOM_LEFT));
     22   EXPECT_EQ(BubbleBorder::BOTTOM_LEFT,
     23             BubbleBorder::horizontal_mirror(BubbleBorder::BOTTOM_RIGHT));
     24 
     25   EXPECT_EQ(BubbleBorder::RIGHT_TOP,
     26             BubbleBorder::horizontal_mirror(BubbleBorder::LEFT_TOP));
     27   EXPECT_EQ(BubbleBorder::LEFT_TOP,
     28             BubbleBorder::horizontal_mirror(BubbleBorder::RIGHT_TOP));
     29 
     30   EXPECT_EQ(BubbleBorder::RIGHT_BOTTOM,
     31             BubbleBorder::horizontal_mirror(BubbleBorder::LEFT_BOTTOM));
     32   EXPECT_EQ(BubbleBorder::LEFT_BOTTOM,
     33             BubbleBorder::horizontal_mirror(BubbleBorder::RIGHT_BOTTOM));
     34 
     35   EXPECT_EQ(BubbleBorder::TOP_CENTER,
     36             BubbleBorder::horizontal_mirror(BubbleBorder::TOP_CENTER));
     37   EXPECT_EQ(BubbleBorder::BOTTOM_CENTER,
     38             BubbleBorder::horizontal_mirror(BubbleBorder::BOTTOM_CENTER));
     39 
     40   EXPECT_EQ(BubbleBorder::RIGHT_CENTER,
     41             BubbleBorder::horizontal_mirror(BubbleBorder::LEFT_CENTER));
     42   EXPECT_EQ(BubbleBorder::LEFT_CENTER,
     43             BubbleBorder::horizontal_mirror(BubbleBorder::RIGHT_CENTER));
     44 
     45   EXPECT_EQ(BubbleBorder::NONE,
     46             BubbleBorder::horizontal_mirror(BubbleBorder::NONE));
     47   EXPECT_EQ(BubbleBorder::FLOAT,
     48             BubbleBorder::horizontal_mirror(BubbleBorder::FLOAT));
     49 
     50   // Vertical mirroring.
     51   EXPECT_EQ(BubbleBorder::BOTTOM_LEFT,
     52             BubbleBorder::vertical_mirror(BubbleBorder::TOP_LEFT));
     53   EXPECT_EQ(BubbleBorder::BOTTOM_RIGHT,
     54             BubbleBorder::vertical_mirror(BubbleBorder::TOP_RIGHT));
     55 
     56   EXPECT_EQ(BubbleBorder::TOP_LEFT,
     57             BubbleBorder::vertical_mirror(BubbleBorder::BOTTOM_LEFT));
     58   EXPECT_EQ(BubbleBorder::TOP_RIGHT,
     59             BubbleBorder::vertical_mirror(BubbleBorder::BOTTOM_RIGHT));
     60 
     61   EXPECT_EQ(BubbleBorder::LEFT_BOTTOM,
     62             BubbleBorder::vertical_mirror(BubbleBorder::LEFT_TOP));
     63   EXPECT_EQ(BubbleBorder::RIGHT_BOTTOM,
     64             BubbleBorder::vertical_mirror(BubbleBorder::RIGHT_TOP));
     65 
     66   EXPECT_EQ(BubbleBorder::LEFT_TOP,
     67             BubbleBorder::vertical_mirror(BubbleBorder::LEFT_BOTTOM));
     68   EXPECT_EQ(BubbleBorder::RIGHT_TOP,
     69             BubbleBorder::vertical_mirror(BubbleBorder::RIGHT_BOTTOM));
     70 
     71   EXPECT_EQ(BubbleBorder::BOTTOM_CENTER,
     72             BubbleBorder::vertical_mirror(BubbleBorder::TOP_CENTER));
     73   EXPECT_EQ(BubbleBorder::TOP_CENTER,
     74             BubbleBorder::vertical_mirror(BubbleBorder::BOTTOM_CENTER));
     75 
     76   EXPECT_EQ(BubbleBorder::LEFT_CENTER,
     77             BubbleBorder::vertical_mirror(BubbleBorder::LEFT_CENTER));
     78   EXPECT_EQ(BubbleBorder::RIGHT_CENTER,
     79             BubbleBorder::vertical_mirror(BubbleBorder::RIGHT_CENTER));
     80 
     81   EXPECT_EQ(BubbleBorder::NONE,
     82             BubbleBorder::vertical_mirror(BubbleBorder::NONE));
     83   EXPECT_EQ(BubbleBorder::FLOAT,
     84             BubbleBorder::vertical_mirror(BubbleBorder::FLOAT));
     85 }
     86 
     87 TEST_F(BubbleBorderTest, HasArrow) {
     88   EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::TOP_LEFT));
     89   EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::TOP_RIGHT));
     90 
     91   EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::BOTTOM_LEFT));
     92   EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::BOTTOM_RIGHT));
     93 
     94   EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::LEFT_TOP));
     95   EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::RIGHT_TOP));
     96 
     97   EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::LEFT_BOTTOM));
     98   EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::RIGHT_BOTTOM));
     99 
    100   EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::TOP_CENTER));
    101   EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::BOTTOM_CENTER));
    102 
    103   EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::LEFT_CENTER));
    104   EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::RIGHT_CENTER));
    105 
    106   EXPECT_FALSE(BubbleBorder::has_arrow(BubbleBorder::NONE));
    107   EXPECT_FALSE(BubbleBorder::has_arrow(BubbleBorder::FLOAT));
    108 }
    109 
    110 TEST_F(BubbleBorderTest, IsArrowOnLeft) {
    111   EXPECT_TRUE(BubbleBorder::is_arrow_on_left(BubbleBorder::TOP_LEFT));
    112   EXPECT_FALSE(BubbleBorder::is_arrow_on_left(BubbleBorder::TOP_RIGHT));
    113 
    114   EXPECT_TRUE(BubbleBorder::is_arrow_on_left(BubbleBorder::BOTTOM_LEFT));
    115   EXPECT_FALSE(BubbleBorder::is_arrow_on_left(BubbleBorder::BOTTOM_RIGHT));
    116 
    117   EXPECT_TRUE(BubbleBorder::is_arrow_on_left(BubbleBorder::LEFT_TOP));
    118   EXPECT_FALSE(BubbleBorder::is_arrow_on_left(BubbleBorder::RIGHT_TOP));
    119 
    120   EXPECT_TRUE(BubbleBorder::is_arrow_on_left(BubbleBorder::LEFT_BOTTOM));
    121   EXPECT_FALSE(BubbleBorder::is_arrow_on_left(BubbleBorder::RIGHT_BOTTOM));
    122 
    123   EXPECT_FALSE(BubbleBorder::is_arrow_on_left(BubbleBorder::TOP_CENTER));
    124   EXPECT_FALSE(BubbleBorder::is_arrow_on_left(BubbleBorder::BOTTOM_CENTER));
    125 
    126   EXPECT_TRUE(BubbleBorder::is_arrow_on_left(BubbleBorder::LEFT_CENTER));
    127   EXPECT_FALSE(BubbleBorder::is_arrow_on_left(BubbleBorder::RIGHT_CENTER));
    128 
    129   EXPECT_FALSE(BubbleBorder::is_arrow_on_left(BubbleBorder::NONE));
    130   EXPECT_FALSE(BubbleBorder::is_arrow_on_left(BubbleBorder::FLOAT));
    131 }
    132 
    133 TEST_F(BubbleBorderTest, IsArrowOnTop) {
    134   EXPECT_TRUE(BubbleBorder::is_arrow_on_top(BubbleBorder::TOP_LEFT));
    135   EXPECT_TRUE(BubbleBorder::is_arrow_on_top(BubbleBorder::TOP_RIGHT));
    136 
    137   EXPECT_FALSE(BubbleBorder::is_arrow_on_top(BubbleBorder::BOTTOM_LEFT));
    138   EXPECT_FALSE(BubbleBorder::is_arrow_on_top(BubbleBorder::BOTTOM_RIGHT));
    139 
    140   EXPECT_TRUE(BubbleBorder::is_arrow_on_top(BubbleBorder::LEFT_TOP));
    141   EXPECT_TRUE(BubbleBorder::is_arrow_on_top(BubbleBorder::RIGHT_TOP));
    142 
    143   EXPECT_FALSE(BubbleBorder::is_arrow_on_top(BubbleBorder::LEFT_BOTTOM));
    144   EXPECT_FALSE(BubbleBorder::is_arrow_on_top(BubbleBorder::RIGHT_BOTTOM));
    145 
    146   EXPECT_TRUE(BubbleBorder::is_arrow_on_top(BubbleBorder::TOP_CENTER));
    147   EXPECT_FALSE(BubbleBorder::is_arrow_on_top(BubbleBorder::BOTTOM_CENTER));
    148 
    149   EXPECT_FALSE(BubbleBorder::is_arrow_on_top(BubbleBorder::LEFT_CENTER));
    150   EXPECT_FALSE(BubbleBorder::is_arrow_on_top(BubbleBorder::RIGHT_CENTER));
    151 
    152   EXPECT_FALSE(BubbleBorder::is_arrow_on_top(BubbleBorder::NONE));
    153   EXPECT_FALSE(BubbleBorder::is_arrow_on_top(BubbleBorder::FLOAT));
    154 }
    155 
    156 TEST_F(BubbleBorderTest, IsArrowOnHorizontal) {
    157   EXPECT_TRUE(BubbleBorder::is_arrow_on_horizontal(BubbleBorder::TOP_LEFT));
    158   EXPECT_TRUE(BubbleBorder::is_arrow_on_horizontal(BubbleBorder::TOP_RIGHT));
    159 
    160   EXPECT_TRUE(BubbleBorder::is_arrow_on_horizontal(BubbleBorder::BOTTOM_LEFT));
    161   EXPECT_TRUE(BubbleBorder::is_arrow_on_horizontal(BubbleBorder::BOTTOM_RIGHT));
    162 
    163   EXPECT_FALSE(BubbleBorder::is_arrow_on_horizontal(BubbleBorder::LEFT_TOP));
    164   EXPECT_FALSE(BubbleBorder::is_arrow_on_horizontal(BubbleBorder::RIGHT_TOP));
    165 
    166   EXPECT_FALSE(BubbleBorder::is_arrow_on_horizontal(BubbleBorder::LEFT_BOTTOM));
    167   EXPECT_FALSE(
    168       BubbleBorder::is_arrow_on_horizontal(BubbleBorder::RIGHT_BOTTOM));
    169 
    170   EXPECT_TRUE(BubbleBorder::is_arrow_on_horizontal(BubbleBorder::TOP_CENTER));
    171   EXPECT_TRUE(
    172       BubbleBorder::is_arrow_on_horizontal(BubbleBorder::BOTTOM_CENTER));
    173 
    174   EXPECT_FALSE(BubbleBorder::is_arrow_on_horizontal(BubbleBorder::LEFT_CENTER));
    175   EXPECT_FALSE(
    176       BubbleBorder::is_arrow_on_horizontal(BubbleBorder::RIGHT_CENTER));
    177 
    178   EXPECT_FALSE(BubbleBorder::is_arrow_on_horizontal(BubbleBorder::NONE));
    179   EXPECT_FALSE(BubbleBorder::is_arrow_on_horizontal(BubbleBorder::FLOAT));
    180 }
    181 
    182 TEST_F(BubbleBorderTest, IsArrowAtCenter) {
    183   EXPECT_FALSE(BubbleBorder::is_arrow_at_center(BubbleBorder::TOP_LEFT));
    184   EXPECT_FALSE(BubbleBorder::is_arrow_at_center(BubbleBorder::TOP_RIGHT));
    185 
    186   EXPECT_FALSE(BubbleBorder::is_arrow_at_center(BubbleBorder::BOTTOM_LEFT));
    187   EXPECT_FALSE(BubbleBorder::is_arrow_at_center(BubbleBorder::BOTTOM_RIGHT));
    188 
    189   EXPECT_FALSE(BubbleBorder::is_arrow_at_center(BubbleBorder::LEFT_TOP));
    190   EXPECT_FALSE(BubbleBorder::is_arrow_at_center(BubbleBorder::RIGHT_TOP));
    191 
    192   EXPECT_FALSE(BubbleBorder::is_arrow_at_center(BubbleBorder::LEFT_BOTTOM));
    193   EXPECT_FALSE(BubbleBorder::is_arrow_at_center(BubbleBorder::RIGHT_BOTTOM));
    194 
    195   EXPECT_TRUE(BubbleBorder::is_arrow_at_center(BubbleBorder::TOP_CENTER));
    196   EXPECT_TRUE(BubbleBorder::is_arrow_at_center(BubbleBorder::BOTTOM_CENTER));
    197 
    198   EXPECT_TRUE(BubbleBorder::is_arrow_at_center(BubbleBorder::LEFT_CENTER));
    199   EXPECT_TRUE(BubbleBorder::is_arrow_at_center(BubbleBorder::RIGHT_CENTER));
    200 
    201   EXPECT_FALSE(BubbleBorder::is_arrow_at_center(BubbleBorder::NONE));
    202   EXPECT_FALSE(BubbleBorder::is_arrow_at_center(BubbleBorder::FLOAT));
    203 }
    204 
    205 TEST_F(BubbleBorderTest, TestMinimalSize) {
    206   gfx::Rect anchor = gfx::Rect(100, 100, 20, 20);
    207   gfx::Size contents = gfx::Size(10, 10);
    208   BubbleBorder b1(BubbleBorder::RIGHT_TOP, BubbleBorder::NO_SHADOW, 0);
    209 
    210   // The height should be much bigger then the requested size + border and
    211   // padding since it needs to be able to include the tip bitmap.
    212   gfx::Rect visible_tip_1 = b1.GetBounds(anchor, contents);
    213   EXPECT_GE(visible_tip_1.height(), 30);
    214   EXPECT_LE(visible_tip_1.width(), 30);
    215 
    216   // With the tip being invisible the height should now be much smaller.
    217   b1.set_paint_arrow(BubbleBorder::PAINT_TRANSPARENT);
    218   gfx::Rect invisible_tip_1 = b1.GetBounds(anchor, contents);
    219   EXPECT_LE(invisible_tip_1.height(), 30);
    220   EXPECT_LE(invisible_tip_1.width(), 30);
    221 
    222   // When the orientation of the tip changes, the above mentioned tests need to
    223   // be reverse for width and height.
    224   BubbleBorder b2(BubbleBorder::TOP_RIGHT, BubbleBorder::NO_SHADOW, 0);
    225 
    226   // The width should be much bigger then the requested size + border and
    227   // padding since it needs to be able to include the tip bitmap.
    228   gfx::Rect visible_tip_2 = b2.GetBounds(anchor, contents);
    229   EXPECT_GE(visible_tip_2.width(), 30);
    230   EXPECT_LE(visible_tip_2.height(), 30);
    231 
    232   // With the tip being invisible the width should now be much smaller.
    233   b2.set_paint_arrow(BubbleBorder::PAINT_TRANSPARENT);
    234   gfx::Rect invisible_tip_2 = b2.GetBounds(anchor, contents);
    235   EXPECT_LE(invisible_tip_2.width(), 30);
    236   EXPECT_LE(invisible_tip_2.height(), 30);
    237 }
    238 
    239 
    240 }  // namespace views
    241