Index: ui/views/bubble/bubble_delegate_unittest.cc |
diff --git a/ui/views/bubble/bubble_delegate_unittest.cc b/ui/views/bubble/bubble_delegate_unittest.cc |
index 5cf4a377ec521ae4380d288f3d651bca70993efa..6a8ed12765ec8de55cb71de2f14bfb443e33341e 100644 |
--- a/ui/views/bubble/bubble_delegate_unittest.cc |
+++ b/ui/views/bubble/bubble_delegate_unittest.cc |
@@ -29,6 +29,14 @@ class TestBubbleDelegateView : public BubbleDelegateView { |
} |
virtual ~TestBubbleDelegateView() {} |
+ void SetAnchorRectForTest(gfx::Rect rect) { |
+ set_anchor_rect(rect); |
+ } |
+ |
+ void SetAnchorViewForTest(View* view) { |
+ SetAnchorView(view); |
+ } |
+ |
// BubbleDelegateView overrides: |
virtual View* GetInitiallyFocusedView() OVERRIDE { return view_; } |
virtual gfx::Size GetPreferredSize() OVERRIDE { return gfx::Size(200, 200); } |
@@ -109,6 +117,51 @@ TEST_F(BubbleDelegateTest, CloseAnchorWidget) { |
EXPECT_TRUE(bubble_observer.widget_closed()); |
} |
+TEST_F(BubbleDelegateTest, CloseAnchorViewTest) { |
sky
2013/09/30 14:58:45
If the bubble close on focus/activation loss, then
Mr4D (OOO till 08-26)
2013/09/30 16:22:32
This unit test checks the problematic case where t
sky
2013/09/30 16:44:51
The problem is unit tests run in parallel. That me
|
+ // Create an anchor widget and add a view to be used as an anchor view. |
+ scoped_ptr<Widget> anchor_widget(CreateTestWidget()); |
+ scoped_ptr<View> anchor_view(new View()); |
+ anchor_widget->GetContentsView()->AddChildView(anchor_view.get()); |
+ TestBubbleDelegateView* bubble_delegate = new TestBubbleDelegateView( |
+ anchor_view.get()); |
+ Widget* bubble_widget = BubbleDelegateView::CreateBubble(bubble_delegate); |
+ |
+ // Check that the anchor view is correct and set up an anchor view rect. |
+ // Make sure that this rect will get ignored (as long as the anchor view is |
+ // attached). |
+ EXPECT_EQ(anchor_view, bubble_delegate->GetAnchorView()); |
+ const gfx::Rect set_anchor_rect = gfx::Rect(10, 10, 100, 100); |
+ bubble_delegate->SetAnchorRectForTest(set_anchor_rect); |
+ const gfx::Rect view_rect = bubble_delegate->GetAnchorRect(); |
+ EXPECT_NE(view_rect.ToString(), set_anchor_rect.ToString()); |
+ |
+ // Create the bubble. |
+ bubble_widget->Show(); |
+ EXPECT_EQ(anchor_widget, bubble_delegate->anchor_widget()); |
+ |
+ // Remove now the anchor view and make sure that the original found rect |
+ // is still kept, so that the bubble does not jump when the view gets deleted. |
+ anchor_widget->GetContentsView()->RemoveChildView(anchor_view.get()); |
+ anchor_view.reset(); |
+ EXPECT_EQ(NULL, bubble_delegate->GetAnchorView()); |
+ EXPECT_EQ(view_rect.ToString(), bubble_delegate->GetAnchorRect().ToString()); |
+} |
+ |
+TEST_F(BubbleDelegateTest, TestAnchorRectMovesWithViewTest) { |
+ // Create an anchor widget and add a view to be used as anchor view. |
+ scoped_ptr<Widget> anchor_widget(CreateTestWidget()); |
+ TestBubbleDelegateView* bubble_delegate = new TestBubbleDelegateView( |
+ anchor_widget->GetContentsView()); |
+ BubbleDelegateView::CreateBubble(bubble_delegate); |
+ |
+ anchor_widget->GetContentsView()->SetBounds(10, 10, 100, 100); |
+ const gfx::Rect view_rect = bubble_delegate->GetAnchorRect(); |
+ |
+ anchor_widget->GetContentsView()->SetBounds(20, 10, 100, 100); |
+ const gfx::Rect view_rect_2 = bubble_delegate->GetAnchorRect(); |
+ EXPECT_NE(view_rect.ToString(), view_rect_2.ToString()); |
+} |
+ |
TEST_F(BubbleDelegateTest, ResetAnchorWidget) { |
scoped_ptr<Widget> anchor_widget(CreateTestWidget()); |
BubbleDelegateView* bubble_delegate = new BubbleDelegateView( |