Chromium Code Reviews| 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..8161826deab1229e9a1d46c7b9e02fb753c08381 100644 |
| --- a/ui/views/bubble/bubble_border_unittest.cc |
| +++ b/ui/views/bubble/bubble_border_unittest.cc |
| @@ -4,6 +4,7 @@ |
| #include "ui/views/bubble/bubble_border.h" |
| +#include "base/memory/scoped_ptr.h" |
| #include "ui/views/test/views_test_base.h" |
| namespace views { |
| @@ -202,39 +203,267 @@ 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); |
| +class BubbleBorderGetBoundsSizeTest : public views::ViewsTestBase { |
|
msw
2014/08/11 22:26:33
Merge the two test classes, they're similar enough
bruthig
2014/08/19 19:02:13
Done.
|
| + public: |
| + const BubbleBorder::Arrow kHorizontalArrow = BubbleBorder::TOP_CENTER; |
|
msw
2014/08/11 22:26:32
nit: inline these constants, they're only used onc
bruthig
2014/08/19 19:02:13
Done.
|
| + const BubbleBorder::Arrow kVerticalArrow = BubbleBorder::LEFT_CENTER; |
| - // 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); |
| + const gfx::Size kSmallSize = gfx::Size(1, 1); |
| + const gfx::Size kMediumSize = gfx::Size(50, 50); |
| - // 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); |
| + BubbleBorderGetBoundsSizeTest() {} |
| + virtual ~BubbleBorderGetBoundsSizeTest() {} |
| - // 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); |
| + virtual gfx::Size GetSize(gfx::Size contents_size) { |
|
msw
2014/08/11 22:26:33
Make these member functions protected and non-virt
bruthig
2014/08/19 19:02:13
Done.
|
| + DCHECK(bubble_border_); |
|
msw
2014/08/11 22:26:32
Remove DCHECKs before accessing the member.
bruthig
2014/08/19 19:02:13
Done.
|
| + return bubble_border_->GetBounds(gfx::Rect(100, 100, 0, 0), |
| + contents_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); |
| + virtual void CreateBubbleBorder(BubbleBorder::Arrow arrow) { |
| + bubble_border_.reset(new BubbleBorder(arrow, |
| + BubbleBorder::NO_SHADOW, |
| + 0 /* color */)); |
|
msw
2014/08/11 22:26:33
nit: just use SK_ColorWHITE or similar and remove
bruthig
2014/08/19 19:02:13
Done.
|
| + } |
| - // 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); |
| + virtual bool HasArrow() { |
| + DCHECK(bubble_border_); |
| + return BubbleBorder::has_arrow(bubble_border_->arrow()); |
| + } |
| + |
| + virtual void SetPaintArrow(BubbleBorder::ArrowPaintType value) { |
| + DCHECK(bubble_border_); |
| + bubble_border_->set_paint_arrow(value); |
| + } |
| + |
| + private: |
| + scoped_ptr<BubbleBorder> bubble_border_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(BubbleBorderGetBoundsSizeTest); |
| +}; |
| + |
| +TEST_F(BubbleBorderGetBoundsSizeTest, WithHorizontalArrow) { |
| + CreateBubbleBorder(kHorizontalArrow); |
| + |
| + ASSERT_TRUE(HasArrow()); |
| + |
| + SetPaintArrow(BubbleBorder::PAINT_NORMAL); |
| + EXPECT_EQ(gfx::Size(45, 29), GetSize(kSmallSize)); |
|
msw
2014/08/11 22:26:32
These values won't be robust to bubble asset chang
bruthig
2014/08/19 19:02:13
Done.
|
| + EXPECT_EQ(gfx::Size(60, 67), GetSize(kMediumSize)); |
| + |
| + SetPaintArrow(BubbleBorder::PAINT_TRANSPARENT); |
| + EXPECT_EQ(gfx::Size(45, 29), GetSize(kSmallSize)); |
| + EXPECT_EQ(gfx::Size(60, 67), GetSize(kMediumSize)); |
| + |
| + SetPaintArrow(BubbleBorder::PAINT_NONE); |
| + EXPECT_EQ(gfx::Size(22, 22), GetSize(kSmallSize)); |
| + EXPECT_EQ(gfx::Size(60, 60), GetSize(kMediumSize)); |
| } |
| +TEST_F(BubbleBorderGetBoundsSizeTest, WithVerticalArrow) { |
| + CreateBubbleBorder(kVerticalArrow); |
| + |
| + ASSERT_TRUE(HasArrow()); |
| + |
| + SetPaintArrow(BubbleBorder::PAINT_NORMAL); |
| + EXPECT_EQ(gfx::Size(29, 45), GetSize(kSmallSize)); |
| + EXPECT_EQ(gfx::Size(67, 60), GetSize(kMediumSize)); |
| + |
| + SetPaintArrow(BubbleBorder::PAINT_TRANSPARENT); |
| + EXPECT_EQ(gfx::Size(29, 45), GetSize(kSmallSize)); |
| + EXPECT_EQ(gfx::Size(67, 60), GetSize(kMediumSize)); |
| + |
| + SetPaintArrow(BubbleBorder::PAINT_NONE); |
| + EXPECT_EQ(gfx::Size(22, 22), GetSize(kSmallSize)); |
| + EXPECT_EQ(gfx::Size(60, 60), GetSize(kMediumSize)); |
| +} |
| + |
| +TEST_F(BubbleBorderGetBoundsSizeTest, WithoutArrow) { |
| + CreateBubbleBorder(BubbleBorder::NONE); |
| + |
| + ASSERT_FALSE(HasArrow()); |
| + |
| + SetPaintArrow(BubbleBorder::PAINT_NORMAL); |
| + EXPECT_EQ(gfx::Size(22, 22), GetSize(kSmallSize)); |
| + EXPECT_EQ(gfx::Size(60, 60), GetSize(kMediumSize)); |
| + |
| + SetPaintArrow(BubbleBorder::PAINT_TRANSPARENT); |
| + EXPECT_EQ(gfx::Size(22, 22), GetSize(kSmallSize)); |
| + EXPECT_EQ(gfx::Size(60, 60), GetSize(kMediumSize)); |
| + |
| + SetPaintArrow(BubbleBorder::PAINT_NONE); |
| + EXPECT_EQ(gfx::Size(22, 22), GetSize(kSmallSize)); |
| + EXPECT_EQ(gfx::Size(60, 60), GetSize(kMediumSize)); |
| +} |
| + |
| +TEST_F(BubbleBorderGetBoundsSizeTest, WithFloatArrow) { |
| + CreateBubbleBorder(BubbleBorder::FLOAT); |
| + |
| + ASSERT_FALSE(HasArrow()); |
| + |
| + SetPaintArrow(BubbleBorder::PAINT_NORMAL); |
| + EXPECT_EQ(gfx::Size(22, 22), GetSize(kSmallSize)); |
| + EXPECT_EQ(gfx::Size(60, 60), GetSize(kMediumSize)); |
| + |
| + SetPaintArrow(BubbleBorder::PAINT_TRANSPARENT); |
| + EXPECT_EQ(gfx::Size(22, 22), GetSize(kSmallSize)); |
| + EXPECT_EQ(gfx::Size(60, 60), GetSize(kMediumSize)); |
| + |
| + SetPaintArrow(BubbleBorder::PAINT_NONE); |
| + EXPECT_EQ(gfx::Size(22, 22), GetSize(kSmallSize)); |
| + EXPECT_EQ(gfx::Size(60, 60), GetSize(kMediumSize)); |
| +} |
| + |
| +class BubbleBorderGetBoundsOriginTest : public views::ViewsTestBase { |
| + public: |
| + const gfx::Rect kEmptyAnchor = gfx::Rect(100, 100, 0, 0); |
| + const gfx::Rect kNonEmptyAnchor = gfx::Rect(100, 100, 20, 20); |
| + |
| + gfx::Size kContentsSize = gfx::Size(50, 50); |
| + |
| + BubbleBorderGetBoundsOriginTest() {} |
| + virtual ~BubbleBorderGetBoundsOriginTest() {} |
| + |
| + virtual void CreateBubbleBorder(BubbleBorder::Arrow arrow) { |
| + bubble_border_.reset(new BubbleBorder(arrow, |
| + BubbleBorder::NO_SHADOW, |
| + 0 /* color */)); |
| + } |
| + |
| + virtual void SetAlignment(BubbleBorder::BubbleAlignment alignment) { |
| + DCHECK(bubble_border_); |
| + bubble_border_->set_alignment(alignment); |
| + } |
| + |
| + virtual gfx::Point GetOrigin(gfx::Rect anchor, gfx::Size contents_size) { |
|
msw
2014/08/11 22:26:33
nit: remove |contents_size| and send |kContentsSiz
bruthig
2014/08/19 19:02:13
Done.
|
| + DCHECK(bubble_border_); |
| + return bubble_border_->GetBounds(anchor, contents_size).origin(); |
| + } |
| + |
| + private: |
| + scoped_ptr<BubbleBorder> bubble_border_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(BubbleBorderGetBoundsOriginTest); |
| +}; |
| + |
| +TEST_F(BubbleBorderGetBoundsOriginTest, ArrowIsHorizontalLeft) { |
| + CreateBubbleBorder(BubbleBorder::TOP_LEFT); |
| + |
| + SetAlignment(BubbleBorder::ALIGN_ARROW_TO_MID_ANCHOR); |
| + EXPECT_EQ(gfx::Point(78, 96), GetOrigin(kEmptyAnchor, kContentsSize)); |
|
msw
2014/08/11 22:26:33
Ditto; can you make this more robust with somethin
bruthig
2014/08/19 19:02:13
Done.
|
| + EXPECT_EQ(gfx::Point(88, 116), GetOrigin(kNonEmptyAnchor, kContentsSize)); |
| + |
| + SetAlignment(BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE); |
| + EXPECT_EQ(gfx::Point(96, 96), GetOrigin(kEmptyAnchor, kContentsSize)); |
| + EXPECT_EQ(gfx::Point(96, 116), GetOrigin(kNonEmptyAnchor, kContentsSize)); |
| +} |
| + |
| +TEST_F(BubbleBorderGetBoundsOriginTest, ArrowIsHorizontalCenter) { |
| + CreateBubbleBorder(BubbleBorder::TOP_CENTER); |
| + |
| + SetAlignment(BubbleBorder::ALIGN_ARROW_TO_MID_ANCHOR); |
| + EXPECT_EQ(gfx::Point(70, 96), GetOrigin(kEmptyAnchor, kContentsSize)); |
| + EXPECT_EQ(gfx::Point(80, 116), GetOrigin(kNonEmptyAnchor, kContentsSize)); |
| + |
| + SetAlignment(BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE); |
| + EXPECT_EQ(gfx::Point(70, 96), GetOrigin(kEmptyAnchor, kContentsSize)); |
| + EXPECT_EQ(gfx::Point(80, 116), GetOrigin(kNonEmptyAnchor, kContentsSize)); |
| +} |
| + |
| +TEST_F(BubbleBorderGetBoundsOriginTest, ArrowIsHorizontalRight) { |
| + CreateBubbleBorder(BubbleBorder::TOP_RIGHT); |
| + |
| + SetAlignment(BubbleBorder::ALIGN_ARROW_TO_MID_ANCHOR); |
| + EXPECT_EQ(gfx::Point(62, 96), GetOrigin(kEmptyAnchor, kContentsSize)); |
| + EXPECT_EQ(gfx::Point(72, 116), GetOrigin(kNonEmptyAnchor, kContentsSize)); |
| + |
| + SetAlignment(BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE); |
| + EXPECT_EQ(gfx::Point(44, 96), GetOrigin(kEmptyAnchor, kContentsSize)); |
| + EXPECT_EQ(gfx::Point(64, 116), GetOrigin(kNonEmptyAnchor, kContentsSize)); |
| +} |
| + |
| +TEST_F(BubbleBorderGetBoundsOriginTest, ArrowIsHorizontalBottom) { |
| + CreateBubbleBorder(BubbleBorder::BOTTOM_LEFT); |
| + |
| + SetAlignment(BubbleBorder::ALIGN_ARROW_TO_MID_ANCHOR); |
| + EXPECT_EQ(gfx::Point(78, 37), GetOrigin(kEmptyAnchor, kContentsSize)); |
| + EXPECT_EQ(gfx::Point(88, 37), GetOrigin(kNonEmptyAnchor, kContentsSize)); |
| + |
| + SetAlignment(BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE); |
| + EXPECT_EQ(gfx::Point(96, 37), GetOrigin(kEmptyAnchor, kContentsSize)); |
| + EXPECT_EQ(gfx::Point(96, 37), GetOrigin(kNonEmptyAnchor, kContentsSize)); |
| +} |
| + |
| +TEST_F(BubbleBorderGetBoundsOriginTest, ArrowIsVerticalTop) { |
| + CreateBubbleBorder(BubbleBorder::LEFT_TOP); |
| + |
| + SetAlignment(BubbleBorder::ALIGN_ARROW_TO_MID_ANCHOR); |
| + EXPECT_EQ(gfx::Point(96, 78), GetOrigin(kEmptyAnchor, kContentsSize)); |
| + EXPECT_EQ(gfx::Point(116, 88), GetOrigin(kNonEmptyAnchor, kContentsSize)); |
| + |
| + SetAlignment(BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE); |
| + EXPECT_EQ(gfx::Point(96, 96), GetOrigin(kEmptyAnchor, kContentsSize)); |
| + EXPECT_EQ(gfx::Point(116, 96), GetOrigin(kNonEmptyAnchor, kContentsSize)); |
| +} |
| + |
| +TEST_F(BubbleBorderGetBoundsOriginTest, ArrowIsVerticalCenter) { |
| + CreateBubbleBorder(BubbleBorder::LEFT_CENTER); |
| + |
| + SetAlignment(BubbleBorder::ALIGN_ARROW_TO_MID_ANCHOR); |
| + EXPECT_EQ(gfx::Point(96, 70), GetOrigin(kEmptyAnchor, kContentsSize)); |
| + EXPECT_EQ(gfx::Point(116, 80), GetOrigin(kNonEmptyAnchor, kContentsSize)); |
| + |
| + SetAlignment(BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE); |
| + EXPECT_EQ(gfx::Point(96, 70), GetOrigin(kEmptyAnchor, kContentsSize)); |
| + EXPECT_EQ(gfx::Point(116, 80), GetOrigin(kNonEmptyAnchor, kContentsSize)); |
| +} |
| + |
| +TEST_F(BubbleBorderGetBoundsOriginTest, ArrowIsVerticalBottom) { |
| + CreateBubbleBorder(BubbleBorder::LEFT_BOTTOM); |
| + |
| + SetAlignment(BubbleBorder::ALIGN_ARROW_TO_MID_ANCHOR); |
| + EXPECT_EQ(gfx::Point(96, 62), GetOrigin(kEmptyAnchor, kContentsSize)); |
| + EXPECT_EQ(gfx::Point(116, 72), GetOrigin(kNonEmptyAnchor, kContentsSize)); |
| + |
| + SetAlignment(BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE); |
| + EXPECT_EQ(gfx::Point(96, 44), GetOrigin(kEmptyAnchor, kContentsSize)); |
| + EXPECT_EQ(gfx::Point(116, 64), GetOrigin(kNonEmptyAnchor, kContentsSize)); |
| +} |
| + |
| +TEST_F(BubbleBorderGetBoundsOriginTest, ArrowIsVerticalRight) { |
| + CreateBubbleBorder(BubbleBorder::RIGHT_CENTER); |
| + |
| + SetAlignment(BubbleBorder::ALIGN_ARROW_TO_MID_ANCHOR); |
| + EXPECT_EQ(gfx::Point(37, 70), GetOrigin(kEmptyAnchor, kContentsSize)); |
| + EXPECT_EQ(gfx::Point(37, 80), GetOrigin(kNonEmptyAnchor, kContentsSize)); |
| + |
| + SetAlignment(BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE); |
| + EXPECT_EQ(gfx::Point(37, 70), GetOrigin(kEmptyAnchor, kContentsSize)); |
| + EXPECT_EQ(gfx::Point(37, 80), GetOrigin(kNonEmptyAnchor, kContentsSize)); |
| +} |
| + |
| +TEST_F(BubbleBorderGetBoundsOriginTest, ArrowIsNone) { |
| + CreateBubbleBorder(BubbleBorder::NONE); |
| + |
| + SetAlignment(BubbleBorder::ALIGN_ARROW_TO_MID_ANCHOR); |
| + EXPECT_EQ(gfx::Point(70, 100), GetOrigin(kEmptyAnchor, kContentsSize)); |
| + EXPECT_EQ(gfx::Point(80, 120), GetOrigin(kNonEmptyAnchor, kContentsSize)); |
| + |
| + SetAlignment(BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE); |
| + EXPECT_EQ(gfx::Point(70, 100), GetOrigin(kEmptyAnchor, kContentsSize)); |
| + EXPECT_EQ(gfx::Point(80, 120), GetOrigin(kNonEmptyAnchor, kContentsSize)); |
| +} |
| + |
| +TEST_F(BubbleBorderGetBoundsOriginTest, ArrowIsFloat) { |
| + CreateBubbleBorder(BubbleBorder::FLOAT); |
| + |
| + SetAlignment(BubbleBorder::ALIGN_ARROW_TO_MID_ANCHOR); |
| + EXPECT_EQ(gfx::Point(70, 70), GetOrigin(kEmptyAnchor, kContentsSize)); |
| + EXPECT_EQ(gfx::Point(80, 80), GetOrigin(kNonEmptyAnchor, kContentsSize)); |
| + |
| + SetAlignment(BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE); |
| + EXPECT_EQ(gfx::Point(70, 70), GetOrigin(kEmptyAnchor, kContentsSize)); |
| + EXPECT_EQ(gfx::Point(80, 80), GetOrigin(kNonEmptyAnchor, kContentsSize)); |
| +} |
| } // namespace views |