b8838f656ba177e70a6cac271754729b726c250b
[platform/framework/web/crosswalk.git] / src / ui / views / bubble / bubble_border_unittest.cc
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