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

Side by Side Diff: ui/views/bubble/bubble_dialog_delegate_unittest.cc

Issue 1809933003: Port BubbleDelegate tests to BubbleDialogDelegate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/views/bubble/bubble_dialog_delegate.h"
6
5 #include <stddef.h> 7 #include <stddef.h>
6 8
7 #include "base/macros.h" 9 #include "base/macros.h"
8 #include "ui/base/hit_test.h" 10 #include "ui/base/hit_test.h"
9 #include "ui/events/event_utils.h" 11 #include "ui/events/event_utils.h"
10 #include "ui/views/bubble/bubble_delegate.h"
11 #include "ui/views/bubble/bubble_frame_view.h" 12 #include "ui/views/bubble/bubble_frame_view.h"
12 #include "ui/views/controls/button/label_button.h" 13 #include "ui/views/controls/button/label_button.h"
13 #include "ui/views/test/test_widget_observer.h" 14 #include "ui/views/test/test_widget_observer.h"
14 #include "ui/views/test/views_test_base.h" 15 #include "ui/views/test/views_test_base.h"
15 #include "ui/views/widget/widget.h" 16 #include "ui/views/widget/widget.h"
16 #include "ui/views/widget/widget_observer.h" 17 #include "ui/views/widget/widget_observer.h"
17 18
18 namespace views { 19 namespace views {
19 20
20 namespace { 21 namespace {
21 22
22 class TestBubbleDelegateView : public BubbleDelegateView { 23 class TestBubbleDialogDelegateView : public BubbleDialogDelegateView {
23 public: 24 public:
24 TestBubbleDelegateView(View* anchor_view) 25 TestBubbleDialogDelegateView(View* anchor_view)
25 : BubbleDelegateView(anchor_view, BubbleBorder::TOP_LEFT), 26 : BubbleDialogDelegateView(anchor_view, BubbleBorder::TOP_LEFT),
26 view_(new View()) { 27 view_(new View()) {
27 view_->SetFocusable(true); 28 view_->SetFocusable(true);
28 AddChildView(view_); 29 AddChildView(view_);
29 } 30 }
30 ~TestBubbleDelegateView() override {} 31 ~TestBubbleDialogDelegateView() override {}
31 32
32 void SetAnchorRectForTest(gfx::Rect rect) { 33 void SetAnchorRectForTest(gfx::Rect rect) { SetAnchorRect(rect); }
33 SetAnchorRect(rect);
34 }
35 34
36 void SetAnchorViewForTest(View* view) { 35 void SetAnchorViewForTest(View* view) { SetAnchorView(view); }
37 SetAnchorView(view);
38 }
39 36
40 // BubbleDelegateView overrides: 37 // BubbleDialogDelegateView overrides:
41 View* GetInitiallyFocusedView() override { return view_; } 38 View* GetInitiallyFocusedView() override { return view_; }
42 gfx::Size GetPreferredSize() const override { return gfx::Size(200, 200); } 39 gfx::Size GetPreferredSize() const override { return gfx::Size(200, 200); }
43 40
44 BubbleFrameView* GetBubbleFrameViewForTest() const { 41 BubbleFrameView* GetBubbleFrameViewForTest() const {
45 return GetBubbleFrameView(); 42 return GetBubbleFrameView();
46 } 43 }
47 44
45 using BubbleDialogDelegateView::GetBubbleFrameView;
msw 2016/03/17 17:28:26 This is redundant with GetBubbleFrameViewForTest;
Evan Stade 2016/03/17 22:41:34 Done.
46
48 private: 47 private:
49 View* view_; 48 View* view_;
50 49
51 DISALLOW_COPY_AND_ASSIGN(TestBubbleDelegateView); 50 DISALLOW_COPY_AND_ASSIGN(TestBubbleDialogDelegateView);
52 }; 51 };
53 52
54 class BubbleDelegateTest : public ViewsTestBase { 53 class BubbleDialogDelegateTest : public ViewsTestBase {
55 public: 54 public:
56 BubbleDelegateTest() {} 55 BubbleDialogDelegateTest() {}
57 ~BubbleDelegateTest() override {} 56 ~BubbleDialogDelegateTest() override {}
58 57
59 // Creates a test widget that owns its native widget. 58 // Creates a test widget that owns its native widget.
60 Widget* CreateTestWidget() { 59 Widget* CreateTestWidget() {
msw 2016/03/17 17:28:26 nit: this could be a static local function, then w
Evan Stade 2016/03/17 22:41:34 CreateParams is a (non-static) ViewsTestBase metho
61 Widget* widget = new Widget(); 60 Widget* widget = new Widget();
62 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_WINDOW); 61 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_WINDOW);
63 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; 62 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
64 widget->Init(params); 63 widget->Init(params);
65 return widget; 64 return widget;
66 } 65 }
67 66
68 private: 67 private:
69 DISALLOW_COPY_AND_ASSIGN(BubbleDelegateTest); 68 DISALLOW_COPY_AND_ASSIGN(BubbleDialogDelegateTest);
70 }; 69 };
71 70
71 /*
msw 2016/03/17 17:28:26 You probably meant to remove this.
Evan Stade 2016/03/17 22:41:34 right you are
72 class TestBubbleDialogDelegateView : public BubbleDialogDelegateView {
73 public
74 TestBubbleDialogDelegateView(View* anchor_view, BubbleBorder border)
75 : BubbleDialogDelegateView(anchor_view, border) {}
76 ~TestBubbleDialogDelegateView() override {}
77
78 private:
79 DISALLOW_COPY_AND_ASSIGN(TestBubbleDialogDelegateView);
80 };
81 */
82
72 } // namespace 83 } // namespace
73 84
74 TEST_F(BubbleDelegateTest, CreateDelegate) { 85 TEST_F(BubbleDialogDelegateTest, CreateDelegate) {
75 scoped_ptr<Widget> anchor_widget(CreateTestWidget()); 86 scoped_ptr<Widget> anchor_widget(CreateTestWidget());
msw 2016/03/17 17:28:26 Every test does this same pattern (anchor widget,
Evan Stade 2016/03/17 22:41:34 that seems tricky because most tests do something
76 BubbleDelegateView* bubble_delegate = new BubbleDelegateView( 87 TestBubbleDialogDelegateView* bubble_delegate =
77 anchor_widget->GetContentsView(), BubbleBorder::NONE); 88 new TestBubbleDialogDelegateView(anchor_widget->GetContentsView());
78 bubble_delegate->set_color(SK_ColorGREEN); 89 bubble_delegate->set_color(SK_ColorGREEN);
79 Widget* bubble_widget = BubbleDelegateView::CreateBubble(bubble_delegate); 90 Widget* bubble_widget =
91 BubbleDialogDelegateView::CreateBubble(bubble_delegate);
80 EXPECT_EQ(bubble_delegate, bubble_widget->widget_delegate()); 92 EXPECT_EQ(bubble_delegate, bubble_widget->widget_delegate());
81 EXPECT_EQ(bubble_widget, bubble_delegate->GetWidget()); 93 EXPECT_EQ(bubble_widget, bubble_delegate->GetWidget());
82 test::TestWidgetObserver bubble_observer(bubble_widget); 94 test::TestWidgetObserver bubble_observer(bubble_widget);
83 bubble_widget->Show(); 95 bubble_widget->Show();
84 96
85 BubbleBorder* border = bubble_delegate->GetBubbleFrameView()->bubble_border(); 97 BubbleBorder* border = bubble_delegate->GetBubbleFrameView()->bubble_border();
86 EXPECT_EQ(bubble_delegate->arrow(), border->arrow()); 98 EXPECT_EQ(bubble_delegate->arrow(), border->arrow());
87 EXPECT_EQ(bubble_delegate->color(), border->background_color()); 99 EXPECT_EQ(bubble_delegate->color(), border->background_color());
88 100
89 EXPECT_FALSE(bubble_observer.widget_closed()); 101 EXPECT_FALSE(bubble_observer.widget_closed());
90 bubble_widget->CloseNow(); 102 bubble_widget->CloseNow();
91 EXPECT_TRUE(bubble_observer.widget_closed()); 103 EXPECT_TRUE(bubble_observer.widget_closed());
92 } 104 }
93 105
94 TEST_F(BubbleDelegateTest, CloseAnchorWidget) { 106 TEST_F(BubbleDialogDelegateTest, CloseAnchorWidget) {
95 scoped_ptr<Widget> anchor_widget(CreateTestWidget()); 107 scoped_ptr<Widget> anchor_widget(CreateTestWidget());
96 BubbleDelegateView* bubble_delegate = new BubbleDelegateView( 108 BubbleDialogDelegateView* bubble_delegate =
97 anchor_widget->GetContentsView(), BubbleBorder::NONE); 109 new TestBubbleDialogDelegateView(anchor_widget->GetContentsView());
98 // Preventing close on deactivate should not prevent closing with the anchor. 110 // Preventing close on deactivate should not prevent closing with the anchor.
99 bubble_delegate->set_close_on_deactivate(false); 111 bubble_delegate->set_close_on_deactivate(false);
100 Widget* bubble_widget = BubbleDelegateView::CreateBubble(bubble_delegate); 112 Widget* bubble_widget =
113 BubbleDialogDelegateView::CreateBubble(bubble_delegate);
101 EXPECT_EQ(bubble_delegate, bubble_widget->widget_delegate()); 114 EXPECT_EQ(bubble_delegate, bubble_widget->widget_delegate());
102 EXPECT_EQ(bubble_widget, bubble_delegate->GetWidget()); 115 EXPECT_EQ(bubble_widget, bubble_delegate->GetWidget());
103 EXPECT_EQ(anchor_widget.get(), bubble_delegate->anchor_widget()); 116 EXPECT_EQ(anchor_widget.get(), bubble_delegate->anchor_widget());
104 test::TestWidgetObserver bubble_observer(bubble_widget); 117 test::TestWidgetObserver bubble_observer(bubble_widget);
105 EXPECT_FALSE(bubble_observer.widget_closed()); 118 EXPECT_FALSE(bubble_observer.widget_closed());
106 119
107 bubble_widget->Show(); 120 bubble_widget->Show();
108 EXPECT_EQ(anchor_widget.get(), bubble_delegate->anchor_widget()); 121 EXPECT_EQ(anchor_widget.get(), bubble_delegate->anchor_widget());
109 EXPECT_FALSE(bubble_observer.widget_closed()); 122 EXPECT_FALSE(bubble_observer.widget_closed());
110 123
111 // TODO(msw): Remove activation hack to prevent bookkeeping errors in: 124 // TODO(msw): Remove activation hack to prevent bookkeeping errors in:
112 // aura::test::TestActivationClient::OnWindowDestroyed(). 125 // aura::test::TestActivationClient::OnWindowDestroyed().
113 scoped_ptr<Widget> smoke_and_mirrors_widget(CreateTestWidget()); 126 scoped_ptr<Widget> smoke_and_mirrors_widget(CreateTestWidget());
114 EXPECT_FALSE(bubble_observer.widget_closed()); 127 EXPECT_FALSE(bubble_observer.widget_closed());
115 128
116 // Ensure that closing the anchor widget also closes the bubble itself. 129 // Ensure that closing the anchor widget also closes the bubble itself.
117 anchor_widget->CloseNow(); 130 anchor_widget->CloseNow();
118 EXPECT_TRUE(bubble_observer.widget_closed()); 131 EXPECT_TRUE(bubble_observer.widget_closed());
119 } 132 }
120 133
121 // This test checks that the bubble delegate is capable to handle an early 134 // This test checks that the bubble delegate is capable to handle an early
122 // destruction of the used anchor view. (Animations and delayed closure of the 135 // destruction of the used anchor view. (Animations and delayed closure of the
123 // bubble will call upon the anchor view to get its location). 136 // bubble will call upon the anchor view to get its location).
124 TEST_F(BubbleDelegateTest, CloseAnchorViewTest) { 137 TEST_F(BubbleDialogDelegateTest, CloseAnchorViewTest) {
125 // Create an anchor widget and add a view to be used as an anchor view. 138 // Create an anchor widget and add a view to be used as an anchor view.
126 scoped_ptr<Widget> anchor_widget(CreateTestWidget()); 139 scoped_ptr<Widget> anchor_widget(CreateTestWidget());
127 scoped_ptr<View> anchor_view(new View()); 140 scoped_ptr<View> anchor_view(new View());
128 anchor_widget->GetContentsView()->AddChildView(anchor_view.get()); 141 anchor_widget->GetContentsView()->AddChildView(anchor_view.get());
129 TestBubbleDelegateView* bubble_delegate = new TestBubbleDelegateView( 142 TestBubbleDialogDelegateView* bubble_delegate =
130 anchor_view.get()); 143 new TestBubbleDialogDelegateView(anchor_view.get());
131 // Prevent flakes by avoiding closing on activation changes. 144 // Prevent flakes by avoiding closing on activation changes.
132 bubble_delegate->set_close_on_deactivate(false); 145 bubble_delegate->set_close_on_deactivate(false);
133 Widget* bubble_widget = BubbleDelegateView::CreateBubble(bubble_delegate); 146 Widget* bubble_widget =
147 BubbleDialogDelegateView::CreateBubble(bubble_delegate);
134 148
135 // Check that the anchor view is correct and set up an anchor view rect. 149 // Check that the anchor view is correct and set up an anchor view rect.
136 // Make sure that this rect will get ignored (as long as the anchor view is 150 // Make sure that this rect will get ignored (as long as the anchor view is
137 // attached). 151 // attached).
138 EXPECT_EQ(anchor_view.get(), bubble_delegate->GetAnchorView()); 152 EXPECT_EQ(anchor_view.get(), bubble_delegate->GetAnchorView());
139 const gfx::Rect set_anchor_rect = gfx::Rect(10, 10, 100, 100); 153 const gfx::Rect set_anchor_rect = gfx::Rect(10, 10, 100, 100);
140 bubble_delegate->SetAnchorRectForTest(set_anchor_rect); 154 bubble_delegate->SetAnchorRectForTest(set_anchor_rect);
141 const gfx::Rect view_rect = bubble_delegate->GetAnchorRect(); 155 const gfx::Rect view_rect = bubble_delegate->GetAnchorRect();
142 EXPECT_NE(view_rect.ToString(), set_anchor_rect.ToString()); 156 EXPECT_NE(view_rect.ToString(), set_anchor_rect.ToString());
143 157
144 // Create the bubble. 158 // Create the bubble.
145 bubble_widget->Show(); 159 bubble_widget->Show();
146 EXPECT_EQ(anchor_widget.get(), bubble_delegate->anchor_widget()); 160 EXPECT_EQ(anchor_widget.get(), bubble_delegate->anchor_widget());
147 161
148 // Remove now the anchor view and make sure that the original found rect 162 // Remove now the anchor view and make sure that the original found rect
149 // is still kept, so that the bubble does not jump when the view gets deleted. 163 // is still kept, so that the bubble does not jump when the view gets deleted.
150 anchor_widget->GetContentsView()->RemoveChildView(anchor_view.get()); 164 anchor_widget->GetContentsView()->RemoveChildView(anchor_view.get());
151 anchor_view.reset(); 165 anchor_view.reset();
152 EXPECT_EQ(NULL, bubble_delegate->GetAnchorView()); 166 EXPECT_EQ(NULL, bubble_delegate->GetAnchorView());
153 EXPECT_EQ(view_rect.ToString(), bubble_delegate->GetAnchorRect().ToString()); 167 EXPECT_EQ(view_rect.ToString(), bubble_delegate->GetAnchorRect().ToString());
154 } 168 }
155 169
156 // Testing that a move of the anchor view will lead to new bubble locations. 170 // Testing that a move of the anchor view will lead to new bubble locations.
157 TEST_F(BubbleDelegateTest, TestAnchorRectMovesWithViewTest) { 171 TEST_F(BubbleDialogDelegateTest, TestAnchorRectMovesWithViewTest) {
158 // Create an anchor widget and add a view to be used as anchor view. 172 // Create an anchor widget and add a view to be used as anchor view.
159 scoped_ptr<Widget> anchor_widget(CreateTestWidget()); 173 scoped_ptr<Widget> anchor_widget(CreateTestWidget());
160 TestBubbleDelegateView* bubble_delegate = new TestBubbleDelegateView( 174 TestBubbleDialogDelegateView* bubble_delegate =
161 anchor_widget->GetContentsView()); 175 new TestBubbleDialogDelegateView(anchor_widget->GetContentsView());
162 BubbleDelegateView::CreateBubble(bubble_delegate); 176 BubbleDialogDelegateView::CreateBubble(bubble_delegate);
163 177
164 anchor_widget->GetContentsView()->SetBounds(10, 10, 100, 100); 178 anchor_widget->GetContentsView()->SetBounds(10, 10, 100, 100);
165 const gfx::Rect view_rect = bubble_delegate->GetAnchorRect(); 179 const gfx::Rect view_rect = bubble_delegate->GetAnchorRect();
166 180
167 anchor_widget->GetContentsView()->SetBounds(20, 10, 100, 100); 181 anchor_widget->GetContentsView()->SetBounds(20, 10, 100, 100);
168 const gfx::Rect view_rect_2 = bubble_delegate->GetAnchorRect(); 182 const gfx::Rect view_rect_2 = bubble_delegate->GetAnchorRect();
169 EXPECT_NE(view_rect.ToString(), view_rect_2.ToString()); 183 EXPECT_NE(view_rect.ToString(), view_rect_2.ToString());
170 } 184 }
171 185
172 TEST_F(BubbleDelegateTest, ResetAnchorWidget) { 186 TEST_F(BubbleDialogDelegateTest, ResetAnchorWidget) {
173 scoped_ptr<Widget> anchor_widget(CreateTestWidget()); 187 scoped_ptr<Widget> anchor_widget(CreateTestWidget());
174 BubbleDelegateView* bubble_delegate = new BubbleDelegateView( 188 BubbleDialogDelegateView* bubble_delegate =
175 anchor_widget->GetContentsView(), BubbleBorder::NONE); 189 new TestBubbleDialogDelegateView(anchor_widget->GetContentsView());
176 190
177 // Make sure the bubble widget is parented to a widget other than the anchor 191 // Make sure the bubble widget is parented to a widget other than the anchor
178 // widget so that closing the anchor widget does not close the bubble widget. 192 // widget so that closing the anchor widget does not close the bubble widget.
179 scoped_ptr<Widget> parent_widget(CreateTestWidget()); 193 scoped_ptr<Widget> parent_widget(CreateTestWidget());
180 bubble_delegate->set_parent_window(parent_widget->GetNativeView()); 194 bubble_delegate->set_parent_window(parent_widget->GetNativeView());
181 // Preventing close on deactivate should not prevent closing with the parent. 195 // Preventing close on deactivate should not prevent closing with the parent.
182 bubble_delegate->set_close_on_deactivate(false); 196 bubble_delegate->set_close_on_deactivate(false);
183 Widget* bubble_widget = BubbleDelegateView::CreateBubble(bubble_delegate); 197 Widget* bubble_widget =
198 BubbleDialogDelegateView::CreateBubble(bubble_delegate);
184 EXPECT_EQ(bubble_delegate, bubble_widget->widget_delegate()); 199 EXPECT_EQ(bubble_delegate, bubble_widget->widget_delegate());
185 EXPECT_EQ(bubble_widget, bubble_delegate->GetWidget()); 200 EXPECT_EQ(bubble_widget, bubble_delegate->GetWidget());
186 EXPECT_EQ(anchor_widget.get(), bubble_delegate->anchor_widget()); 201 EXPECT_EQ(anchor_widget.get(), bubble_delegate->anchor_widget());
187 test::TestWidgetObserver bubble_observer(bubble_widget); 202 test::TestWidgetObserver bubble_observer(bubble_widget);
188 EXPECT_FALSE(bubble_observer.widget_closed()); 203 EXPECT_FALSE(bubble_observer.widget_closed());
189 204
190 // Showing and hiding the bubble widget should have no effect on its anchor. 205 // Showing and hiding the bubble widget should have no effect on its anchor.
191 bubble_widget->Show(); 206 bubble_widget->Show();
192 EXPECT_EQ(anchor_widget.get(), bubble_delegate->anchor_widget()); 207 EXPECT_EQ(anchor_widget.get(), bubble_delegate->anchor_widget());
193 bubble_widget->Hide(); 208 bubble_widget->Hide();
194 EXPECT_EQ(anchor_widget.get(), bubble_delegate->anchor_widget()); 209 EXPECT_EQ(anchor_widget.get(), bubble_delegate->anchor_widget());
195 210
196 // Ensure that closing the anchor widget clears the bubble's reference to that 211 // Ensure that closing the anchor widget clears the bubble's reference to that
197 // anchor widget, but the bubble itself does not close. 212 // anchor widget, but the bubble itself does not close.
198 anchor_widget->CloseNow(); 213 anchor_widget->CloseNow();
199 EXPECT_NE(anchor_widget.get(), bubble_delegate->anchor_widget()); 214 EXPECT_NE(anchor_widget.get(), bubble_delegate->anchor_widget());
200 EXPECT_FALSE(bubble_observer.widget_closed()); 215 EXPECT_FALSE(bubble_observer.widget_closed());
201 216
202 // TODO(msw): Remove activation hack to prevent bookkeeping errors in: 217 // TODO(msw): Remove activation hack to prevent bookkeeping errors in:
203 // aura::test::TestActivationClient::OnWindowDestroyed(). 218 // aura::test::TestActivationClient::OnWindowDestroyed().
204 scoped_ptr<Widget> smoke_and_mirrors_widget(CreateTestWidget()); 219 scoped_ptr<Widget> smoke_and_mirrors_widget(CreateTestWidget());
205 EXPECT_FALSE(bubble_observer.widget_closed()); 220 EXPECT_FALSE(bubble_observer.widget_closed());
206 221
207 // Ensure that closing the parent widget also closes the bubble itself. 222 // Ensure that closing the parent widget also closes the bubble itself.
208 parent_widget->CloseNow(); 223 parent_widget->CloseNow();
209 EXPECT_TRUE(bubble_observer.widget_closed()); 224 EXPECT_TRUE(bubble_observer.widget_closed());
210 } 225 }
211 226
212 TEST_F(BubbleDelegateTest, InitiallyFocusedView) { 227 TEST_F(BubbleDialogDelegateTest, InitiallyFocusedView) {
213 scoped_ptr<Widget> anchor_widget(CreateTestWidget()); 228 scoped_ptr<Widget> anchor_widget(CreateTestWidget());
214 BubbleDelegateView* bubble_delegate = new BubbleDelegateView( 229 BubbleDialogDelegateView* bubble_delegate =
215 anchor_widget->GetContentsView(), BubbleBorder::NONE); 230 new TestBubbleDialogDelegateView(anchor_widget->GetContentsView());
216 Widget* bubble_widget = BubbleDelegateView::CreateBubble(bubble_delegate); 231 Widget* bubble_widget =
232 BubbleDialogDelegateView::CreateBubble(bubble_delegate);
233 bubble_widget->Show();
217 EXPECT_EQ(bubble_delegate->GetInitiallyFocusedView(), 234 EXPECT_EQ(bubble_delegate->GetInitiallyFocusedView(),
218 bubble_widget->GetFocusManager()->GetFocusedView()); 235 bubble_widget->GetFocusManager()->GetFocusedView());
219 bubble_widget->CloseNow(); 236 bubble_widget->CloseNow();
220 } 237 }
221 238
222 TEST_F(BubbleDelegateTest, NonClientHitTest) { 239 TEST_F(BubbleDialogDelegateTest, NonClientHitTest) {
223 scoped_ptr<Widget> anchor_widget(CreateTestWidget()); 240 scoped_ptr<Widget> anchor_widget(CreateTestWidget());
224 TestBubbleDelegateView* bubble_delegate = 241 TestBubbleDialogDelegateView* bubble_delegate =
225 new TestBubbleDelegateView(anchor_widget->GetContentsView()); 242 new TestBubbleDialogDelegateView(anchor_widget->GetContentsView());
226 BubbleDelegateView::CreateBubble(bubble_delegate); 243 BubbleDialogDelegateView::CreateBubble(bubble_delegate);
227 BubbleFrameView* frame = bubble_delegate->GetBubbleFrameView(); 244 BubbleFrameView* frame = bubble_delegate->GetBubbleFrameView();
228 const int border = frame->bubble_border()->GetBorderThickness(); 245 const int border = frame->bubble_border()->GetBorderThickness();
229 246
230 struct { 247 struct {
231 const int point; 248 const int point;
232 const int hit; 249 const int hit;
233 } cases[] = { 250 } cases[] = {
234 { border, HTNOWHERE }, 251 {border, HTNOWHERE}, {border + 50, HTCLIENT}, {1000, HTNOWHERE},
235 { border + 50, HTCLIENT },
236 { 1000, HTNOWHERE },
237 }; 252 };
238 253
239 for (size_t i = 0; i < arraysize(cases); ++i) { 254 for (size_t i = 0; i < arraysize(cases); ++i) {
240 gfx::Point point(cases[i].point, cases[i].point); 255 gfx::Point point(cases[i].point, cases[i].point);
241 EXPECT_EQ(cases[i].hit, frame->NonClientHitTest(point)) 256 EXPECT_EQ(cases[i].hit, frame->NonClientHitTest(point))
242 << " with border: " << border << ", at point " << cases[i].point; 257 << " with border: " << border << ", at point " << cases[i].point;
243 } 258 }
244 } 259 }
245 260
246 TEST_F(BubbleDelegateTest, VisibleWhenAnchorWidgetBoundsChanged) { 261 TEST_F(BubbleDialogDelegateTest, VisibleWhenAnchorWidgetBoundsChanged) {
247 scoped_ptr<Widget> anchor_widget(CreateTestWidget()); 262 scoped_ptr<Widget> anchor_widget(CreateTestWidget());
248 BubbleDelegateView* bubble_delegate = new BubbleDelegateView( 263 BubbleDialogDelegateView* bubble_delegate =
249 anchor_widget->GetContentsView(), BubbleBorder::NONE); 264 new TestBubbleDialogDelegateView(anchor_widget->GetContentsView());
250 Widget* bubble_widget = BubbleDelegateView::CreateBubble(bubble_delegate); 265 Widget* bubble_widget =
266 BubbleDialogDelegateView::CreateBubble(bubble_delegate);
251 test::TestWidgetObserver bubble_observer(bubble_widget); 267 test::TestWidgetObserver bubble_observer(bubble_widget);
252 EXPECT_FALSE(bubble_observer.widget_closed()); 268 EXPECT_FALSE(bubble_observer.widget_closed());
253 269
254 anchor_widget->Show(); 270 anchor_widget->Show();
255 bubble_widget->Show(); 271 bubble_widget->Show();
256 EXPECT_TRUE(bubble_widget->IsVisible()); 272 EXPECT_TRUE(bubble_widget->IsVisible());
257 anchor_widget->SetBounds(gfx::Rect(10, 10, 100, 100)); 273 anchor_widget->SetBounds(gfx::Rect(10, 10, 100, 100));
258 EXPECT_TRUE(bubble_widget->IsVisible()); 274 EXPECT_TRUE(bubble_widget->IsVisible());
259 } 275 }
260 276
261 // Test that setting WidgetDelegate::set_can_activate() to false makes the 277 // Test that setting WidgetDelegate::set_can_activate() to false makes the
262 // widget created via BubbleDelegateView::CreateBubble() not activatable. 278 // widget created via BubbleDialogDelegateView::CreateBubble() not activatable.
263 TEST_F(BubbleDelegateTest, NotActivatable) { 279 TEST_F(BubbleDialogDelegateTest, NotActivatable) {
264 scoped_ptr<Widget> anchor_widget(CreateTestWidget()); 280 scoped_ptr<Widget> anchor_widget(CreateTestWidget());
265 BubbleDelegateView* bubble_delegate = new BubbleDelegateView( 281 BubbleDialogDelegateView* bubble_delegate =
266 anchor_widget->GetContentsView(), BubbleBorder::NONE); 282 new TestBubbleDialogDelegateView(anchor_widget->GetContentsView());
267 bubble_delegate->set_can_activate(false); 283 bubble_delegate->set_can_activate(false);
268 Widget* bubble_widget = BubbleDelegateView::CreateBubble(bubble_delegate); 284 Widget* bubble_widget =
285 BubbleDialogDelegateView::CreateBubble(bubble_delegate);
269 bubble_widget->Show(); 286 bubble_widget->Show();
270 EXPECT_FALSE(bubble_widget->CanActivate()); 287 EXPECT_FALSE(bubble_widget->CanActivate());
271 } 288 }
272 289
273 TEST_F(BubbleDelegateTest, CloseReasons) { 290 TEST_F(BubbleDialogDelegateTest, CloseReasons) {
274 { 291 {
275 scoped_ptr<Widget> anchor_widget(CreateTestWidget()); 292 scoped_ptr<Widget> anchor_widget(CreateTestWidget());
276 BubbleDelegateView* bubble_delegate = new BubbleDelegateView( 293 BubbleDialogDelegateView* bubble_delegate =
277 anchor_widget->GetContentsView(), BubbleBorder::NONE); 294 new TestBubbleDialogDelegateView(anchor_widget->GetContentsView());
278 bubble_delegate->set_close_on_deactivate(true); 295 bubble_delegate->set_close_on_deactivate(true);
279 Widget* bubble_widget = BubbleDelegateView::CreateBubble(bubble_delegate); 296 Widget* bubble_widget =
297 BubbleDialogDelegateView::CreateBubble(bubble_delegate);
280 anchor_widget->Show(); 298 anchor_widget->Show();
281 bubble_widget->Show(); 299 bubble_widget->Show();
282 anchor_widget->Activate(); 300 anchor_widget->Activate();
283 EXPECT_TRUE(bubble_widget->IsClosed()); 301 EXPECT_TRUE(bubble_widget->IsClosed());
284 EXPECT_EQ(BubbleDelegateView::CloseReason::DEACTIVATION,
msw 2016/03/17 17:28:26 Are close reasons no longer important? Rename this
Evan Stade 2016/03/17 22:41:34 Done.
285 bubble_delegate->close_reason());
286 } 302 }
287 303
288 { 304 {
289 scoped_ptr<Widget> anchor_widget(CreateTestWidget()); 305 scoped_ptr<Widget> anchor_widget(CreateTestWidget());
msw 2016/03/17 17:28:26 These should probably be three separate tests...
Evan Stade 2016/03/17 22:41:34 I've seen both styles used. I'm sort of ambivalent
290 BubbleDelegateView* bubble_delegate = new BubbleDelegateView( 306 BubbleDialogDelegateView* bubble_delegate =
291 anchor_widget->GetContentsView(), BubbleBorder::NONE); 307 new TestBubbleDialogDelegateView(anchor_widget->GetContentsView());
292 bubble_delegate->set_close_on_esc(true); 308 Widget* bubble_widget =
293 Widget* bubble_widget = BubbleDelegateView::CreateBubble(bubble_delegate); 309 BubbleDialogDelegateView::CreateBubble(bubble_delegate);
294 bubble_widget->Show(); 310 bubble_widget->Show();
295 // Cast as a test hack to access AcceleratorPressed() (which is protected 311
296 // in BubbleDelegate). 312 ui::KeyEvent escape_event(ui::ET_KEY_PRESSED, ui::VKEY_ESCAPE, ui::EF_NONE);
297 static_cast<View*>(bubble_delegate) 313 bubble_widget->OnKeyEvent(&escape_event);
298 ->AcceleratorPressed(ui::Accelerator(ui::VKEY_ESCAPE, ui::EF_NONE));
299 EXPECT_TRUE(bubble_widget->IsClosed()); 314 EXPECT_TRUE(bubble_widget->IsClosed());
300 EXPECT_EQ(BubbleDelegateView::CloseReason::ESCAPE,
301 bubble_delegate->close_reason());
302 } 315 }
303 316
304 { 317 {
305 scoped_ptr<Widget> anchor_widget(CreateTestWidget()); 318 scoped_ptr<Widget> anchor_widget(CreateTestWidget());
306 TestBubbleDelegateView* bubble_delegate = 319 TestBubbleDialogDelegateView* bubble_delegate =
307 new TestBubbleDelegateView(anchor_widget->GetContentsView()); 320 new TestBubbleDialogDelegateView(anchor_widget->GetContentsView());
308 Widget* bubble_widget = BubbleDelegateView::CreateBubble(bubble_delegate); 321 Widget* bubble_widget =
322 BubbleDialogDelegateView::CreateBubble(bubble_delegate);
309 bubble_widget->Show(); 323 bubble_widget->Show();
310 BubbleFrameView* frame_view = bubble_delegate->GetBubbleFrameViewForTest(); 324 BubbleFrameView* frame_view = bubble_delegate->GetBubbleFrameViewForTest();
311 LabelButton* close_button = frame_view->close_; 325 LabelButton* close_button = frame_view->close_;
312 ASSERT_TRUE(close_button); 326 ASSERT_TRUE(close_button);
313 frame_view->ButtonPressed( 327 frame_view->ButtonPressed(
314 close_button, 328 close_button,
315 ui::MouseEvent(ui::ET_MOUSE_PRESSED, gfx::Point(0, 0), gfx::Point(0, 0), 329 ui::MouseEvent(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(),
316 ui::EventTimeForNow(), ui::EF_NONE, ui::EF_NONE)); 330 ui::EventTimeForNow(), ui::EF_NONE, ui::EF_NONE));
317 EXPECT_TRUE(bubble_widget->IsClosed()); 331 EXPECT_TRUE(bubble_widget->IsClosed());
318 EXPECT_EQ(BubbleDelegateView::CloseReason::CLOSE_BUTTON,
319 bubble_delegate->close_reason());
320 } 332 }
321 } 333 }
322 334
323 } // namespace views 335 } // namespace views
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698