Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(70)

Unified Diff: ui/views/bubble/bubble_border_unittest.cc

Issue 454173002: Fixed BubbleBorder sizing problems & added unit tests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Combined test fixtures and rewrote tests to be more easily maintained. Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/views/bubble/bubble_border_unittest.cc
diff --git a/ui/views/bubble/bubble_border_unittest.cc b/ui/views/bubble/bubble_border_unittest.cc
index b8838f656ba177e70a6cac271754729b726c250b..189622bcb118505f95f4480001928a08baad5efc 100644
--- a/ui/views/bubble/bubble_border_unittest.cc
+++ b/ui/views/bubble/bubble_border_unittest.cc
@@ -4,11 +4,109 @@
#include "ui/views/bubble/bubble_border.h"
+#include "base/memory/scoped_ptr.h"
#include "ui/views/test/views_test_base.h"
namespace views {
-typedef ViewsTestBase BubbleBorderTest;
+class BubbleBorderTest : public views::ViewsTestBase {
+ public:
+ const int kStroke = views::BubbleBorder::kStroke;
+
+ const gfx::Size kSmallSize = gfx::Size(1, 1);
+ const gfx::Size kMediumSize = gfx::Size(50, 50);
+
+ const gfx::Rect kGetOriginAnchor = gfx::Rect(100, 100, 20, 20);
msw 2014/08/19 21:35:40 nit: rename this kAnchor.
bruthig 2014/08/22 19:45:04 Done.
+ const gfx::Size kGetOriginContentsSize = gfx::Size(50, 50);
msw 2014/08/19 21:35:40 nit: remove this and just use kMediumSize.
bruthig 2014/08/22 19:45:04 Done.
+
+ BubbleBorderTest() {}
+ virtual ~BubbleBorderTest() {}
+
+ protected:
+ // Sets the bubble alignment.
+ void SetAlignment(BubbleBorder::BubbleAlignment alignment) {
+ bubble_border_->set_alignment(alignment);
+ }
+
+ // Sets the arrow paint type.
+ void SetPaintArrow(BubbleBorder::ArrowPaintType value) {
+ bubble_border_->set_paint_arrow(value);
+ }
+
+ // Gets the arrow thickness.
+ int GetArrowThickness() const {
+ return bubble_border_->GetArrowThickness();
+ }
+
+ // Gets the top arrow width.
+ int GetTopArrowWidth() const {
+ return bubble_border_->GetTopArrowWidth();
+ }
+
+ // Gets the image border thickness.
+ int GetBorderThickness() const {
+ return bubble_border_->GetBorderThickness();
+ }
+
+ // Gets the border thickness.
+ int GetBorderExteriorThickness() const {
+ return bubble_border_->GetBorderExteriorThickness();
+ }
+
+ // Gets the border interior thickness.
+ int GetBorderInteriorThickness() const {
+ return bubble_border_->GetBorderInteriorThickness();
+ }
+
+ // Get the arrow size.
+ int GetArrowSize() const {
+ return bubble_border_->GetArrowSize();
+ }
+
+ // Returns true iff the bubble_border_ has an arrow.
+ bool HasArrow() {
+ return BubbleBorder::has_arrow(bubble_border_->arrow());
+ }
+
+ // Get the size for the given |contents_size|.
+ gfx::Size GetSizeForContentsSize(
+ const gfx::Size& contents_size) const {
+ return bubble_border_->GetSizeForContentsSize(contents_size);
+ }
+
+ // Gets an origin point for the fixed kGetOriginAnchor and
msw 2014/08/19 21:35:40 This helper can be re-written as a static for indi
+ // kGetOriginContentsSize.
+ gfx::Point GetOrigin() {
+ return bubble_border_->GetBounds(kGetOriginAnchor,
+ kGetOriginContentsSize).origin();
+ }
+
+ // Creates a new BubbleBorder instance with the given |arrow|.
+ void CreateBubbleBorder(BubbleBorder::Arrow arrow) {
+ bubble_border_.reset(new BubbleBorder(arrow,
+ BubbleBorder::NO_SHADOW,
+ SK_ColorWHITE));
+ }
+
+ // Creates a new BubbleBorder instance with the given |arrow|.
+ void CreateBubbleBorderForGetBoundsOrginTest(BubbleBorder::Arrow arrow,
+ int& arrow_offset,
+ gfx::Size& size_for_contents_size) {
+ bubble_border_.reset(new BubbleBorder(arrow,
msw 2014/08/19 21:35:40 Have individual tests just do this as needed: co
+ BubbleBorder::NO_SHADOW,
+ SK_ColorWHITE));
+ size_for_contents_size = GetSizeForContentsSize(kGetOriginContentsSize);
+ arrow_offset = bubble_border_->GetArrowOffset(size_for_contents_size);
+ }
+
+ private:
+ scoped_ptr<BubbleBorder> bubble_border_;
msw 2014/08/19 21:35:39 Remove this and wrappers; let each test construct
+
+ DISALLOW_COPY_AND_ASSIGN(BubbleBorderTest);
+};
+
+typedef BubbleBorderTest BubbleBorderGetSizeForContentsSizeTest;
+typedef BubbleBorderTest BubbleBorderGetBoundsOriginTest;
TEST_F(BubbleBorderTest, GetMirroredArrow) {
// Horizontal mirroring.
@@ -202,39 +300,556 @@ TEST_F(BubbleBorderTest, IsArrowAtCenter) {
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);
+TEST_F(BubbleBorderGetSizeForContentsSizeTest, WithHorizontalTopArrow) {
+ CreateBubbleBorder(BubbleBorder::TOP_CENTER);
+
+ gfx::Size size;
+
+ ASSERT_TRUE(HasArrow());
msw 2014/08/19 21:35:39 Nit move asserts like this directly after the Bord
+
+ SetPaintArrow(BubbleBorder::PAINT_NORMAL);
+ size = GetSizeForContentsSize(kSmallSize);
+ EXPECT_EQ(2 * GetBorderThickness() + GetTopArrowWidth(), size.width());
+ EXPECT_EQ(GetBorderThickness()
+ + GetArrowThickness()
+ + GetBorderInteriorThickness(),
+ size.height());
+
+ size = GetSizeForContentsSize(kMediumSize);
+ EXPECT_EQ(kMediumSize.width() + 2 * GetBorderExteriorThickness(),
+ size.width());
+ EXPECT_EQ(kMediumSize.height()
+ + GetBorderExteriorThickness()
+ + GetArrowThickness(),
+ size.height());
+
+ SetPaintArrow(BubbleBorder::PAINT_TRANSPARENT);
+ size = GetSizeForContentsSize(kSmallSize);
+ EXPECT_EQ(2 * GetBorderThickness() + GetTopArrowWidth(), size.width());
+ EXPECT_EQ(GetBorderThickness()
+ + GetArrowThickness()
+ + GetBorderInteriorThickness(),
+ size.height());
+
+ size = GetSizeForContentsSize(kMediumSize);
+ EXPECT_EQ(kMediumSize.width() + 2 * GetBorderExteriorThickness(),
+ size.width());
+ EXPECT_EQ(kMediumSize.height()
+ + GetBorderExteriorThickness()
+ + GetArrowThickness(),
+ size.height());
+
+ SetPaintArrow(BubbleBorder::PAINT_NONE);
+ size = GetSizeForContentsSize(kSmallSize);
+ EXPECT_EQ(2 * GetBorderThickness(), size.width());
+ EXPECT_EQ(2 * GetBorderThickness(), size.height());
+
+ size = GetSizeForContentsSize(kMediumSize);
+ EXPECT_EQ(kMediumSize.width() + 2 * GetBorderExteriorThickness(),
+ size.width());
+ EXPECT_EQ(kMediumSize.width() + 2 * GetBorderExteriorThickness(),
+ size.height());
+}
+
+TEST_F(BubbleBorderGetSizeForContentsSizeTest, WithHorizontalBottomArrow) {
msw 2014/08/19 21:35:40 All the expected values should be the same for a t
bruthig 2014/08/20 15:01:28 Interesting, I stayed away from this approach beca
msw 2014/08/20 20:41:02 Yeah, SCOPED_TRACE and looping over similar test c
bruthig 2014/08/22 19:45:04 Done.
+ CreateBubbleBorder(BubbleBorder::BOTTOM_CENTER);
+
+ gfx::Size size;
+
+ ASSERT_TRUE(HasArrow());
+
+ SetPaintArrow(BubbleBorder::PAINT_NORMAL);
+ size = GetSizeForContentsSize(kSmallSize);
+ EXPECT_EQ(2 * GetBorderThickness() + GetTopArrowWidth(), size.width());
+ EXPECT_EQ(GetBorderThickness()
+ + GetArrowThickness()
+ + GetBorderInteriorThickness(),
+ size.height());
+
+ size = GetSizeForContentsSize(kMediumSize);
+ EXPECT_EQ(kMediumSize.width() + 2 * GetBorderExteriorThickness(),
+ size.width());
+ EXPECT_EQ(kMediumSize.height()
+ + GetBorderExteriorThickness()
+ + GetArrowThickness(),
+ size.height());
+
+ SetPaintArrow(BubbleBorder::PAINT_TRANSPARENT);
+ size = GetSizeForContentsSize(kSmallSize);
+ EXPECT_EQ(2 * GetBorderThickness() + GetTopArrowWidth(), size.width());
+ EXPECT_EQ(GetBorderThickness()
+ + GetArrowThickness()
+ + GetBorderInteriorThickness(),
+ size.height());
+
+ size = GetSizeForContentsSize(kMediumSize);
+ EXPECT_EQ(kMediumSize.width() + 2 * GetBorderExteriorThickness(),
+ size.width());
+ EXPECT_EQ(kMediumSize.height()
+ + GetBorderExteriorThickness()
+ + GetArrowThickness(),
+ size.height());
+
+ SetPaintArrow(BubbleBorder::PAINT_NONE);
+ size = GetSizeForContentsSize(kSmallSize);
+ EXPECT_EQ(2 * GetBorderThickness(), size.width());
+ EXPECT_EQ(2 * GetBorderThickness(), size.height());
+
+ size = GetSizeForContentsSize(kMediumSize);
+ EXPECT_EQ(kMediumSize.width() + 2 * GetBorderExteriorThickness(),
+ size.width());
+ EXPECT_EQ(kMediumSize.width() + 2 * GetBorderExteriorThickness(),
+ size.height());
+}
+
+TEST_F(BubbleBorderGetSizeForContentsSizeTest, WithVerticalLeftArrow) {
+ CreateBubbleBorder(BubbleBorder::LEFT_CENTER);
+
+ gfx::Size size;
+
+ ASSERT_TRUE(HasArrow());
+
+ SetPaintArrow(BubbleBorder::PAINT_NORMAL);
+ size = GetSizeForContentsSize(kSmallSize);
+ EXPECT_EQ(GetBorderThickness()
+ + GetArrowThickness()
+ + GetBorderInteriorThickness(),
+ size.width());
+ EXPECT_EQ(2 * GetBorderThickness() + GetTopArrowWidth(), size.height());
+
+ size = GetSizeForContentsSize(kMediumSize);
+ EXPECT_EQ(kMediumSize.height()
+ + GetBorderExteriorThickness()
+ + GetArrowThickness(),
+ size.width());
+ EXPECT_EQ(kMediumSize.width() + 2 * GetBorderExteriorThickness(),
+ size.height());
+
+ SetPaintArrow(BubbleBorder::PAINT_TRANSPARENT);
+ size = GetSizeForContentsSize(kSmallSize);
+ EXPECT_EQ(GetBorderThickness()
+ + GetArrowThickness()
+ + GetBorderInteriorThickness(),
+ size.width());
+ EXPECT_EQ(2 * GetBorderThickness() + GetTopArrowWidth(), size.height());
+
+ size = GetSizeForContentsSize(kMediumSize);
+ EXPECT_EQ(kMediumSize.height()
+ + GetBorderExteriorThickness()
+ + GetArrowThickness(),
+ size.width());
+ EXPECT_EQ(kMediumSize.width() + 2 * GetBorderExteriorThickness(),
+ size.height());
+
+ SetPaintArrow(BubbleBorder::PAINT_NONE);
+ size = GetSizeForContentsSize(kSmallSize);
+ EXPECT_EQ(2 * GetBorderThickness(), size.width());
+ EXPECT_EQ(2 * GetBorderThickness(), size.height());
+
+ size = GetSizeForContentsSize(kMediumSize);
+ EXPECT_EQ(kMediumSize.width() + 2 * GetBorderExteriorThickness(),
+ size.width());
+ EXPECT_EQ(kMediumSize.width() + 2 * GetBorderExteriorThickness(),
+ size.height());
+}
+
+TEST_F(BubbleBorderGetSizeForContentsSizeTest, WithVerticalRightArrow) {
+ CreateBubbleBorder(BubbleBorder::RIGHT_CENTER);
+
+ gfx::Size size;
+
+ ASSERT_TRUE(HasArrow());
+
+ SetPaintArrow(BubbleBorder::PAINT_NORMAL);
+ size = GetSizeForContentsSize(kSmallSize);
+ EXPECT_EQ(GetBorderThickness()
+ + GetArrowThickness()
+ + GetBorderInteriorThickness(),
+ size.width());
+ EXPECT_EQ(2 * GetBorderThickness() + GetTopArrowWidth(), size.height());
+
+ size = GetSizeForContentsSize(kMediumSize);
+ EXPECT_EQ(kMediumSize.height()
+ + GetBorderExteriorThickness()
+ + GetArrowThickness(),
+ size.width());
+ EXPECT_EQ(kMediumSize.width() + 2 * GetBorderExteriorThickness(),
+ size.height());
+
+ SetPaintArrow(BubbleBorder::PAINT_TRANSPARENT);
+ size = GetSizeForContentsSize(kSmallSize);
+ EXPECT_EQ(GetBorderThickness()
+ + GetArrowThickness()
+ + GetBorderInteriorThickness(),
+ size.width());
+ EXPECT_EQ(2 * GetBorderThickness() + GetTopArrowWidth(), size.height());
+
+ size = GetSizeForContentsSize(kMediumSize);
+ EXPECT_EQ(kMediumSize.height()
+ + GetBorderExteriorThickness()
+ + GetArrowThickness(),
+ size.width());
+ EXPECT_EQ(kMediumSize.width() + 2 * GetBorderExteriorThickness(),
+ size.height());
+
+ SetPaintArrow(BubbleBorder::PAINT_NONE);
+ size = GetSizeForContentsSize(kSmallSize);
+ EXPECT_EQ(2 * GetBorderThickness(), size.width());
+ EXPECT_EQ(2 * GetBorderThickness(), size.height());
+
+ size = GetSizeForContentsSize(kMediumSize);
+ EXPECT_EQ(kMediumSize.width() + 2 * GetBorderExteriorThickness(),
+ size.width());
+ EXPECT_EQ(kMediumSize.width() + 2 * GetBorderExteriorThickness(),
+ size.height());
+}
+
+TEST_F(BubbleBorderGetSizeForContentsSizeTest, WithoutArrow) {
+ CreateBubbleBorder(BubbleBorder::NONE);
+
+ gfx::Size size;
+
+ ASSERT_FALSE(HasArrow());
+
+ SetPaintArrow(BubbleBorder::PAINT_NORMAL);
+ size = GetSizeForContentsSize(kSmallSize);
+ EXPECT_EQ(2 * GetBorderThickness(), size.width());
+ EXPECT_EQ(2 * GetBorderThickness(), size.height());
+
+ size = GetSizeForContentsSize(kMediumSize);
+ EXPECT_EQ(kMediumSize.width() + 2 * GetBorderExteriorThickness(),
+ size.width());
+ EXPECT_EQ(kMediumSize.width() + 2 * GetBorderExteriorThickness(),
+ size.height());
+
+ SetPaintArrow(BubbleBorder::PAINT_TRANSPARENT);
+ size = GetSizeForContentsSize(kSmallSize);
+ EXPECT_EQ(2 * GetBorderThickness(), size.width());
+ EXPECT_EQ(2 * GetBorderThickness(), size.height());
+
+ size = GetSizeForContentsSize(kMediumSize);
+ EXPECT_EQ(kMediumSize.width() + 2 * GetBorderExteriorThickness(),
+ size.width());
+ EXPECT_EQ(kMediumSize.width() + 2 * GetBorderExteriorThickness(),
+ size.height());
+
+ SetPaintArrow(BubbleBorder::PAINT_NONE);
+ size = GetSizeForContentsSize(kSmallSize);
+ EXPECT_EQ(2 * GetBorderThickness(), size.width());
+ EXPECT_EQ(2 * GetBorderThickness(), size.height());
+
+ size = GetSizeForContentsSize(kMediumSize);
+ EXPECT_EQ(kMediumSize.width() + 2 * GetBorderExteriorThickness(),
+ size.width());
+ EXPECT_EQ(kMediumSize.width() + 2 * GetBorderExteriorThickness(),
+ size.height());
+}
- // 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);
+TEST_F(BubbleBorderGetSizeForContentsSizeTest, WithFloatArrow) {
+ CreateBubbleBorder(BubbleBorder::FLOAT);
- // 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);
+ gfx::Size size;
- // 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);
+ ASSERT_FALSE(HasArrow());
- // 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);
+ SetPaintArrow(BubbleBorder::PAINT_NORMAL);
+ size = GetSizeForContentsSize(kSmallSize);
+ EXPECT_EQ(2 * GetBorderThickness(), size.width());
+ EXPECT_EQ(2 * GetBorderThickness(), size.height());
+
+ size = GetSizeForContentsSize(kMediumSize);
+ EXPECT_EQ(kMediumSize.width() + 2 * GetBorderExteriorThickness(),
+ size.width());
+ EXPECT_EQ(kMediumSize.width() + 2 * GetBorderExteriorThickness(),
+ size.height());
+
+ SetPaintArrow(BubbleBorder::PAINT_TRANSPARENT);
+ size = GetSizeForContentsSize(kSmallSize);
+ EXPECT_EQ(2 * GetBorderThickness(), size.width());
+ EXPECT_EQ(2 * GetBorderThickness(), size.height());
+
+ size = GetSizeForContentsSize(kMediumSize);
+ EXPECT_EQ(kMediumSize.width() + 2 * GetBorderExteriorThickness(),
+ size.width());
+ EXPECT_EQ(kMediumSize.width() + 2 * GetBorderExteriorThickness(),
+ size.height());
+
+ SetPaintArrow(BubbleBorder::PAINT_NONE);
+ size = GetSizeForContentsSize(kSmallSize);
+ EXPECT_EQ(2 * GetBorderThickness(), size.width());
+ EXPECT_EQ(2 * GetBorderThickness(), size.height());
+
+ size = GetSizeForContentsSize(kMediumSize);
+ EXPECT_EQ(kMediumSize.width() + 2 * GetBorderExteriorThickness(),
+ size.width());
+ EXPECT_EQ(kMediumSize.width() + 2 * GetBorderExteriorThickness(),
+ size.height());
+}
+
+TEST_F(BubbleBorderGetBoundsOriginTest, ArrowIsHorizontalLeft) {
msw 2014/08/19 21:35:40 Ditto request to remove similar test cases or cons
bruthig 2014/08/22 19:45:04 Done.
+ int arrow_offset;
+ gfx::Size size_for_contents_size;
+ CreateBubbleBorderForGetBoundsOrginTest(BubbleBorder::TOP_LEFT,
+ arrow_offset,
+ size_for_contents_size);
+
+ gfx::Point origin;
+
+ SetAlignment(BubbleBorder::ALIGN_ARROW_TO_MID_ANCHOR);
+ origin = GetOrigin();
+ EXPECT_EQ(kGetOriginAnchor.x() + kGetOriginAnchor.width() / 2 - arrow_offset,
+ origin.x());
+ EXPECT_EQ(kGetOriginAnchor.y() + kGetOriginAnchor.height() + GetArrowSize(),
+ origin.y());
+
+ SetAlignment(BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE);
+ origin = GetOrigin();
+ EXPECT_EQ(kGetOriginAnchor.x() + kStroke - GetBorderExteriorThickness(),
+ origin.x());
+ EXPECT_EQ(kGetOriginAnchor.y() + kGetOriginAnchor.height() + GetArrowSize(),
+ origin.y());
}
+TEST_F(BubbleBorderGetBoundsOriginTest, ArrowIsHorizontalCenter) {
+ int arrow_offset;
+ gfx::Size size_for_contents_size;
+ CreateBubbleBorderForGetBoundsOrginTest(BubbleBorder::TOP_CENTER,
+ arrow_offset,
+ size_for_contents_size);
+
+ gfx::Point origin;
+
+ SetAlignment(BubbleBorder::ALIGN_ARROW_TO_MID_ANCHOR);
+ origin = GetOrigin();
+ EXPECT_EQ(kGetOriginAnchor.x() + kGetOriginAnchor.width() / 2 - arrow_offset,
+ origin.x());
+ EXPECT_EQ(kGetOriginAnchor.y() + kGetOriginAnchor.height() + GetArrowSize(),
+ origin.y());
+
+ SetAlignment(BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE);
+ origin = GetOrigin();
+ EXPECT_EQ(kGetOriginAnchor.x() + kGetOriginAnchor.width() / 2 - arrow_offset,
+ origin.x());
+ EXPECT_EQ(kGetOriginAnchor.y() + kGetOriginAnchor.height() + GetArrowSize(),
+ origin.y());
+}
+
+TEST_F(BubbleBorderGetBoundsOriginTest, ArrowIsHorizontalRight) {
+ int arrow_offset;
+ gfx::Size size_for_contents_size;
+ CreateBubbleBorderForGetBoundsOrginTest(BubbleBorder::TOP_RIGHT,
+ arrow_offset,
+ size_for_contents_size);
+
+ gfx::Point origin;
+
+ SetAlignment(BubbleBorder::ALIGN_ARROW_TO_MID_ANCHOR);
+ origin = GetOrigin();
+ EXPECT_EQ(kGetOriginAnchor.x()
+ + kGetOriginAnchor.width() / 2
+ + arrow_offset
+ - size_for_contents_size.width(),
+ origin.x());
+ EXPECT_EQ(kGetOriginAnchor.y() + kGetOriginAnchor.height() + GetArrowSize(),
+ origin.y());
+
+ SetAlignment(BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE);
+ origin = GetOrigin();
+ EXPECT_EQ(kGetOriginAnchor.x()
+ + kGetOriginAnchor.width()
+ - size_for_contents_size.width()
+ + GetBorderExteriorThickness()
+ - kStroke,
+ origin.x());
+ EXPECT_EQ(kGetOriginAnchor.y() + kGetOriginAnchor.height() + GetArrowSize(),
+ origin.y());
+}
+
+TEST_F(BubbleBorderGetBoundsOriginTest, ArrowIsHorizontalBottom) {
+ int arrow_offset;
+ gfx::Size size_for_contents_size;
+ CreateBubbleBorderForGetBoundsOrginTest(BubbleBorder::BOTTOM_LEFT,
+ arrow_offset,
+ size_for_contents_size);
+
+ gfx::Point origin;
+
+ SetAlignment(BubbleBorder::ALIGN_ARROW_TO_MID_ANCHOR);
+ origin = GetOrigin();
+ EXPECT_EQ(kGetOriginAnchor.y()
+ - GetArrowSize()
+ - size_for_contents_size.height(),
+ origin.y());
+
+ SetAlignment(BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE);
+ origin = GetOrigin();
+ EXPECT_EQ(kGetOriginAnchor.y()
+ - GetArrowSize()
+ - size_for_contents_size.height(),
+ origin.y());
+}
+
+TEST_F(BubbleBorderGetBoundsOriginTest, ArrowIsVerticalTop) {
+ int arrow_offset;
+ gfx::Size size_for_contents_size;
+ CreateBubbleBorderForGetBoundsOrginTest(BubbleBorder::LEFT_TOP,
+ arrow_offset,
+ size_for_contents_size);
+
+ gfx::Point origin;
+
+ SetAlignment(BubbleBorder::ALIGN_ARROW_TO_MID_ANCHOR);
+ origin = GetOrigin();
+ EXPECT_EQ(kGetOriginAnchor.x()
+ + kGetOriginAnchor.width()
+ + GetArrowSize(),
+ origin.x());
+ EXPECT_EQ(kGetOriginAnchor.y() + kGetOriginAnchor.height() / 2 - arrow_offset,
+ origin.y());
+
+ SetAlignment(BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE);
+ origin = GetOrigin();
+ EXPECT_EQ(kGetOriginAnchor.x() + kGetOriginAnchor.width() + GetArrowSize(),
+ origin.x());
+ EXPECT_EQ(kGetOriginAnchor.y() + kStroke - GetBorderExteriorThickness(),
+ origin.y());
+}
+
+TEST_F(BubbleBorderGetBoundsOriginTest, ArrowIsVerticalCenter) {
+ int arrow_offset;
+ gfx::Size size_for_contents_size;
+ CreateBubbleBorderForGetBoundsOrginTest(BubbleBorder::LEFT_CENTER,
+ arrow_offset,
+ size_for_contents_size);
+
+ gfx::Point origin;
+
+ SetAlignment(BubbleBorder::ALIGN_ARROW_TO_MID_ANCHOR);
+ origin = GetOrigin();
+ EXPECT_EQ(kGetOriginAnchor.x() + kGetOriginAnchor.width() + GetArrowSize(),
+ origin.x());
+ EXPECT_EQ(kGetOriginAnchor.y() + kGetOriginAnchor.height() / 2 - arrow_offset,
+ origin.y());
+
+ SetAlignment(BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE);
+ origin = GetOrigin();
+ EXPECT_EQ(kGetOriginAnchor.x() + kGetOriginAnchor.width() + GetArrowSize(),
+ origin.x());
+ EXPECT_EQ(kGetOriginAnchor.y() + kGetOriginAnchor.height() / 2 - arrow_offset,
+ origin.y());
+}
+
+TEST_F(BubbleBorderGetBoundsOriginTest, ArrowIsVerticalBottom) {
+ int arrow_offset;
+ gfx::Size size_for_contents_size;
+ CreateBubbleBorderForGetBoundsOrginTest(BubbleBorder::LEFT_BOTTOM,
+ arrow_offset,
+ size_for_contents_size);
+
+ gfx::Point origin;
+
+ SetAlignment(BubbleBorder::ALIGN_ARROW_TO_MID_ANCHOR);
+ origin = GetOrigin();
+ EXPECT_EQ(kGetOriginAnchor.x()
+ + kGetOriginAnchor.width()
+ + GetArrowSize(),
+ origin.x());
+ EXPECT_EQ(kGetOriginAnchor.y()
+ + kGetOriginAnchor.height() / 2
+ + arrow_offset
+ - size_for_contents_size.height(),
+ origin.y());
+
+ SetAlignment(BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE);
+ origin = GetOrigin();
+ EXPECT_EQ(kGetOriginAnchor.x() + kGetOriginAnchor.width() + GetArrowSize(),
+ origin.x());
+ EXPECT_EQ(kGetOriginAnchor.y()
+ + kGetOriginAnchor.height()
+ - size_for_contents_size.height()
+ + GetBorderExteriorThickness()
+ - kStroke,
+ origin.y());
+}
+
+TEST_F(BubbleBorderGetBoundsOriginTest, ArrowIsVerticalRight) {
+ int arrow_offset;
+ gfx::Size size_for_contents_size;
+ CreateBubbleBorderForGetBoundsOrginTest(BubbleBorder::RIGHT_CENTER,
+ arrow_offset,
+ size_for_contents_size);
+
+ gfx::Point origin;
+
+ SetAlignment(BubbleBorder::ALIGN_ARROW_TO_MID_ANCHOR);
+ origin = GetOrigin();
+ EXPECT_EQ(kGetOriginAnchor.x()
+ - GetArrowSize()
+ - size_for_contents_size.width(),
+ origin.x());
+
+ SetAlignment(BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE);
+ origin = GetOrigin();
+ EXPECT_EQ(kGetOriginAnchor.x()
+ - GetArrowSize()
+ - size_for_contents_size.width(),
+ origin.x());
+}
+
+TEST_F(BubbleBorderGetBoundsOriginTest, ArrowIsNone) {
+ int arrow_offset;
+ gfx::Size size_for_contents_size;
+ CreateBubbleBorderForGetBoundsOrginTest(BubbleBorder::NONE,
+ arrow_offset,
+ size_for_contents_size);
+
+ gfx::Point origin;
+
+ SetAlignment(BubbleBorder::ALIGN_ARROW_TO_MID_ANCHOR);
+ origin = GetOrigin();
+ EXPECT_EQ(kGetOriginAnchor.x()
+ + (kGetOriginAnchor.width() - size_for_contents_size.width()) / 2,
+ origin.x());
+ EXPECT_EQ(kGetOriginAnchor.y() + kGetOriginAnchor.height(), origin.y());
+
+ SetAlignment(BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE);
+ origin = GetOrigin();
+ EXPECT_EQ(kGetOriginAnchor.x()
+ + (kGetOriginAnchor.width() - size_for_contents_size.width()) / 2,
+ origin.x());
+ EXPECT_EQ(kGetOriginAnchor.y() + kGetOriginAnchor.height(), origin.y());
+}
+
+TEST_F(BubbleBorderGetBoundsOriginTest, ArrowIsFloat) {
+ int arrow_offset;
+ gfx::Size size_for_contents_size;
+ CreateBubbleBorderForGetBoundsOrginTest(BubbleBorder::FLOAT,
+ arrow_offset,
+ size_for_contents_size);
+
+ gfx::Point origin;
+
+ SetAlignment(BubbleBorder::ALIGN_ARROW_TO_MID_ANCHOR);
+ origin = GetOrigin();
+ EXPECT_EQ(kGetOriginAnchor.x()
+ + (kGetOriginAnchor.width()
+ - size_for_contents_size.width()) / 2,
+ origin.x());
+ EXPECT_EQ(kGetOriginAnchor.y()
+ + (kGetOriginAnchor.height()
+ - size_for_contents_size.height()) / 2,
+ origin.y());
+
+ SetAlignment(BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE);
+ origin = GetOrigin();
+ EXPECT_EQ(kGetOriginAnchor.x()
+ + (kGetOriginAnchor.width() - size_for_contents_size.width()) / 2,
+ origin.x());
+ EXPECT_EQ(kGetOriginAnchor.y()
+ + (kGetOriginAnchor.height()
+ - size_for_contents_size.height()) / 2,
+ origin.y());
+}
} // namespace views

Powered by Google App Engine
This is Rietveld 408576698