[Android] Add tests for toolbar of Chrome Custom Tabs
[chromium-blink-merge.git] / ui / views / bubble / bubble_border_unittest.cc
blobf22df5dc91df6717665008de2ce2409efe04948f
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.
5 #include "ui/views/bubble/bubble_border.h"
7 #include "base/memory/scoped_ptr.h"
8 #include "base/strings/stringprintf.h"
9 #include "ui/gfx/geometry/rect.h"
10 #include "ui/views/test/views_test_base.h"
12 namespace views {
14 typedef views::ViewsTestBase BubbleBorderTest;
16 TEST_F(BubbleBorderTest, GetMirroredArrow) {
17 // Horizontal mirroring.
18 EXPECT_EQ(BubbleBorder::TOP_RIGHT,
19 BubbleBorder::horizontal_mirror(BubbleBorder::TOP_LEFT));
20 EXPECT_EQ(BubbleBorder::TOP_LEFT,
21 BubbleBorder::horizontal_mirror(BubbleBorder::TOP_RIGHT));
23 EXPECT_EQ(BubbleBorder::BOTTOM_RIGHT,
24 BubbleBorder::horizontal_mirror(BubbleBorder::BOTTOM_LEFT));
25 EXPECT_EQ(BubbleBorder::BOTTOM_LEFT,
26 BubbleBorder::horizontal_mirror(BubbleBorder::BOTTOM_RIGHT));
28 EXPECT_EQ(BubbleBorder::RIGHT_TOP,
29 BubbleBorder::horizontal_mirror(BubbleBorder::LEFT_TOP));
30 EXPECT_EQ(BubbleBorder::LEFT_TOP,
31 BubbleBorder::horizontal_mirror(BubbleBorder::RIGHT_TOP));
33 EXPECT_EQ(BubbleBorder::RIGHT_BOTTOM,
34 BubbleBorder::horizontal_mirror(BubbleBorder::LEFT_BOTTOM));
35 EXPECT_EQ(BubbleBorder::LEFT_BOTTOM,
36 BubbleBorder::horizontal_mirror(BubbleBorder::RIGHT_BOTTOM));
38 EXPECT_EQ(BubbleBorder::TOP_CENTER,
39 BubbleBorder::horizontal_mirror(BubbleBorder::TOP_CENTER));
40 EXPECT_EQ(BubbleBorder::BOTTOM_CENTER,
41 BubbleBorder::horizontal_mirror(BubbleBorder::BOTTOM_CENTER));
43 EXPECT_EQ(BubbleBorder::RIGHT_CENTER,
44 BubbleBorder::horizontal_mirror(BubbleBorder::LEFT_CENTER));
45 EXPECT_EQ(BubbleBorder::LEFT_CENTER,
46 BubbleBorder::horizontal_mirror(BubbleBorder::RIGHT_CENTER));
48 EXPECT_EQ(BubbleBorder::NONE,
49 BubbleBorder::horizontal_mirror(BubbleBorder::NONE));
50 EXPECT_EQ(BubbleBorder::FLOAT,
51 BubbleBorder::horizontal_mirror(BubbleBorder::FLOAT));
53 // Vertical mirroring.
54 EXPECT_EQ(BubbleBorder::BOTTOM_LEFT,
55 BubbleBorder::vertical_mirror(BubbleBorder::TOP_LEFT));
56 EXPECT_EQ(BubbleBorder::BOTTOM_RIGHT,
57 BubbleBorder::vertical_mirror(BubbleBorder::TOP_RIGHT));
59 EXPECT_EQ(BubbleBorder::TOP_LEFT,
60 BubbleBorder::vertical_mirror(BubbleBorder::BOTTOM_LEFT));
61 EXPECT_EQ(BubbleBorder::TOP_RIGHT,
62 BubbleBorder::vertical_mirror(BubbleBorder::BOTTOM_RIGHT));
64 EXPECT_EQ(BubbleBorder::LEFT_BOTTOM,
65 BubbleBorder::vertical_mirror(BubbleBorder::LEFT_TOP));
66 EXPECT_EQ(BubbleBorder::RIGHT_BOTTOM,
67 BubbleBorder::vertical_mirror(BubbleBorder::RIGHT_TOP));
69 EXPECT_EQ(BubbleBorder::LEFT_TOP,
70 BubbleBorder::vertical_mirror(BubbleBorder::LEFT_BOTTOM));
71 EXPECT_EQ(BubbleBorder::RIGHT_TOP,
72 BubbleBorder::vertical_mirror(BubbleBorder::RIGHT_BOTTOM));
74 EXPECT_EQ(BubbleBorder::BOTTOM_CENTER,
75 BubbleBorder::vertical_mirror(BubbleBorder::TOP_CENTER));
76 EXPECT_EQ(BubbleBorder::TOP_CENTER,
77 BubbleBorder::vertical_mirror(BubbleBorder::BOTTOM_CENTER));
79 EXPECT_EQ(BubbleBorder::LEFT_CENTER,
80 BubbleBorder::vertical_mirror(BubbleBorder::LEFT_CENTER));
81 EXPECT_EQ(BubbleBorder::RIGHT_CENTER,
82 BubbleBorder::vertical_mirror(BubbleBorder::RIGHT_CENTER));
84 EXPECT_EQ(BubbleBorder::NONE,
85 BubbleBorder::vertical_mirror(BubbleBorder::NONE));
86 EXPECT_EQ(BubbleBorder::FLOAT,
87 BubbleBorder::vertical_mirror(BubbleBorder::FLOAT));
90 TEST_F(BubbleBorderTest, HasArrow) {
91 EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::TOP_LEFT));
92 EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::TOP_RIGHT));
94 EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::BOTTOM_LEFT));
95 EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::BOTTOM_RIGHT));
97 EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::LEFT_TOP));
98 EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::RIGHT_TOP));
100 EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::LEFT_BOTTOM));
101 EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::RIGHT_BOTTOM));
103 EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::TOP_CENTER));
104 EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::BOTTOM_CENTER));
106 EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::LEFT_CENTER));
107 EXPECT_TRUE(BubbleBorder::has_arrow(BubbleBorder::RIGHT_CENTER));
109 EXPECT_FALSE(BubbleBorder::has_arrow(BubbleBorder::NONE));
110 EXPECT_FALSE(BubbleBorder::has_arrow(BubbleBorder::FLOAT));
113 TEST_F(BubbleBorderTest, IsArrowOnLeft) {
114 EXPECT_TRUE(BubbleBorder::is_arrow_on_left(BubbleBorder::TOP_LEFT));
115 EXPECT_FALSE(BubbleBorder::is_arrow_on_left(BubbleBorder::TOP_RIGHT));
117 EXPECT_TRUE(BubbleBorder::is_arrow_on_left(BubbleBorder::BOTTOM_LEFT));
118 EXPECT_FALSE(BubbleBorder::is_arrow_on_left(BubbleBorder::BOTTOM_RIGHT));
120 EXPECT_TRUE(BubbleBorder::is_arrow_on_left(BubbleBorder::LEFT_TOP));
121 EXPECT_FALSE(BubbleBorder::is_arrow_on_left(BubbleBorder::RIGHT_TOP));
123 EXPECT_TRUE(BubbleBorder::is_arrow_on_left(BubbleBorder::LEFT_BOTTOM));
124 EXPECT_FALSE(BubbleBorder::is_arrow_on_left(BubbleBorder::RIGHT_BOTTOM));
126 EXPECT_FALSE(BubbleBorder::is_arrow_on_left(BubbleBorder::TOP_CENTER));
127 EXPECT_FALSE(BubbleBorder::is_arrow_on_left(BubbleBorder::BOTTOM_CENTER));
129 EXPECT_TRUE(BubbleBorder::is_arrow_on_left(BubbleBorder::LEFT_CENTER));
130 EXPECT_FALSE(BubbleBorder::is_arrow_on_left(BubbleBorder::RIGHT_CENTER));
132 EXPECT_FALSE(BubbleBorder::is_arrow_on_left(BubbleBorder::NONE));
133 EXPECT_FALSE(BubbleBorder::is_arrow_on_left(BubbleBorder::FLOAT));
136 TEST_F(BubbleBorderTest, IsArrowOnTop) {
137 EXPECT_TRUE(BubbleBorder::is_arrow_on_top(BubbleBorder::TOP_LEFT));
138 EXPECT_TRUE(BubbleBorder::is_arrow_on_top(BubbleBorder::TOP_RIGHT));
140 EXPECT_FALSE(BubbleBorder::is_arrow_on_top(BubbleBorder::BOTTOM_LEFT));
141 EXPECT_FALSE(BubbleBorder::is_arrow_on_top(BubbleBorder::BOTTOM_RIGHT));
143 EXPECT_TRUE(BubbleBorder::is_arrow_on_top(BubbleBorder::LEFT_TOP));
144 EXPECT_TRUE(BubbleBorder::is_arrow_on_top(BubbleBorder::RIGHT_TOP));
146 EXPECT_FALSE(BubbleBorder::is_arrow_on_top(BubbleBorder::LEFT_BOTTOM));
147 EXPECT_FALSE(BubbleBorder::is_arrow_on_top(BubbleBorder::RIGHT_BOTTOM));
149 EXPECT_TRUE(BubbleBorder::is_arrow_on_top(BubbleBorder::TOP_CENTER));
150 EXPECT_FALSE(BubbleBorder::is_arrow_on_top(BubbleBorder::BOTTOM_CENTER));
152 EXPECT_FALSE(BubbleBorder::is_arrow_on_top(BubbleBorder::LEFT_CENTER));
153 EXPECT_FALSE(BubbleBorder::is_arrow_on_top(BubbleBorder::RIGHT_CENTER));
155 EXPECT_FALSE(BubbleBorder::is_arrow_on_top(BubbleBorder::NONE));
156 EXPECT_FALSE(BubbleBorder::is_arrow_on_top(BubbleBorder::FLOAT));
159 TEST_F(BubbleBorderTest, IsArrowOnHorizontal) {
160 EXPECT_TRUE(BubbleBorder::is_arrow_on_horizontal(BubbleBorder::TOP_LEFT));
161 EXPECT_TRUE(BubbleBorder::is_arrow_on_horizontal(BubbleBorder::TOP_RIGHT));
163 EXPECT_TRUE(BubbleBorder::is_arrow_on_horizontal(BubbleBorder::BOTTOM_LEFT));
164 EXPECT_TRUE(BubbleBorder::is_arrow_on_horizontal(BubbleBorder::BOTTOM_RIGHT));
166 EXPECT_FALSE(BubbleBorder::is_arrow_on_horizontal(BubbleBorder::LEFT_TOP));
167 EXPECT_FALSE(BubbleBorder::is_arrow_on_horizontal(BubbleBorder::RIGHT_TOP));
169 EXPECT_FALSE(BubbleBorder::is_arrow_on_horizontal(BubbleBorder::LEFT_BOTTOM));
170 EXPECT_FALSE(
171 BubbleBorder::is_arrow_on_horizontal(BubbleBorder::RIGHT_BOTTOM));
173 EXPECT_TRUE(BubbleBorder::is_arrow_on_horizontal(BubbleBorder::TOP_CENTER));
174 EXPECT_TRUE(
175 BubbleBorder::is_arrow_on_horizontal(BubbleBorder::BOTTOM_CENTER));
177 EXPECT_FALSE(BubbleBorder::is_arrow_on_horizontal(BubbleBorder::LEFT_CENTER));
178 EXPECT_FALSE(
179 BubbleBorder::is_arrow_on_horizontal(BubbleBorder::RIGHT_CENTER));
181 EXPECT_FALSE(BubbleBorder::is_arrow_on_horizontal(BubbleBorder::NONE));
182 EXPECT_FALSE(BubbleBorder::is_arrow_on_horizontal(BubbleBorder::FLOAT));
185 TEST_F(BubbleBorderTest, IsArrowAtCenter) {
186 EXPECT_FALSE(BubbleBorder::is_arrow_at_center(BubbleBorder::TOP_LEFT));
187 EXPECT_FALSE(BubbleBorder::is_arrow_at_center(BubbleBorder::TOP_RIGHT));
189 EXPECT_FALSE(BubbleBorder::is_arrow_at_center(BubbleBorder::BOTTOM_LEFT));
190 EXPECT_FALSE(BubbleBorder::is_arrow_at_center(BubbleBorder::BOTTOM_RIGHT));
192 EXPECT_FALSE(BubbleBorder::is_arrow_at_center(BubbleBorder::LEFT_TOP));
193 EXPECT_FALSE(BubbleBorder::is_arrow_at_center(BubbleBorder::RIGHT_TOP));
195 EXPECT_FALSE(BubbleBorder::is_arrow_at_center(BubbleBorder::LEFT_BOTTOM));
196 EXPECT_FALSE(BubbleBorder::is_arrow_at_center(BubbleBorder::RIGHT_BOTTOM));
198 EXPECT_TRUE(BubbleBorder::is_arrow_at_center(BubbleBorder::TOP_CENTER));
199 EXPECT_TRUE(BubbleBorder::is_arrow_at_center(BubbleBorder::BOTTOM_CENTER));
201 EXPECT_TRUE(BubbleBorder::is_arrow_at_center(BubbleBorder::LEFT_CENTER));
202 EXPECT_TRUE(BubbleBorder::is_arrow_at_center(BubbleBorder::RIGHT_CENTER));
204 EXPECT_FALSE(BubbleBorder::is_arrow_at_center(BubbleBorder::NONE));
205 EXPECT_FALSE(BubbleBorder::is_arrow_at_center(BubbleBorder::FLOAT));
208 TEST_F(BubbleBorderTest, GetSizeForContentsSizeTest) {
209 views::BubbleBorder border(BubbleBorder::NONE,
210 BubbleBorder::NO_SHADOW,
211 SK_ColorWHITE);
213 const views::internal::BorderImages* kImages = border.GetImagesForTest();
215 // kSmallSize is smaller than the minimum allowable size and does not
216 // contribute to the resulting size.
217 const gfx::Size kSmallSize = gfx::Size(1, 2);
218 // kMediumSize is larger than the minimum allowable size and contributes to
219 // the resulting size.
220 const gfx::Size kMediumSize = gfx::Size(50, 60);
222 const gfx::Size kSmallHorizArrow(
223 2 * kImages->border_thickness + kImages->top_arrow.width(),
224 kImages->border_thickness + kImages->arrow_thickness +
225 kImages->border_interior_thickness);
227 const gfx::Size kSmallVertArrow(kSmallHorizArrow.height(),
228 kSmallHorizArrow.width());
230 const gfx::Size kSmallNoArrow(2 * kImages->border_thickness,
231 2 * kImages->border_thickness);
233 const gfx::Size kMediumHorizArrow(
234 kMediumSize.width() + 2 * border.GetBorderThickness(),
235 kMediumSize.height() + border.GetBorderThickness() +
236 kImages->arrow_thickness);
238 const gfx::Size kMediumVertArrow(
239 kMediumSize.width() + border.GetBorderThickness() +
240 kImages->arrow_thickness,
241 kMediumSize.height() + 2 * border.GetBorderThickness());
243 const gfx::Size kMediumNoArrow(
244 kMediumSize.width() + 2 * border.GetBorderThickness(),
245 kMediumSize.height() + 2 * border.GetBorderThickness());
247 struct TestCase {
248 BubbleBorder::Arrow arrow;
249 gfx::Size content;
250 gfx::Size expected_with_arrow;
251 gfx::Size expected_without_arrow;
254 TestCase cases[] = {
255 // Content size: kSmallSize
256 { BubbleBorder::TOP_LEFT, kSmallSize, kSmallHorizArrow, kSmallNoArrow },
257 { BubbleBorder::TOP_CENTER, kSmallSize, kSmallHorizArrow, kSmallNoArrow },
258 { BubbleBorder::TOP_RIGHT, kSmallSize, kSmallHorizArrow, kSmallNoArrow },
259 { BubbleBorder::BOTTOM_LEFT, kSmallSize, kSmallHorizArrow, kSmallNoArrow },
260 { BubbleBorder::BOTTOM_CENTER, kSmallSize, kSmallHorizArrow,
261 kSmallNoArrow },
262 { BubbleBorder::BOTTOM_RIGHT, kSmallSize, kSmallHorizArrow, kSmallNoArrow },
263 { BubbleBorder::LEFT_TOP, kSmallSize, kSmallVertArrow, kSmallNoArrow },
264 { BubbleBorder::LEFT_CENTER, kSmallSize, kSmallVertArrow, kSmallNoArrow },
265 { BubbleBorder::LEFT_BOTTOM, kSmallSize, kSmallVertArrow, kSmallNoArrow },
266 { BubbleBorder::RIGHT_TOP, kSmallSize, kSmallVertArrow, kSmallNoArrow },
267 { BubbleBorder::RIGHT_CENTER, kSmallSize, kSmallVertArrow, kSmallNoArrow },
268 { BubbleBorder::RIGHT_BOTTOM, kSmallSize, kSmallVertArrow, kSmallNoArrow },
269 { BubbleBorder::NONE, kSmallSize, kSmallNoArrow, kSmallNoArrow },
270 { BubbleBorder::FLOAT, kSmallSize, kSmallNoArrow, kSmallNoArrow },
272 // Content size: kMediumSize
273 { BubbleBorder::TOP_LEFT, kMediumSize, kMediumHorizArrow, kMediumNoArrow },
274 { BubbleBorder::TOP_CENTER, kMediumSize, kMediumHorizArrow,
275 kMediumNoArrow },
276 { BubbleBorder::TOP_RIGHT, kMediumSize, kMediumHorizArrow, kMediumNoArrow },
277 { BubbleBorder::BOTTOM_LEFT, kMediumSize, kMediumHorizArrow,
278 kMediumNoArrow },
279 { BubbleBorder::BOTTOM_CENTER, kMediumSize, kMediumHorizArrow,
280 kMediumNoArrow },
281 { BubbleBorder::BOTTOM_RIGHT, kMediumSize, kMediumHorizArrow,
282 kMediumNoArrow },
283 { BubbleBorder::LEFT_TOP, kMediumSize, kMediumVertArrow, kMediumNoArrow },
284 { BubbleBorder::LEFT_CENTER, kMediumSize, kMediumVertArrow,
285 kMediumNoArrow },
286 { BubbleBorder::LEFT_BOTTOM, kMediumSize, kMediumVertArrow,
287 kMediumNoArrow },
288 { BubbleBorder::RIGHT_TOP, kMediumSize, kMediumVertArrow, kMediumNoArrow },
289 { BubbleBorder::RIGHT_CENTER, kMediumSize, kMediumVertArrow,
290 kMediumNoArrow },
291 { BubbleBorder::RIGHT_BOTTOM, kMediumSize, kMediumVertArrow,
292 kMediumNoArrow },
293 { BubbleBorder::NONE, kMediumSize, kMediumNoArrow, kMediumNoArrow },
294 { BubbleBorder::FLOAT, kMediumSize, kMediumNoArrow, kMediumNoArrow }
297 for (size_t i = 0; i < arraysize(cases); ++i) {
298 SCOPED_TRACE(base::StringPrintf("i=%d arrow=%d",
299 static_cast<int>(i), cases[i].arrow));
301 border.set_arrow(cases[i].arrow);
303 border.set_paint_arrow(BubbleBorder::PAINT_NORMAL);
304 EXPECT_EQ(cases[i].expected_with_arrow,
305 border.GetSizeForContentsSize(cases[i].content));
307 border.set_paint_arrow(BubbleBorder::PAINT_TRANSPARENT);
308 EXPECT_EQ(cases[i].expected_with_arrow,
309 border.GetSizeForContentsSize(cases[i].content));
311 border.set_paint_arrow(BubbleBorder::PAINT_NONE);
312 EXPECT_EQ(cases[i].expected_without_arrow,
313 border.GetSizeForContentsSize(cases[i].content));
317 TEST_F(BubbleBorderTest, GetBoundsOriginTest) {
318 views::BubbleBorder border(BubbleBorder::TOP_LEFT,
319 BubbleBorder::NO_SHADOW,
320 SK_ColorWHITE);
322 const gfx::Rect kAnchor(100, 100, 20, 30);
323 const gfx::Size kContentSize(50, 60);
325 const views::internal::BorderImages* kImages = border.GetImagesForTest();
327 border.set_arrow(BubbleBorder::TOP_LEFT);
328 const gfx::Size kTotalSizeWithHorizArrow =
329 border.GetSizeForContentsSize(kContentSize);
331 border.set_arrow(BubbleBorder::RIGHT_BOTTOM);
332 const gfx::Size kTotalSizeWithVertArrow =
333 border.GetSizeForContentsSize(kContentSize);
335 border.set_arrow(BubbleBorder::NONE);
336 const gfx::Size kTotalSizeWithNoArrow =
337 border.GetSizeForContentsSize(kContentSize);
339 const int kBorderThickness = border.GetBorderThickness();
341 const int kArrowOffsetForHorizCenter = kTotalSizeWithHorizArrow.width() / 2;
342 const int kArrowOffsetForVertCenter = kTotalSizeWithVertArrow.height() / 2;
343 const int kArrowOffsetForNotCenter =
344 kImages->border_thickness + (kImages->top_arrow.width() / 2);
346 const int kArrowSize =
347 kImages->arrow_interior_thickness + BubbleBorder::kStroke -
348 kImages->arrow_thickness;
350 const int kTopHorizArrowY = kAnchor.y() + kAnchor.height() + kArrowSize;
351 const int kBottomHorizArrowY =
352 kAnchor.y() - kArrowSize - kTotalSizeWithHorizArrow.height();
354 const int kLeftVertArrowX = kAnchor.x() + kAnchor.width() + kArrowSize;
355 const int kRightVertArrowX =
356 kAnchor.x() - kArrowSize - kTotalSizeWithVertArrow.width();
358 struct TestCase {
359 BubbleBorder::Arrow arrow;
360 BubbleBorder::BubbleAlignment alignment;
361 int expected_x;
362 int expected_y;
365 TestCase cases[] = {
366 // Horizontal arrow tests.
367 { BubbleBorder::TOP_LEFT, BubbleBorder::ALIGN_ARROW_TO_MID_ANCHOR,
368 kAnchor.CenterPoint().x() - kArrowOffsetForNotCenter, kTopHorizArrowY },
369 { BubbleBorder::TOP_LEFT, BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE,
370 kAnchor.x() + BubbleBorder::kStroke - kBorderThickness, kTopHorizArrowY },
371 { BubbleBorder::TOP_CENTER, BubbleBorder::ALIGN_ARROW_TO_MID_ANCHOR,
372 kAnchor.CenterPoint().x() - kArrowOffsetForHorizCenter, kTopHorizArrowY },
373 { BubbleBorder::BOTTOM_RIGHT, BubbleBorder::ALIGN_ARROW_TO_MID_ANCHOR,
374 kAnchor.CenterPoint().x() + kArrowOffsetForNotCenter -
375 kTotalSizeWithHorizArrow.width(), kBottomHorizArrowY },
376 { BubbleBorder::BOTTOM_RIGHT, BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE,
377 kAnchor.x() + kAnchor.width() - kTotalSizeWithHorizArrow.width() +
378 kBorderThickness - BubbleBorder::kStroke, kBottomHorizArrowY },
380 // Vertical arrow tests.
381 { BubbleBorder::LEFT_TOP, BubbleBorder::ALIGN_ARROW_TO_MID_ANCHOR,
382 kLeftVertArrowX, kAnchor.CenterPoint().y() - kArrowOffsetForNotCenter },
383 { BubbleBorder::LEFT_TOP, BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE,
384 kLeftVertArrowX, kAnchor.y() + BubbleBorder::kStroke - kBorderThickness },
385 { BubbleBorder::LEFT_CENTER, BubbleBorder::ALIGN_ARROW_TO_MID_ANCHOR,
386 kLeftVertArrowX, kAnchor.CenterPoint().y() - kArrowOffsetForVertCenter },
387 { BubbleBorder::RIGHT_BOTTOM, BubbleBorder::ALIGN_ARROW_TO_MID_ANCHOR,
388 kRightVertArrowX, kAnchor.CenterPoint().y() + kArrowOffsetForNotCenter -
389 kTotalSizeWithVertArrow.height() },
390 { BubbleBorder::RIGHT_BOTTOM, BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE,
391 kRightVertArrowX, kAnchor.y() + kAnchor.height() -
392 kTotalSizeWithVertArrow.height() + kBorderThickness -
393 BubbleBorder::kStroke },
395 // No arrow tests.
396 { BubbleBorder::NONE, BubbleBorder::ALIGN_ARROW_TO_MID_ANCHOR,
397 kAnchor.x() + (kAnchor.width() - kTotalSizeWithNoArrow.width()) / 2,
398 kAnchor.y() + kAnchor.height() },
399 { BubbleBorder::FLOAT, BubbleBorder::ALIGN_ARROW_TO_MID_ANCHOR,
400 kAnchor.x() + (kAnchor.width() - kTotalSizeWithNoArrow.width()) / 2,
401 kAnchor.y() + (kAnchor.height() - kTotalSizeWithNoArrow.height()) / 2 },
404 for (size_t i = 0; i < arraysize(cases); ++i) {
405 SCOPED_TRACE(base::StringPrintf("i=%d arrow=%d alignment=%d",
406 static_cast<int>(i), cases[i].arrow, cases[i].alignment));
407 border.set_arrow(cases[i].arrow);
408 border.set_alignment(cases[i].alignment);
410 gfx::Point origin = border.GetBounds(kAnchor, kContentSize).origin();
411 EXPECT_EQ(cases[i].expected_x, origin.x());
412 EXPECT_EQ(cases[i].expected_y, origin.y());
416 } // namespace views