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