OLD | NEW |
---|---|
(Empty) | |
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. | |
4 | |
5 #include "chrome/browser/ui/panels/base_panel_browser_test.h" | |
6 #include "chrome/browser/ui/panels/detached_panel_strip.h" | |
7 #include "chrome/browser/ui/panels/docked_panel_strip.h" | |
8 #include "chrome/browser/ui/panels/overflow_panel_strip.h" | |
9 #include "chrome/browser/ui/panels/native_panel.h" | |
10 #include "chrome/browser/ui/panels/panel.h" | |
11 #include "chrome/browser/ui/panels/panel_drag_controller.h" | |
12 #include "chrome/browser/ui/panels/panel_manager.h" | |
13 | |
14 class PanelDragBrowserTest : public BasePanelBrowserTest { | |
jennb
2012/03/08 23:41:09
Is the intent to only have inter-strip drag tests
jianli
2012/03/09 21:48:58
No. This test is for both inter-strip and intra-st
| |
15 public: | |
16 PanelDragBrowserTest() : BasePanelBrowserTest() { | |
17 } | |
18 | |
19 virtual ~PanelDragBrowserTest() { | |
20 } | |
21 | |
22 virtual void SetUpOnMainThread() OVERRIDE { | |
23 BasePanelBrowserTest::SetUpOnMainThread(); | |
24 | |
25 // All the tests here assume 800x600 work area. Do the check now. | |
26 DCHECK(PanelManager::GetInstance()->work_area().width() == 800); | |
27 DCHECK(PanelManager::GetInstance()->work_area().height() == 600); | |
28 } | |
29 | |
30 Panel* CreateDockedPanel(const std::string& name, const gfx::Rect& bounds) { | |
31 Panel* panel = CreatePanelWithBounds(name, bounds); | |
32 EXPECT_EQ(PanelStrip::DOCKED, panel->panel_strip()->type()); | |
33 return panel; | |
34 } | |
35 | |
36 Panel* CreateDetachedPanel(const std::string& name, const gfx::Rect& bounds) { | |
37 Panel* panel = CreatePanelWithBounds(name, bounds); | |
38 panel->manager()->MovePanelToStrip(panel, PanelStrip::DETACHED); | |
39 panel->SetPanelBounds(bounds); | |
jennb
2012/03/08 23:41:09
Move this after the EXPECT_EQ as that expect is ch
jianli
2012/03/09 21:48:58
Done.
| |
40 EXPECT_EQ(PanelStrip::DETACHED, panel->panel_strip()->type()); | |
41 return panel; | |
42 } | |
43 | |
44 Panel* CreateOverflowPanel(const std::string& name, const gfx::Rect& bounds) { | |
45 CreatePanelParams params(name, bounds, SHOW_AS_INACTIVE); | |
jennb
2012/03/08 23:41:09
Will the tests work if panel is created as active?
jianli
2012/03/09 21:48:58
Changed to use expected_active_state so that we ca
| |
46 Panel* panel = CreatePanelWithParams(params); | |
47 WaitForLayoutModeChanged(panel, PanelStrip::IN_OVERFLOW); | |
48 return panel; | |
49 } | |
50 | |
51 void DragPanelAndFinish(Panel* panel, const gfx::Point& delta) { | |
jennb
2012/03/08 23:41:09
Comment explaining what is delta. Ditto for DragPa
jianli
2012/03/09 21:48:58
DragPanelAndCancel is indeed not used and thus I r
| |
52 scoped_ptr<NativePanelTesting> panel_testing( | |
53 NativePanelTesting::Create(panel->native_panel())); | |
54 gfx::Point mouse_location(panel->GetBounds().origin()); | |
55 panel_testing->PressLeftMouseButtonTitlebar(mouse_location); | |
56 panel_testing->DragTitlebar(mouse_location.Add(delta)); | |
57 panel_testing->FinishDragTitlebar(); | |
58 } | |
59 | |
60 void DragPanelAndCancel(Panel* panel, const gfx::Point& delta) { | |
61 scoped_ptr<NativePanelTesting> panel_testing( | |
62 NativePanelTesting::Create(panel->native_panel())); | |
63 gfx::Point mouse_location(panel->GetBounds().origin()); | |
64 panel_testing->PressLeftMouseButtonTitlebar(mouse_location); | |
65 panel_testing->DragTitlebar(mouse_location.Add(delta)); | |
66 panel_testing->CancelDragTitlebar(); | |
67 } | |
68 | |
69 static gfx::Point GetDragDeltaToRemainDocked() { | |
70 return gfx::Point( | |
71 -5, | |
72 -(PanelDragController::GetDetachDockedPanelThreshold() / 2)); | |
73 } | |
74 | |
75 static gfx::Point GetDragDeltaToDetach() { | |
76 return gfx::Point( | |
77 -20, | |
78 -(PanelDragController::GetDetachDockedPanelThreshold() + 20)); | |
79 } | |
80 | |
81 static gfx::Point GetDragDeltaToRemainDetached(Panel* panel) { | |
82 int distance = panel->manager()->docked_strip()->display_area().bottom() - | |
83 panel->GetBounds().bottom(); | |
84 return gfx::Point( | |
85 -5, | |
86 distance - PanelDragController::GetDockDetachedPanelThreshold() * 2); | |
87 } | |
88 | |
89 static gfx::Point GetDragDeltaToAttach(Panel* panel) { | |
90 int distance = panel->manager()->docked_strip()->display_area().bottom() - | |
91 panel->GetBounds().bottom(); | |
92 return gfx::Point( | |
93 -20, | |
94 distance - PanelDragController::GetDockDetachedPanelThreshold() / 2); | |
95 } | |
96 }; | |
97 | |
98 IN_PROC_BROWSER_TEST_F(PanelDragBrowserTest, Detach) { | |
99 PanelManager* panel_manager = PanelManager::GetInstance(); | |
100 DockedPanelStrip* docked_strip = panel_manager->docked_strip(); | |
101 DetachedPanelStrip* detached_strip = panel_manager->detached_strip(); | |
102 | |
103 // Create one docked panel. | |
104 Panel* panel = CreateDockedPanel("1", gfx::Rect(0, 0, 100, 100)); | |
105 ASSERT_EQ(1, docked_strip->num_panels()); | |
106 ASSERT_EQ(0, detached_strip->num_panels()); | |
107 | |
108 gfx::Rect panel_old_bounds = panel->GetBounds(); | |
109 | |
110 // Press on title-bar. | |
111 scoped_ptr<NativePanelTesting> panel_testing( | |
112 NativePanelTesting::Create(panel->native_panel())); | |
113 gfx::Point mouse_location(panel->GetBounds().origin()); | |
114 panel_testing->PressLeftMouseButtonTitlebar(mouse_location); | |
115 | |
116 // Drag up the panel in a small offset that does not trigger the detach. | |
117 // Expect that the panel is still docked and only x coordinate of its position | |
118 // is changed. | |
119 gfx::Point drag_delta_to_remain_docked = GetDragDeltaToRemainDocked(); | |
120 mouse_location = mouse_location.Add(drag_delta_to_remain_docked); | |
121 panel_testing->DragTitlebar(mouse_location); | |
122 ASSERT_EQ(1, docked_strip->num_panels()); | |
123 ASSERT_EQ(0, detached_strip->num_panels()); | |
124 EXPECT_EQ(PanelStrip::DOCKED, panel->panel_strip()->type()); | |
125 gfx::Rect panel_new_bounds = panel_old_bounds; | |
126 panel_new_bounds.Offset(drag_delta_to_remain_docked.x(), 0); | |
127 EXPECT_EQ(panel_new_bounds, panel->GetBounds()); | |
128 | |
129 // Continue dragging up the panel in big offset that triggers the detach. | |
130 // Expect that the panel is previewed as detached. | |
131 gfx::Point drag_delta_to_detach = GetDragDeltaToDetach(); | |
132 mouse_location = mouse_location.Add(drag_delta_to_detach); | |
133 panel_testing->DragTitlebar(mouse_location); | |
134 ASSERT_EQ(0, docked_strip->num_panels()); | |
135 ASSERT_EQ(1, detached_strip->num_panels()); | |
136 EXPECT_EQ(PanelStrip::DETACHED, panel->panel_strip()->type()); | |
137 panel_new_bounds.Offset( | |
138 drag_delta_to_detach.x(), | |
139 drag_delta_to_detach.y() + drag_delta_to_remain_docked.y()); | |
140 EXPECT_EQ(panel_new_bounds, panel->GetBounds()); | |
141 | |
142 // Finish the drag. | |
143 // Expect that the panel stays as detached. | |
144 panel_testing->FinishDragTitlebar(); | |
145 ASSERT_EQ(0, docked_strip->num_panels()); | |
146 ASSERT_EQ(1, detached_strip->num_panels()); | |
147 EXPECT_EQ(PanelStrip::DETACHED, panel->panel_strip()->type()); | |
148 EXPECT_EQ(panel_new_bounds, panel->GetBounds()); | |
149 | |
150 panel_manager->CloseAll(); | |
151 } | |
152 | |
153 IN_PROC_BROWSER_TEST_F(PanelDragBrowserTest, DetachAndCancel) { | |
154 PanelManager* panel_manager = PanelManager::GetInstance(); | |
155 DockedPanelStrip* docked_strip = panel_manager->docked_strip(); | |
156 DetachedPanelStrip* detached_strip = panel_manager->detached_strip(); | |
157 | |
158 // Create one docked panel. | |
159 Panel* panel = CreateDockedPanel("1", gfx::Rect(0, 0, 100, 100)); | |
160 ASSERT_EQ(1, docked_strip->num_panels()); | |
161 ASSERT_EQ(0, detached_strip->num_panels()); | |
162 | |
163 gfx::Rect panel_old_bounds = panel->GetBounds(); | |
164 | |
165 // Press on title-bar. | |
166 scoped_ptr<NativePanelTesting> panel_testing( | |
167 NativePanelTesting::Create(panel->native_panel())); | |
168 gfx::Point mouse_location(panel->GetBounds().origin()); | |
169 panel_testing->PressLeftMouseButtonTitlebar(mouse_location); | |
170 | |
171 // Drag up the panel in a small offset that does not trigger the detach. | |
172 // Expect that the panel is still docked and only x coordinate of its position | |
173 // is changed. | |
174 gfx::Point drag_delta_to_remain_docked = GetDragDeltaToRemainDocked(); | |
175 mouse_location = mouse_location.Add(drag_delta_to_remain_docked); | |
176 panel_testing->DragTitlebar(mouse_location); | |
177 ASSERT_EQ(1, docked_strip->num_panels()); | |
178 ASSERT_EQ(0, detached_strip->num_panels()); | |
179 EXPECT_EQ(PanelStrip::DOCKED, panel->panel_strip()->type()); | |
180 gfx::Rect panel_new_bounds = panel_old_bounds; | |
181 panel_new_bounds.Offset(drag_delta_to_remain_docked.x(), 0); | |
182 EXPECT_EQ(panel_new_bounds, panel->GetBounds()); | |
183 | |
184 // Continue dragging up the panel in big offset that triggers the detach. | |
185 // Expect that the panel is previewed as detached. | |
186 gfx::Point drag_delta_to_detach = GetDragDeltaToDetach(); | |
187 mouse_location = mouse_location.Add(drag_delta_to_detach); | |
188 panel_testing->DragTitlebar(mouse_location); | |
189 ASSERT_EQ(0, docked_strip->num_panels()); | |
190 ASSERT_EQ(1, detached_strip->num_panels()); | |
191 EXPECT_EQ(PanelStrip::DETACHED, panel->panel_strip()->type()); | |
192 panel_new_bounds.Offset( | |
193 drag_delta_to_detach.x(), | |
194 drag_delta_to_detach.y() + drag_delta_to_remain_docked.y()); | |
195 EXPECT_EQ(panel_new_bounds, panel->GetBounds()); | |
196 | |
197 // Cancel the drag. | |
198 // Expect that the panel is back as docked. | |
199 panel_testing->CancelDragTitlebar(); | |
200 ASSERT_EQ(1, docked_strip->num_panels()); | |
201 ASSERT_EQ(0, detached_strip->num_panels()); | |
202 EXPECT_EQ(PanelStrip::DOCKED, panel->panel_strip()->type()); | |
203 EXPECT_EQ(panel_old_bounds, panel->GetBounds()); | |
204 | |
205 panel_manager->CloseAll(); | |
206 } | |
207 | |
208 IN_PROC_BROWSER_TEST_F(PanelDragBrowserTest, Attach) { | |
209 PanelManager* panel_manager = PanelManager::GetInstance(); | |
210 DockedPanelStrip* docked_strip = panel_manager->docked_strip(); | |
211 DetachedPanelStrip* detached_strip = panel_manager->detached_strip(); | |
212 | |
213 // Create one detached panel. | |
214 Panel* panel = CreateDetachedPanel("1", gfx::Rect(400, 300, 100, 100)); | |
215 ASSERT_EQ(0, docked_strip->num_panels()); | |
216 ASSERT_EQ(1, detached_strip->num_panels()); | |
217 EXPECT_EQ(PanelStrip::DETACHED, panel->panel_strip()->type()); | |
218 | |
219 gfx::Rect panel_old_bounds = panel->GetBounds(); | |
220 | |
221 // Press on title-bar. | |
222 scoped_ptr<NativePanelTesting> panel_testing( | |
223 NativePanelTesting::Create(panel->native_panel())); | |
224 gfx::Point mouse_location(panel->GetBounds().origin()); | |
225 panel_testing->PressLeftMouseButtonTitlebar(mouse_location); | |
226 | |
227 // Drag down the panel but not close enough to the bottom of work area. | |
228 // Expect that the panel is still detached. | |
229 gfx::Point drag_delta_to_remain_detached = | |
230 GetDragDeltaToRemainDetached(panel); | |
231 mouse_location = mouse_location.Add(drag_delta_to_remain_detached); | |
232 panel_testing->DragTitlebar(mouse_location); | |
233 ASSERT_EQ(0, docked_strip->num_panels()); | |
234 ASSERT_EQ(1, detached_strip->num_panels()); | |
235 EXPECT_EQ(PanelStrip::DETACHED, panel->panel_strip()->type()); | |
236 gfx::Rect panel_new_bounds = panel_old_bounds; | |
237 panel_new_bounds.Offset(drag_delta_to_remain_detached); | |
238 EXPECT_EQ(panel_new_bounds, panel->GetBounds()); | |
239 | |
240 // Continue dragging down the panel to make it close enough to the bottom of | |
241 // work area. | |
242 // Expect that the panel is previewed as docked. | |
243 gfx::Point drag_delta_to_attach = GetDragDeltaToAttach(panel); | |
244 mouse_location = mouse_location.Add(drag_delta_to_attach); | |
245 panel_testing->DragTitlebar(mouse_location); | |
246 ASSERT_EQ(1, docked_strip->num_panels()); | |
247 ASSERT_EQ(0, detached_strip->num_panels()); | |
248 EXPECT_EQ(PanelStrip::DOCKED, panel->panel_strip()->type()); | |
249 panel_new_bounds.Offset(drag_delta_to_attach); | |
250 EXPECT_EQ(panel_new_bounds, panel->GetBounds()); | |
251 | |
252 // Finish the drag. | |
253 // Expect that the panel stays as docked and moves to the final position. | |
254 panel_testing->FinishDragTitlebar(); | |
255 ASSERT_EQ(1, docked_strip->num_panels()); | |
256 ASSERT_EQ(0, detached_strip->num_panels()); | |
257 EXPECT_EQ(PanelStrip::DOCKED, panel->panel_strip()->type()); | |
258 panel_new_bounds.set_x( | |
259 docked_strip->StartingRightPosition() - panel_new_bounds.width()); | |
260 panel_new_bounds.set_y( | |
261 docked_strip->display_area().bottom() - panel_new_bounds.height()); | |
262 EXPECT_EQ(panel_new_bounds, panel->GetBounds()); | |
263 | |
264 panel_manager->CloseAll(); | |
265 } | |
266 | |
267 IN_PROC_BROWSER_TEST_F(PanelDragBrowserTest, AttachAndCancel) { | |
268 PanelManager* panel_manager = PanelManager::GetInstance(); | |
269 DockedPanelStrip* docked_strip = panel_manager->docked_strip(); | |
270 DetachedPanelStrip* detached_strip = panel_manager->detached_strip(); | |
271 | |
272 // Create one detached panel. | |
273 Panel* panel = CreateDetachedPanel("1", gfx::Rect(400, 300, 100, 100)); | |
274 ASSERT_EQ(0, docked_strip->num_panels()); | |
275 ASSERT_EQ(1, detached_strip->num_panels()); | |
276 EXPECT_EQ(PanelStrip::DETACHED, panel->panel_strip()->type()); | |
277 | |
278 gfx::Rect panel_old_bounds = panel->GetBounds(); | |
279 | |
280 // Press on title-bar. | |
281 scoped_ptr<NativePanelTesting> panel_testing( | |
282 NativePanelTesting::Create(panel->native_panel())); | |
283 gfx::Point mouse_location(panel->GetBounds().origin()); | |
284 panel_testing->PressLeftMouseButtonTitlebar(mouse_location); | |
285 | |
286 // Drag down the panel but not close enough to the bottom of work area. | |
287 // Expect that the panel is still detached. | |
288 gfx::Point drag_delta_to_remain_detached = | |
289 GetDragDeltaToRemainDetached(panel); | |
290 mouse_location = mouse_location.Add(drag_delta_to_remain_detached); | |
291 panel_testing->DragTitlebar(mouse_location); | |
292 ASSERT_EQ(0, docked_strip->num_panels()); | |
293 ASSERT_EQ(1, detached_strip->num_panels()); | |
294 EXPECT_EQ(PanelStrip::DETACHED, panel->panel_strip()->type()); | |
295 gfx::Rect panel_new_bounds = panel_old_bounds; | |
296 panel_new_bounds.Offset(drag_delta_to_remain_detached); | |
297 EXPECT_EQ(panel_new_bounds, panel->GetBounds()); | |
298 | |
299 // Continue dragging down the panel to make it close enough to the bottom of | |
300 // work area. | |
301 // Expect that the panel is previewed as docked. | |
302 gfx::Point drag_delta_to_attach = GetDragDeltaToAttach(panel); | |
303 mouse_location = mouse_location.Add(drag_delta_to_attach); | |
304 panel_testing->DragTitlebar(mouse_location); | |
305 ASSERT_EQ(1, docked_strip->num_panels()); | |
306 ASSERT_EQ(0, detached_strip->num_panels()); | |
307 EXPECT_EQ(PanelStrip::DOCKED, panel->panel_strip()->type()); | |
308 panel_new_bounds.Offset(drag_delta_to_attach); | |
309 EXPECT_EQ(panel_new_bounds, panel->GetBounds()); | |
310 | |
311 // Cancel the drag. | |
312 // Expect that the panel is back as detached. | |
313 panel_testing->CancelDragTitlebar(); | |
314 ASSERT_EQ(0, docked_strip->num_panels()); | |
315 ASSERT_EQ(1, detached_strip->num_panels()); | |
316 EXPECT_EQ(PanelStrip::DETACHED, panel->panel_strip()->type()); | |
317 EXPECT_EQ(panel_old_bounds, panel->GetBounds()); | |
318 | |
319 panel_manager->CloseAll(); | |
320 } | |
321 | |
322 IN_PROC_BROWSER_TEST_F(PanelDragBrowserTest, DetachAttachAndCancel) { | |
323 PanelManager* panel_manager = PanelManager::GetInstance(); | |
324 DockedPanelStrip* docked_strip = panel_manager->docked_strip(); | |
325 DetachedPanelStrip* detached_strip = panel_manager->detached_strip(); | |
326 | |
327 // Create one docked panel. | |
328 Panel* panel = CreateDockedPanel("1", gfx::Rect(0, 0, 100, 100)); | |
329 ASSERT_EQ(1, docked_strip->num_panels()); | |
330 ASSERT_EQ(0, detached_strip->num_panels()); | |
331 | |
332 gfx::Rect panel_old_bounds = panel->GetBounds(); | |
333 | |
334 // Press on title-bar. | |
335 scoped_ptr<NativePanelTesting> panel_testing( | |
336 NativePanelTesting::Create(panel->native_panel())); | |
337 gfx::Point mouse_location(panel->GetBounds().origin()); | |
338 panel_testing->PressLeftMouseButtonTitlebar(mouse_location); | |
339 | |
340 // Drag up the panel to trigger the detach. | |
341 // Expect that the panel is previewed as detached. | |
342 gfx::Point drag_delta_to_detach = GetDragDeltaToDetach(); | |
343 mouse_location = mouse_location.Add(drag_delta_to_detach); | |
344 panel_testing->DragTitlebar(mouse_location); | |
345 ASSERT_EQ(0, docked_strip->num_panels()); | |
346 ASSERT_EQ(1, detached_strip->num_panels()); | |
347 EXPECT_EQ(PanelStrip::DETACHED, panel->panel_strip()->type()); | |
348 gfx::Rect panel_new_bounds = panel_old_bounds; | |
349 panel_new_bounds.Offset(drag_delta_to_detach); | |
350 EXPECT_EQ(panel_new_bounds, panel->GetBounds()); | |
351 | |
352 // Continue dragging down the panel to trigger the re-attach. | |
353 gfx::Point drag_delta_to_reattach = GetDragDeltaToAttach(panel); | |
354 mouse_location = mouse_location.Add(drag_delta_to_reattach); | |
355 panel_testing->DragTitlebar(mouse_location); | |
356 ASSERT_EQ(1, docked_strip->num_panels()); | |
357 ASSERT_EQ(0, detached_strip->num_panels()); | |
358 EXPECT_EQ(PanelStrip::DOCKED, panel->panel_strip()->type()); | |
359 panel_new_bounds.Offset(drag_delta_to_reattach); | |
360 EXPECT_EQ(panel_new_bounds, panel->GetBounds()); | |
361 | |
362 // Continue dragging up the panel to trigger the detach again. | |
363 gfx::Point drag_delta_to_detach_again = GetDragDeltaToDetach(); | |
364 mouse_location = mouse_location.Add(drag_delta_to_detach_again); | |
365 panel_testing->DragTitlebar(mouse_location); | |
366 ASSERT_EQ(0, docked_strip->num_panels()); | |
367 ASSERT_EQ(1, detached_strip->num_panels()); | |
368 EXPECT_EQ(PanelStrip::DETACHED, panel->panel_strip()->type()); | |
369 panel_new_bounds.Offset(drag_delta_to_detach_again); | |
370 EXPECT_EQ(panel_new_bounds, panel->GetBounds()); | |
371 | |
372 // Cancel the drag. | |
373 // Expect that the panel stays as docked. | |
374 panel_testing->CancelDragTitlebar(); | |
375 ASSERT_EQ(1, docked_strip->num_panels()); | |
376 ASSERT_EQ(0, detached_strip->num_panels()); | |
377 EXPECT_EQ(PanelStrip::DOCKED, panel->panel_strip()->type()); | |
378 EXPECT_EQ(panel_old_bounds, panel->GetBounds()); | |
379 | |
380 panel_manager->CloseAll(); | |
381 } | |
382 | |
383 IN_PROC_BROWSER_TEST_F(PanelDragBrowserTest, DetachWithOverflow) { | |
384 PanelManager* panel_manager = PanelManager::GetInstance(); | |
385 DockedPanelStrip* docked_strip = panel_manager->docked_strip(); | |
386 DetachedPanelStrip* detached_strip = panel_manager->detached_strip(); | |
387 OverflowPanelStrip* overflow_strip = panel_manager->overflow_strip(); | |
388 | |
389 gfx::Point drag_delta_to_detach = GetDragDeltaToDetach(); | |
390 | |
391 // Create some docked and overflow panels. | |
392 // docked: P3 P2 P1 | |
jennb
2012/03/08 23:41:09
This is different from how you commented the panel
jianli
2012/03/09 21:48:58
Done.
| |
393 // overflow: P5 P4 | |
394 Panel* panel1 = CreateDockedPanel("1", gfx::Rect(0, 0, 200, 100)); | |
395 Panel* panel2 = CreateDockedPanel("2", gfx::Rect(0, 0, 200, 100)); | |
396 Panel* panel3 = CreateDockedPanel("3", gfx::Rect(0, 0, 200, 100)); | |
397 Panel* panel4 = CreateOverflowPanel("4", gfx::Rect(0, 0, 200, 100)); | |
398 Panel* panel5 = CreateOverflowPanel("5", gfx::Rect(0, 0, 200, 100)); | |
399 ASSERT_EQ(0, detached_strip->num_panels()); | |
400 ASSERT_EQ(3, docked_strip->num_panels()); | |
401 ASSERT_EQ(2, overflow_strip->num_panels()); | |
402 | |
403 gfx::Point docked_position1 = panel1->GetBounds().origin(); | |
404 gfx::Point docked_position2 = panel2->GetBounds().origin(); | |
405 gfx::Point docked_position3 = panel3->GetBounds().origin(); | |
406 | |
407 // Drag to detach the middle docked panel. | |
408 // Expect to have: | |
409 // detached: P2 | |
410 // docked: P4 P3 P1 | |
411 // overflow: P5 | |
412 DragPanelAndFinish(panel2, drag_delta_to_detach); | |
413 ASSERT_EQ(1, detached_strip->num_panels()); | |
414 ASSERT_EQ(3, docked_strip->num_panels()); | |
415 ASSERT_EQ(1, overflow_strip->num_panels()); | |
416 EXPECT_EQ(PanelStrip::DOCKED, panel1->panel_strip()->type()); | |
417 EXPECT_EQ(PanelStrip::DETACHED, panel2->panel_strip()->type()); | |
418 EXPECT_EQ(PanelStrip::DOCKED, panel3->panel_strip()->type()); | |
419 EXPECT_EQ(PanelStrip::DOCKED, panel4->panel_strip()->type()); | |
420 EXPECT_EQ(PanelStrip::IN_OVERFLOW, panel5->panel_strip()->type()); | |
421 EXPECT_EQ(docked_position1, panel1->GetBounds().origin()); | |
422 gfx::Point panel2_new_position = docked_position2.Add(drag_delta_to_detach); | |
423 EXPECT_EQ(panel2_new_position, panel2->GetBounds().origin()); | |
424 EXPECT_EQ(docked_position2, panel3->GetBounds().origin()); | |
425 EXPECT_EQ(docked_position3, panel4->GetBounds().origin()); | |
426 | |
427 // Drag to detach the left-most docked panel. | |
428 // Expect to have: | |
429 // detached: P2 P4 | |
430 // docked: P5 P3 P1 | |
431 DragPanelAndFinish(panel4, drag_delta_to_detach); | |
432 ASSERT_EQ(2, detached_strip->num_panels()); | |
433 ASSERT_EQ(3, docked_strip->num_panels()); | |
434 ASSERT_EQ(0, overflow_strip->num_panels()); | |
435 EXPECT_EQ(PanelStrip::DOCKED, panel1->panel_strip()->type()); | |
436 EXPECT_EQ(PanelStrip::DETACHED, panel2->panel_strip()->type()); | |
437 EXPECT_EQ(PanelStrip::DOCKED, panel3->panel_strip()->type()); | |
438 EXPECT_EQ(PanelStrip::DETACHED, panel4->panel_strip()->type()); | |
439 EXPECT_EQ(PanelStrip::DOCKED, panel5->panel_strip()->type()); | |
440 EXPECT_EQ(docked_position1, panel1->GetBounds().origin()); | |
441 EXPECT_EQ(panel2_new_position, panel2->GetBounds().origin()); | |
442 EXPECT_EQ(docked_position2, panel3->GetBounds().origin()); | |
443 gfx::Point panel4_new_position = docked_position3.Add(drag_delta_to_detach); | |
444 EXPECT_EQ(panel4_new_position, panel4->GetBounds().origin()); | |
445 EXPECT_EQ(docked_position3, panel5->GetBounds().origin()); | |
446 | |
447 // Drag to detach the right-most docked panel. | |
448 // Expect to have: | |
449 // detached: P1 P2 P4 | |
450 // docked: P5 P3 | |
451 DragPanelAndFinish(panel1, drag_delta_to_detach); | |
452 ASSERT_EQ(3, detached_strip->num_panels()); | |
453 ASSERT_EQ(2, docked_strip->num_panels()); | |
454 ASSERT_EQ(0, overflow_strip->num_panels()); | |
455 EXPECT_EQ(PanelStrip::DETACHED, panel1->panel_strip()->type()); | |
456 EXPECT_EQ(PanelStrip::DETACHED, panel2->panel_strip()->type()); | |
457 EXPECT_EQ(PanelStrip::DOCKED, panel3->panel_strip()->type()); | |
458 EXPECT_EQ(PanelStrip::DETACHED, panel4->panel_strip()->type()); | |
459 EXPECT_EQ(PanelStrip::DOCKED, panel5->panel_strip()->type()); | |
460 gfx::Point panel1_new_position = docked_position1.Add(drag_delta_to_detach); | |
461 EXPECT_EQ(panel1_new_position, panel1->GetBounds().origin()); | |
462 EXPECT_EQ(panel2_new_position, panel2->GetBounds().origin()); | |
463 EXPECT_EQ(docked_position1, panel3->GetBounds().origin()); | |
464 EXPECT_EQ(panel4_new_position, panel4->GetBounds().origin()); | |
465 EXPECT_EQ(docked_position2, panel5->GetBounds().origin()); | |
466 | |
467 panel_manager->CloseAll(); | |
468 } | |
469 | |
470 IN_PROC_BROWSER_TEST_F(PanelDragBrowserTest, AttachWithOverflow) { | |
471 PanelManager* panel_manager = PanelManager::GetInstance(); | |
472 DockedPanelStrip* docked_strip = panel_manager->docked_strip(); | |
473 DetachedPanelStrip* detached_strip = panel_manager->detached_strip(); | |
474 OverflowPanelStrip* overflow_strip = panel_manager->overflow_strip(); | |
475 | |
476 gfx::Point drag_delta_to_detach = GetDragDeltaToDetach(); | |
477 | |
478 // Create some detached, docked and overflow panels. | |
479 // detached: P1 P2 P3 | |
480 // docked: P6 P5 P4 | |
481 // overflow: P7 | |
482 Panel* panel1 = CreateDetachedPanel("1", gfx::Rect(100, 300, 200, 100)); | |
483 Panel* panel2 = CreateDetachedPanel("2", gfx::Rect(200, 300, 200, 100)); | |
484 Panel* panel3 = CreateDetachedPanel("3", gfx::Rect(400, 300, 200, 100)); | |
485 Panel* panel4 = CreateDockedPanel("4", gfx::Rect(0, 0, 200, 100)); | |
486 Panel* panel5 = CreateDockedPanel("5", gfx::Rect(0, 0, 200, 100)); | |
487 Panel* panel6 = CreateDockedPanel("6", gfx::Rect(0, 0, 200, 100)); | |
488 Panel* panel7 = CreateOverflowPanel("7", gfx::Rect(0, 0, 200, 100)); | |
489 ASSERT_EQ(3, detached_strip->num_panels()); | |
490 ASSERT_EQ(3, docked_strip->num_panels()); | |
491 ASSERT_EQ(1, overflow_strip->num_panels()); | |
492 | |
493 gfx::Point detached_position1 = panel1->GetBounds().origin(); | |
494 gfx::Point detached_position2 = panel2->GetBounds().origin(); | |
495 gfx::Point detached_position3 = panel3->GetBounds().origin(); | |
496 gfx::Point docked_position1 = panel4->GetBounds().origin(); | |
497 gfx::Point docked_position2 = panel5->GetBounds().origin(); | |
498 gfx::Point docked_position3 = panel6->GetBounds().origin(); | |
499 | |
500 // Drag to attach a detached panel between 2 docked panels. | |
501 // Expect to have: | |
502 // detached: P1 P2 | |
503 // docked: P5 P3 P4 | |
504 // overflow: P7 P6 | |
505 gfx::Point drag_delta_to_attach( | |
506 docked_position2.x() - detached_position3.x() + 10, 210); | |
jennb
2012/03/08 23:41:09
This formula for X is non-obvious. Perhaps this te
jianli
2012/03/09 21:48:58
Done.
| |
507 DragPanelAndFinish(panel3, drag_delta_to_attach); | |
508 ASSERT_EQ(2, detached_strip->num_panels()); | |
509 ASSERT_EQ(3, docked_strip->num_panels()); | |
510 ASSERT_EQ(2, overflow_strip->num_panels()); | |
511 EXPECT_EQ(PanelStrip::DETACHED, panel1->panel_strip()->type()); | |
512 EXPECT_EQ(PanelStrip::DETACHED, panel2->panel_strip()->type()); | |
513 EXPECT_EQ(PanelStrip::DOCKED, panel3->panel_strip()->type()); | |
514 EXPECT_EQ(PanelStrip::DOCKED, panel4->panel_strip()->type()); | |
515 EXPECT_EQ(PanelStrip::DOCKED, panel5->panel_strip()->type()); | |
516 EXPECT_EQ(PanelStrip::IN_OVERFLOW, panel6->panel_strip()->type()); | |
517 EXPECT_EQ(PanelStrip::IN_OVERFLOW, panel7->panel_strip()->type()); | |
518 EXPECT_EQ(detached_position1, panel1->GetBounds().origin()); | |
519 EXPECT_EQ(detached_position2, panel2->GetBounds().origin()); | |
520 EXPECT_EQ(docked_position2, panel3->GetBounds().origin()); | |
521 EXPECT_EQ(docked_position1, panel4->GetBounds().origin()); | |
522 EXPECT_EQ(docked_position3, panel5->GetBounds().origin()); | |
523 | |
524 // Drag to attach a detached panel to most-right. | |
525 // Expect to have: | |
526 // detached: P1 | |
527 // docked: P3 P4 P2 | |
528 // overflow: P7 P6 P5 | |
529 gfx::Point drag_delta_to_attach2( | |
530 docked_position1.x() - detached_position2.x() + 10, 210); | |
jennb
2012/03/08 23:41:09
ditto
jianli
2012/03/09 21:48:58
Done.
| |
531 DragPanelAndFinish(panel2, drag_delta_to_attach2); | |
532 ASSERT_EQ(1, detached_strip->num_panels()); | |
533 ASSERT_EQ(3, docked_strip->num_panels()); | |
534 ASSERT_EQ(3, overflow_strip->num_panels()); | |
535 EXPECT_EQ(PanelStrip::DETACHED, panel1->panel_strip()->type()); | |
536 EXPECT_EQ(PanelStrip::DOCKED, panel2->panel_strip()->type()); | |
537 EXPECT_EQ(PanelStrip::DOCKED, panel3->panel_strip()->type()); | |
538 EXPECT_EQ(PanelStrip::DOCKED, panel4->panel_strip()->type()); | |
539 EXPECT_EQ(PanelStrip::IN_OVERFLOW, panel5->panel_strip()->type()); | |
540 EXPECT_EQ(PanelStrip::IN_OVERFLOW, panel6->panel_strip()->type()); | |
541 EXPECT_EQ(PanelStrip::IN_OVERFLOW, panel7->panel_strip()->type()); | |
542 EXPECT_EQ(detached_position1, panel1->GetBounds().origin()); | |
543 EXPECT_EQ(docked_position1, panel2->GetBounds().origin()); | |
544 EXPECT_EQ(docked_position3, panel3->GetBounds().origin()); | |
545 EXPECT_EQ(docked_position2, panel4->GetBounds().origin()); | |
546 | |
547 // Drag to attach a detached panel to most-left. | |
548 // Expect to have: | |
549 // docked: P1 P4 P2 | |
550 // overflow: P7 P6 P5 P3 | |
551 gfx::Point drag_delta_to_attach3( | |
552 docked_position3.x() - detached_position1.x() - 50, 210); | |
553 DragPanelAndFinish(panel1, drag_delta_to_attach3); | |
554 ASSERT_EQ(0, detached_strip->num_panels()); | |
555 ASSERT_EQ(3, docked_strip->num_panels()); | |
556 ASSERT_EQ(4, overflow_strip->num_panels()); | |
557 EXPECT_EQ(PanelStrip::DOCKED, panel1->panel_strip()->type()); | |
558 EXPECT_EQ(PanelStrip::DOCKED, panel2->panel_strip()->type()); | |
559 EXPECT_EQ(PanelStrip::IN_OVERFLOW, panel3->panel_strip()->type()); | |
560 EXPECT_EQ(PanelStrip::DOCKED, panel4->panel_strip()->type()); | |
561 EXPECT_EQ(PanelStrip::IN_OVERFLOW, panel5->panel_strip()->type()); | |
562 EXPECT_EQ(PanelStrip::IN_OVERFLOW, panel6->panel_strip()->type()); | |
563 EXPECT_EQ(PanelStrip::IN_OVERFLOW, panel7->panel_strip()->type()); | |
564 EXPECT_EQ(docked_position3, panel1->GetBounds().origin()); | |
565 EXPECT_EQ(docked_position1, panel2->GetBounds().origin()); | |
566 EXPECT_EQ(docked_position2, panel4->GetBounds().origin()); | |
567 | |
568 panel_manager->CloseAll(); | |
569 } | |
OLD | NEW |