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

Side by Side Diff: chrome/browser/ui/panels/panel_overflow_browsertest.cc

Issue 8872044: Add test cases for panel overflow handling. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix mac trybot Created 9 years 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 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 <vector>
6 #include "chrome/browser/ui/browser.h"
7 #include "chrome/browser/ui/panels/base_panel_browser_test.h"
8 #include "chrome/browser/ui/panels/native_panel.h"
9 #include "chrome/browser/ui/panels/panel.h"
10 #include "chrome/browser/ui/panels/panel_manager.h"
11 #include "chrome/browser/ui/panels/panel_overflow_strip.h"
12 #include "chrome/browser/ui/panels/panel_settings_menu_model.h"
13 #include "chrome/browser/ui/panels/panel_strip.h"
14 #include "chrome/browser/ui/panels/test_panel_mouse_watcher.h"
15 #include "chrome/common/chrome_notification_types.h"
16 #include "chrome/test/base/ui_test_utils.h"
17 #include "testing/gtest/include/gtest/gtest.h"
18
19 namespace {
20
21 // We override the default value for testing purpose.
22 const int kMaxVisibleOverflowForTesting = 3;
23
24 // Encapsulates all the info we need to verify if a panel behaves as expected
25 // when we do the overflow testing.
26 struct PanelData {
27 Panel* panel;
28 Panel::ExpansionState expansion_state;
29 bool visible;
30 bool active;
31
32 explicit PanelData(Panel* panel)
33 : panel(panel),
34 expansion_state(panel->expansion_state()),
35 visible(!panel->GetBounds().IsEmpty()),
36 active(panel->IsActive()) {
37 }
38
39 PanelData(Panel* panel, Panel::ExpansionState expansion_state,
40 bool visible, bool active)
41 : panel(panel),
42 expansion_state(expansion_state),
43 visible(visible),
44 active(active) {
45 }
46
47 bool operator==(const PanelData& another) const {
48 return panel == another.panel &&
49 expansion_state == another.expansion_state &&
50 visible == another.visible &&
51 active == another.active;
52 }
53
54 bool operator!=(const PanelData& another) const {
55 return !(*this == another);
56 }
57 };
58
59 // For gtest printing.
60 ::std::ostream& operator<<(::std::ostream& os, const PanelData& data);
61 ::std::ostream& operator<<(::std::ostream& os, const PanelData& data) {
62 return os << "(" << data.panel->browser()->app_name() << ", "
63 << data.expansion_state << ", " << data.visible << ", "
64 << data.active << ")";
65 }
66
67
68 class PanelDataList : public std::vector<PanelData> {
69 public:
70 void Add(Panel* panel, Panel::ExpansionState expansion_state,
71 bool visible, bool active) {
72 push_back(PanelData(panel, expansion_state, visible, active));
73 }
74 };
75
76 } // namespace
77
78 class PanelOverflowBrowserTest : public BasePanelBrowserTest {
79 public:
80 PanelOverflowBrowserTest() : BasePanelBrowserTest() {
81 }
82
83 virtual ~PanelOverflowBrowserTest() {
84 }
85
86 virtual void SetUpOnMainThread() OVERRIDE {
87 BasePanelBrowserTest::SetUpOnMainThread();
88
89 PanelManager::GetInstance()->panel_overflow_strip()->
90 set_max_visible_panels(kMaxVisibleOverflowForTesting);
91 }
92
93 protected:
94 static PanelDataList GetAllNormalPanelData() {
95 PanelDataList panel_data_list;
96 PanelStrip::Panels panels =
97 PanelManager::GetInstance()->panel_strip()->panels();
98 for (PanelStrip::Panels::const_iterator iter = panels.begin();
99 iter != panels.end(); ++iter) {
100 Panel* panel = *iter;
101 panel_data_list.push_back(PanelData(panel));
102 }
103 return panel_data_list;
104 }
105
106 static PanelDataList GetAllOverflowPanelData() {
107 PanelDataList panel_data_list;
108 PanelOverflowStrip::Panels panels =
109 PanelManager::GetInstance()->panel_overflow_strip()->panels();
110 for (PanelOverflowStrip::Panels::const_iterator iter = panels.begin();
111 iter != panels.end(); ++iter) {
112 Panel* panel = *iter;
113 panel_data_list.push_back(PanelData(panel));
114 }
115 return panel_data_list;
116 }
117
118 static void MoveMouseAndWaitForOverflowAnimationEnded(
119 const gfx::Point& position) {
120 ui_test_utils::WindowedNotificationObserver signal(
121 chrome::NOTIFICATION_PANEL_BOUNDS_ANIMATIONS_FINISHED,
122 content::Source<PanelOverflowStrip>(
123 PanelManager::GetInstance()->panel_overflow_strip()));
124 MoveMouse(position);
125 signal.Wait();
126 }
127
128 static bool IsPanelVisible(Panel* panel) {
129 return !panel->GetBounds().IsEmpty();
130 }
131
132 std::vector<Panel*> CreateOverflowPanels(int num_normal_panels,
133 int num_overflow_panels,
134 const int* panel_widths) {
135 const int kTestPanelHeight = 200;
136 std::vector<Panel*> panels;
137
138 // First, create normal panels to fill the panel strip.
139 int i = 0;
140 for (; i < num_normal_panels; ++i) {
141 CreatePanelParams params(
142 MakePanelName(i),
143 gfx::Rect(0, 0, panel_widths[i], kTestPanelHeight),
144 SHOW_AS_INACTIVE);
145 Panel* panel = CreatePanelWithParams(params);
146 panels.push_back(panel);
147 }
148
149 // Then, create panels that would be placed in the overflow strip.
150 int num_panels = num_normal_panels + num_overflow_panels;
151 for (; i < num_panels; ++i) {
152 CreatePanelParams params(
153 MakePanelName(i),
154 gfx::Rect(0, 0, panel_widths[i], kTestPanelHeight),
155 SHOW_AS_INACTIVE);
156 Panel* panel = CreatePanelWithParams(params);
157 WaitForExpansionStateChanged(panel, Panel::IN_OVERFLOW);
158 panels.push_back(panel);
159 }
160
161 return panels;
162 }
163 };
164
165 // TODO(jianli): remove the guard when overflow support is enabled on other
166 // platforms. http://crbug.com/105073
167 #if defined(OS_WIN)
168 #define MAYBE_CreateOverflowPanels CreateOverflowPanels
169 #define MAYBE_CreateMoreOverflowPanels CreateMoreOverflowPanels
170 // http://crbug.com/107230
171 #define MAYBE_CreatePanelOnDelayedOverflow FAILS_CreatePanelOnDelayedOverflow
172 #define MAYBE_CloseOverflowPanels CloseOverflowPanels
173 #define MAYBE_CloseNormalPanels CloseNormalPanels
174 #define MAYBE_ActivateOverflowPanels ActivateOverflowPanels
175 #define MAYBE_HoverOverOverflowArea HoverOverOverflowArea
176 #else
177 #define MAYBE_CreateOverflowPanels DISABLED_CreateOverflowPanels
178 #define MAYBE_CreateMoreOverflowPanels DISABLED_CreateMoreOverflowPanels
179 #define MAYBE_CreatePanelOnDelayedOverflow DISABLED_CreatePanelOnDelayedOverflow
180 #define MAYBE_CloseOverflowPanels DISABLED_CloseOverflowPanels
181 #define MAYBE_CloseNormalPanels DISABLED_CloseNormalPanels
182 #define MAYBE_ActivateOverflowPanels DISABLED_ActivateOverflowPanels
183 #define MAYBE_HoverOverOverflowArea DISABLED_HoverOverOverflowArea
184 #endif
185
186 IN_PROC_BROWSER_TEST_F(PanelOverflowBrowserTest, MAYBE_CreateOverflowPanels) {
187 PanelManager* panel_manager = PanelManager::GetInstance();
188 PanelStrip* panel_strip = panel_manager->panel_strip();
189 PanelOverflowStrip* panel_overflow_strip =
190 panel_manager->panel_overflow_strip();
191
192 const int panel_widths[] = {
193 250, 260, 200, // normal
194 255, 220 // overflow
195 };
196 CreateOverflowPanels(3, 2, panel_widths);
197
198 std::vector<Panel*> panels = panel_manager->panels();
199 ASSERT_EQ(5u, panels.size());
200 EXPECT_EQ(3, panel_strip->num_panels());
201 EXPECT_EQ(2, panel_overflow_strip->num_panels());
202 EXPECT_EQ(Panel::IN_OVERFLOW, panels[3]->expansion_state());
203 EXPECT_TRUE(IsPanelVisible(panels[3]));
204 EXPECT_EQ(Panel::IN_OVERFLOW, panels[4]->expansion_state());
205 EXPECT_TRUE(IsPanelVisible(panels[4]));
206
207 PanelManager::GetInstance()->RemoveAll();
208 }
209
210 IN_PROC_BROWSER_TEST_F(PanelOverflowBrowserTest,
211 MAYBE_CreateMoreOverflowPanels) {
212 PanelManager* panel_manager = PanelManager::GetInstance();
213 PanelStrip* panel_strip = panel_manager->panel_strip();
214 PanelOverflowStrip* panel_overflow_strip =
215 panel_manager->panel_overflow_strip();
216
217 const int panel_widths[] = {
218 250, 260, 200, // normal
219 255, 220, 210, // overflow
220 220, 230 // overflow-on-overflow
221 };
222 CreateOverflowPanels(3, 5, panel_widths);
223
224 std::vector<Panel*> panels = panel_manager->panels();
225 ASSERT_EQ(8u, panels.size());
226 EXPECT_EQ(3, panel_strip->num_panels());
227 EXPECT_EQ(5, panel_overflow_strip->num_panels());
228 EXPECT_EQ(Panel::IN_OVERFLOW, panels[3]->expansion_state());
229 EXPECT_TRUE(IsPanelVisible(panels[3]));
230 EXPECT_EQ(Panel::IN_OVERFLOW, panels[4]->expansion_state());
231 EXPECT_TRUE(IsPanelVisible(panels[4]));
232 EXPECT_EQ(Panel::IN_OVERFLOW, panels[5]->expansion_state());
233 EXPECT_TRUE(IsPanelVisible(panels[5]));
234 EXPECT_EQ(Panel::IN_OVERFLOW, panels[6]->expansion_state());
235 EXPECT_FALSE(IsPanelVisible(panels[6]));
236 EXPECT_EQ(Panel::IN_OVERFLOW, panels[7]->expansion_state());
237 EXPECT_FALSE(IsPanelVisible(panels[7]));
238
239 PanelManager::GetInstance()->RemoveAll();
240 }
241
242 IN_PROC_BROWSER_TEST_F(PanelOverflowBrowserTest,
243 MAYBE_CreatePanelOnDelayedOverflow) {
244 // Create 2 big panels.
245 CreatePanelWithBounds("Panel0", gfx::Rect(0, 0, 260, 200));
246 CreatePanelWithBounds("Panel1", gfx::Rect(0, 0, 260, 200));
247
248 // Create an overflow panel without waiting for it to be moved to overflow.
249 CreatePanelParams params(
250 "Panel2", gfx::Rect(0, 0, 255, 200), SHOW_AS_INACTIVE);
251 params.wait_for_fully_created = false;
252 CreatePanelWithParams(params);
253
254 // Create a small panel that could fit within the available space in the
255 // panel strip.
256 CreatePanelParams params2(
257 "Panel3", gfx::Rect(0, 0, 255, 200), SHOW_AS_INACTIVE);
jennb 2011/12/15 01:40:27 smaller size
258 Panel* panel3 = CreatePanelWithParams(params2);
259 EXPECT_EQ(Panel::EXPANDED, panel3->expansion_state());
260 EXPECT_FALSE(panel3->has_temporary_layout());
261
262 PanelManager::GetInstance()->RemoveAll();
263 }
264
265 IN_PROC_BROWSER_TEST_F(PanelOverflowBrowserTest, MAYBE_CloseOverflowPanels) {
266 PanelManager* panel_manager = PanelManager::GetInstance();
267 PanelStrip* panel_strip = panel_manager->panel_strip();
268 PanelOverflowStrip* panel_overflow_strip =
269 panel_manager->panel_overflow_strip();
270
271 // Create normal and overflow panels.
272 // normal: P0, P1, P2
273 // overflow: P3, P4, P5
274 // overflow-on-overflow: P6, P7
275 int num_normal_panels = 3;
276 int num_overflow_panels = 5;
277 const int panel_widths[] = {
278 260, 250, 200, // normal
279 255, 260, 120, // overflow
280 240, 210 // overflow-on-overflow
281 };
282 std::vector<Panel*> panels = CreateOverflowPanels(
283 num_normal_panels, num_overflow_panels, panel_widths);
284
285 PanelDataList expected_normal_list;
286 expected_normal_list.Add(panels[0], Panel::EXPANDED, true, false);
287 expected_normal_list.Add(panels[1], Panel::EXPANDED, true, false);
288 expected_normal_list.Add(panels[2], Panel::EXPANDED, true, false);
289 EXPECT_EQ(expected_normal_list, GetAllNormalPanelData());
290
291 PanelDataList expected_overflow_list;
292 expected_overflow_list.Add(panels[3], Panel::IN_OVERFLOW, true, false);
293 expected_overflow_list.Add(panels[4], Panel::IN_OVERFLOW, true, false);
294 expected_overflow_list.Add(panels[5], Panel::IN_OVERFLOW, true, false);
295 expected_overflow_list.Add(panels[6], Panel::IN_OVERFLOW, false, false);
296 expected_overflow_list.Add(panels[7], Panel::IN_OVERFLOW, false, false);
297 EXPECT_EQ(expected_overflow_list, GetAllOverflowPanelData());
298
299 // Close an overflow-on-overflow panel. Expect only that panel is closed.
300 // normal: P0, P1, P2
301 // overflow: P3, P4, P5,
302 // overflow-on-overflow: P7
303 CloseWindowAndWait(panels[6]->browser());
304 num_overflow_panels--;
305 ASSERT_EQ(num_normal_panels + num_overflow_panels,
306 panel_manager->num_panels());
307 EXPECT_EQ(num_normal_panels, panel_strip->num_panels());
308 EXPECT_EQ(num_overflow_panels, panel_overflow_strip->num_panels());
309
310 EXPECT_EQ(expected_normal_list, GetAllNormalPanelData());
311
312 expected_overflow_list.clear();
313 expected_overflow_list.Add(panels[3], Panel::IN_OVERFLOW, true, false);
314 expected_overflow_list.Add(panels[4], Panel::IN_OVERFLOW, true, false);
315 expected_overflow_list.Add(panels[5], Panel::IN_OVERFLOW, true, false);
316 expected_overflow_list.Add(panels[7], Panel::IN_OVERFLOW, false, false);
317 EXPECT_EQ(expected_overflow_list, GetAllOverflowPanelData());
318
319 // Close an overflow panel. Expect an overflow-on-overflow panel to become
320 // visible in the overflow strip.
321 // normal: P0, P1, P2
322 // overflow: P3, P5, P7
323 CloseWindowAndWait(panels[4]->browser());
324 num_overflow_panels--;
325 ASSERT_EQ(num_normal_panels + num_overflow_panels,
326 panel_manager->num_panels());
327 EXPECT_EQ(num_normal_panels, panel_strip->num_panels());
328 EXPECT_EQ(num_overflow_panels, panel_overflow_strip->num_panels());
329
330 EXPECT_EQ(expected_normal_list, GetAllNormalPanelData());
331
332 expected_overflow_list.clear();
333 expected_overflow_list.Add(panels[3], Panel::IN_OVERFLOW, true, false);
334 expected_overflow_list.Add(panels[5], Panel::IN_OVERFLOW, true, false);
335 expected_overflow_list.Add(panels[7], Panel::IN_OVERFLOW, true, false);
336 EXPECT_EQ(expected_overflow_list, GetAllOverflowPanelData());
337
338 // Close an overflow panel. Expect only that panel is closed.
339 // normal: P0, P1, P2
340 // overflow: P5, P7
341 CloseWindowAndWait(panels[3]->browser());
342 num_overflow_panels--;
343 ASSERT_EQ(num_normal_panels + num_overflow_panels,
344 panel_manager->num_panels());
345 EXPECT_EQ(num_normal_panels, panel_strip->num_panels());
346 EXPECT_EQ(num_overflow_panels, panel_overflow_strip->num_panels());
347
348 EXPECT_EQ(expected_normal_list, GetAllNormalPanelData());
349
350 expected_overflow_list.clear();
351 expected_overflow_list.Add(panels[5], Panel::IN_OVERFLOW, true, false);
352 expected_overflow_list.Add(panels[7], Panel::IN_OVERFLOW, true, false);
353 EXPECT_EQ(expected_overflow_list, GetAllOverflowPanelData());
354
355 panel_manager->RemoveAll();
356 }
357
358 IN_PROC_BROWSER_TEST_F(PanelOverflowBrowserTest, MAYBE_CloseNormalPanels) {
359 PanelManager* panel_manager = PanelManager::GetInstance();
360 PanelStrip* panel_strip = panel_manager->panel_strip();
361 PanelOverflowStrip* panel_overflow_strip =
362 panel_manager->panel_overflow_strip();
363
364 // Create normal and overflow panels.
365 // normal: P0, P1, P2
366 // overflow: P3, P4, P5
367 // overflow-on-overflow: P6, P7, P8
368 int num_normal_panels = 3;
369 int num_overflow_panels = 6;
370 const int panel_widths[] = {
371 260, 250, 200, // normal
372 255, 260, 120, // overflow
373 240, 210, 258 // overflow-on-overflow
374 };
375 std::vector<Panel*> panels = CreateOverflowPanels(
376 num_normal_panels, num_overflow_panels, panel_widths);
377
378 PanelDataList expected_normal_list;
379 expected_normal_list.Add(panels[0], Panel::EXPANDED, true, false);
380 expected_normal_list.Add(panels[1], Panel::EXPANDED, true, false);
381 expected_normal_list.Add(panels[2], Panel::EXPANDED, true, false);
382 EXPECT_EQ(expected_normal_list, GetAllNormalPanelData());
383
384 PanelDataList expected_overflow_list;
385 expected_overflow_list.Add(panels[3], Panel::IN_OVERFLOW, true, false);
386 expected_overflow_list.Add(panels[4], Panel::IN_OVERFLOW, true, false);
387 expected_overflow_list.Add(panels[5], Panel::IN_OVERFLOW, true, false);
388 expected_overflow_list.Add(panels[6], Panel::IN_OVERFLOW, false, false);
389 expected_overflow_list.Add(panels[7], Panel::IN_OVERFLOW, false, false);
390 expected_overflow_list.Add(panels[8], Panel::IN_OVERFLOW, false, false);
391 EXPECT_EQ(expected_overflow_list, GetAllOverflowPanelData());
392
393 // Close a normal panel. Expect an overflow panel to move over and an
394 // overflow-on-overflow panel to become visible.
395 // normal: P0, P2, P3
396 // overflow: P4, P5, P6
397 // overflow-on-overflow: P7, P8
398 CloseWindowAndWait(panels[1]->browser());
399 num_overflow_panels--;
400 ASSERT_EQ(num_normal_panels + num_overflow_panels,
401 panel_manager->num_panels());
402 EXPECT_EQ(num_normal_panels, panel_strip->num_panels());
403 EXPECT_EQ(num_overflow_panels, panel_overflow_strip->num_panels());
404
405 expected_normal_list.clear();
406 expected_normal_list.Add(panels[0], Panel::EXPANDED, true, false);
407 expected_normal_list.Add(panels[2], Panel::EXPANDED, true, false);
408 expected_normal_list.Add(panels[3], Panel::EXPANDED, true, false);
409 EXPECT_EQ(expected_normal_list, GetAllNormalPanelData());
410
411 expected_overflow_list.clear();
412 expected_overflow_list.Add(panels[4], Panel::IN_OVERFLOW, true, false);
413 expected_overflow_list.Add(panels[5], Panel::IN_OVERFLOW, true, false);
414 expected_overflow_list.Add(panels[6], Panel::IN_OVERFLOW, true, false);
415 expected_overflow_list.Add(panels[7], Panel::IN_OVERFLOW, false, false);
416 expected_overflow_list.Add(panels[8], Panel::IN_OVERFLOW, false, false);
417 EXPECT_EQ(expected_overflow_list, GetAllOverflowPanelData());
418
419 // Close another normal panel. Remaining overflow panels cannot move over
420 // due to not enough room.
421 // normal: P0, P3
422 // overflow: P4, P5, P6
423 // overflow-on-overflow: P7, P8
424 CloseWindowAndWait(panels[2]->browser());
425 num_normal_panels--;
426 ASSERT_EQ(num_normal_panels + num_overflow_panels,
427 panel_manager->num_panels());
428 EXPECT_EQ(num_normal_panels, panel_strip->num_panels());
429 EXPECT_EQ(num_overflow_panels, panel_overflow_strip->num_panels());
430
431 expected_normal_list.clear();
432 expected_normal_list.Add(panels[0], Panel::EXPANDED, true, false);
433 expected_normal_list.Add(panels[3], Panel::EXPANDED, true, false);
434 EXPECT_EQ(expected_normal_list, GetAllNormalPanelData());
435
436 EXPECT_EQ(expected_overflow_list, GetAllOverflowPanelData());
437
438 // Close one more normal panel. Expect two overflow panels to move over and
439 // two overflow-on-overflow panels to become visible.
440 // normal: P0, P4, P5
441 // overflow: P6, P7, P8
442 CloseWindowAndWait(panels[3]->browser());
443 num_normal_panels++;
444 num_overflow_panels -= 2;
445 ASSERT_EQ(num_normal_panels + num_overflow_panels,
446 panel_manager->num_panels());
447 EXPECT_EQ(num_normal_panels, panel_strip->num_panels());
448 EXPECT_EQ(num_overflow_panels, panel_overflow_strip->num_panels());
449
450 expected_normal_list.clear();
451 expected_normal_list.Add(panels[0], Panel::EXPANDED, true, false);
452 expected_normal_list.Add(panels[4], Panel::EXPANDED, true, false);
453 expected_normal_list.Add(panels[5], Panel::EXPANDED, true, false);
454 EXPECT_EQ(expected_normal_list, GetAllNormalPanelData());
455
456 expected_overflow_list.clear();
457 expected_overflow_list.Add(panels[6], Panel::IN_OVERFLOW, true, false);
458 expected_overflow_list.Add(panels[7], Panel::IN_OVERFLOW, true, false);
459 expected_overflow_list.Add(panels[8], Panel::IN_OVERFLOW, true, false);
460 EXPECT_EQ(expected_overflow_list, GetAllOverflowPanelData());
461
462 // Close another normal panel. Expect one overflow panel to move over.
463 // normal: P4, P5, P6
464 // overflow: P7, P8
465 CloseWindowAndWait(panels[0]->browser());
466 num_overflow_panels--;
467 ASSERT_EQ(num_normal_panels + num_overflow_panels,
468 panel_manager->num_panels());
469 EXPECT_EQ(num_normal_panels, panel_strip->num_panels());
470 EXPECT_EQ(num_overflow_panels, panel_overflow_strip->num_panels());
471
472 expected_normal_list.clear();
473 expected_normal_list.Add(panels[4], Panel::EXPANDED, true, false);
474 expected_normal_list.Add(panels[5], Panel::EXPANDED, true, false);
475 expected_normal_list.Add(panels[6], Panel::EXPANDED, true, false);
476 EXPECT_EQ(expected_normal_list, GetAllNormalPanelData());
477
478 expected_overflow_list.clear();
479 expected_overflow_list.Add(panels[7], Panel::IN_OVERFLOW, true, false);
480 expected_overflow_list.Add(panels[8], Panel::IN_OVERFLOW, true, false);
481 EXPECT_EQ(expected_overflow_list, GetAllOverflowPanelData());
482
483 panel_manager->RemoveAll();
484 }
485
486 IN_PROC_BROWSER_TEST_F(PanelOverflowBrowserTest, MAYBE_ActivateOverflowPanels) {
487 PanelManager* panel_manager = PanelManager::GetInstance();
488 PanelOverflowStrip* panel_overflow_strip =
489 panel_manager->panel_overflow_strip();
490 panel_overflow_strip->set_max_visible_panels(3);
jennb 2011/12/15 01:40:27 Delete. Already done in setup. Can also delete pan
491
492 // Create normal and overflow panels.
493 // normal: P0, P1, P2
494 // overflow: P3, P4, P5
495 // overflow-on-overflow: P6, P7
496 const int panel_widths[] = {
497 250, 260, 200, // normal
498 210, 260, 230, // overflow
499 255, 210 // overflow-on-overflow
500 };
501 std::vector<Panel*> panels = CreateOverflowPanels(3, 5, panel_widths);
502
503 PanelDataList expected_normal_list;
504 expected_normal_list.Add(panels[0], Panel::EXPANDED, true, false);
505 expected_normal_list.Add(panels[1], Panel::EXPANDED, true, false);
506 expected_normal_list.Add(panels[2], Panel::EXPANDED, true, false);
507 EXPECT_EQ(expected_normal_list, GetAllNormalPanelData());
508
509 PanelDataList expected_overflow_list;
510 expected_overflow_list.Add(panels[3], Panel::IN_OVERFLOW, true, false);
511 expected_overflow_list.Add(panels[4], Panel::IN_OVERFLOW, true, false);
512 expected_overflow_list.Add(panels[5], Panel::IN_OVERFLOW, true, false);
513 expected_overflow_list.Add(panels[6], Panel::IN_OVERFLOW, false, false);
514 expected_overflow_list.Add(panels[7], Panel::IN_OVERFLOW, false, false);
515 EXPECT_EQ(expected_overflow_list, GetAllOverflowPanelData());
516
517 // Activate an overflow panel. Expect one normal panel is swapped into the
518 // overflow strip.
519 // normal: P0, P1, P3
520 // overflow: P2, P4, P5
521 // overflow-on-overflow: P6, P7
522 panels[3]->Activate();
523 WaitForPanelActiveState(panels[3], SHOW_AS_ACTIVE);
524 WaitForExpansionStateChanged(panels[3], Panel::EXPANDED);
525
526 expected_normal_list.clear();
527 expected_normal_list.Add(panels[0], Panel::EXPANDED, true, false);
528 expected_normal_list.Add(panels[1], Panel::EXPANDED, true, false);
529 expected_normal_list.Add(panels[3], Panel::EXPANDED, true, true);
530 EXPECT_EQ(expected_normal_list, GetAllNormalPanelData());
531
532 expected_overflow_list.clear();
533 expected_overflow_list.Add(panels[2], Panel::IN_OVERFLOW, true, false);
534 expected_overflow_list.Add(panels[4], Panel::IN_OVERFLOW, true, false);
535 expected_overflow_list.Add(panels[5], Panel::IN_OVERFLOW, true, false);
536 expected_overflow_list.Add(panels[6], Panel::IN_OVERFLOW, false, false);
537 expected_overflow_list.Add(panels[7], Panel::IN_OVERFLOW, false, false);
538 EXPECT_EQ(expected_overflow_list, GetAllOverflowPanelData());
539
540 // Activate an overflow panel. Expect two normal panels are swapped into the
541 // overflow strip and one overflow panel to become hidden.
542 // normal: P0, P4
543 // overflow: P1, P3, P2
544 // overflow-on-overflow: P5, P6, P7
545 panels[4]->Activate();
546 WaitForPanelActiveState(panels[4], SHOW_AS_ACTIVE);
547 WaitForExpansionStateChanged(panels[4], Panel::EXPANDED);
548 WaitForPanelActiveState(panels[3], SHOW_AS_INACTIVE);
549
550 expected_normal_list.clear();
551 expected_normal_list.Add(panels[0], Panel::EXPANDED, true, false);
552 expected_normal_list.Add(panels[4], Panel::EXPANDED, true, true);
553 EXPECT_EQ(expected_normal_list, GetAllNormalPanelData());
554
555 expected_overflow_list.clear();
556 expected_overflow_list.Add(panels[1], Panel::IN_OVERFLOW, true, false);
557 expected_overflow_list.Add(panels[3], Panel::IN_OVERFLOW, true, false);
558 expected_overflow_list.Add(panels[2], Panel::IN_OVERFLOW, true, false);
559 expected_overflow_list.Add(panels[5], Panel::IN_OVERFLOW, false, false);
560 expected_overflow_list.Add(panels[6], Panel::IN_OVERFLOW, false, false);
561 expected_overflow_list.Add(panels[7], Panel::IN_OVERFLOW, false, false);
562 EXPECT_EQ(expected_overflow_list, GetAllOverflowPanelData());
563
564 // Activate an overflow-on-overflow panel. Expect one normal panel is swapped
565 // into the overflow strip.
566 // normal: P0, P6
567 // overflow: P4, P1, P3,
568 // overflow-on-overflow: P2, P5, P7
569 panels[6]->Activate();
570 WaitForPanelActiveState(panels[6], SHOW_AS_ACTIVE);
571 WaitForExpansionStateChanged(panels[6], Panel::EXPANDED);
572 WaitForPanelActiveState(panels[4], SHOW_AS_INACTIVE);
573
574 expected_normal_list.clear();
575 expected_normal_list.Add(panels[0], Panel::EXPANDED, true, false);
576 expected_normal_list.Add(panels[6], Panel::EXPANDED, true, true);
577 EXPECT_EQ(expected_normal_list, GetAllNormalPanelData());
578
579 expected_overflow_list.clear();
580 expected_overflow_list.Add(panels[4], Panel::IN_OVERFLOW, true, false);
581 expected_overflow_list.Add(panels[1], Panel::IN_OVERFLOW, true, false);
582 expected_overflow_list.Add(panels[3], Panel::IN_OVERFLOW, true, false);
583 expected_overflow_list.Add(panels[2], Panel::IN_OVERFLOW, false, false);
584 expected_overflow_list.Add(panels[5], Panel::IN_OVERFLOW, false, false);
585 expected_overflow_list.Add(panels[7], Panel::IN_OVERFLOW, false, false);
586 EXPECT_EQ(expected_overflow_list, GetAllOverflowPanelData());
587
588 // Activate an overflow-on-overflow panel. Not any normal panel is swapped
jennb 2011/12/15 01:40:27 Grammar: Not any
589 // since there has already been enough space in the panel strip.
590 // normal: P0, P6, P7
591 // overflow: P4, P1, P3,
592 // overflow-on-overflow: P2, P5
593 panels[7]->Activate();
594 WaitForPanelActiveState(panels[7], SHOW_AS_ACTIVE);
595 WaitForExpansionStateChanged(panels[7], Panel::EXPANDED);
596 WaitForPanelActiveState(panels[6], SHOW_AS_INACTIVE);
597
598 expected_normal_list.clear();
599 expected_normal_list.Add(panels[0], Panel::EXPANDED, true, false);
600 expected_normal_list.Add(panels[6], Panel::EXPANDED, true, false);
601 expected_normal_list.Add(panels[7], Panel::EXPANDED, true, true);
602 EXPECT_EQ(expected_normal_list, GetAllNormalPanelData());
603
604 expected_overflow_list.clear();
605 expected_overflow_list.Add(panels[4], Panel::IN_OVERFLOW, true, false);
606 expected_overflow_list.Add(panels[1], Panel::IN_OVERFLOW, true, false);
607 expected_overflow_list.Add(panels[3], Panel::IN_OVERFLOW, true, false);
608 expected_overflow_list.Add(panels[2], Panel::IN_OVERFLOW, false, false);
609 expected_overflow_list.Add(panels[5], Panel::IN_OVERFLOW, false, false);
610 EXPECT_EQ(expected_overflow_list, GetAllOverflowPanelData());
611
612 panel_manager->RemoveAll();
613 }
614
615 IN_PROC_BROWSER_TEST_F(PanelOverflowBrowserTest, MAYBE_HoverOverOverflowArea) {
616 PanelManager* panel_manager = PanelManager::GetInstance();
617 PanelMouseWatcher* mouse_watcher = new TestPanelMouseWatcher();
618 panel_manager->SetMouseWatcherForTesting(mouse_watcher);
619 PanelOverflowStrip* panel_overflow_strip =
620 panel_manager->panel_overflow_strip();
621 panel_overflow_strip->set_max_visible_panels(3);
622 int iconified_width = panel_overflow_strip->current_display_width();
623
624 // Create normal and overflow panels.
625 // normal: P0, P1, P2
626 // overflow: P3, P4, P5
627 // overflow-on-overflow: P6, P7
628 const int panel_widths[] = {
629 250, 260, 200, // normal
630 255, 220, 260, // overflow
631 140, 210 // overflow-on-overflow
632 };
633 std::vector<Panel*> panels = CreateOverflowPanels(3, 5, panel_widths);
634
635 // Move mouse beyond the right edge of the top overflow panel.
636 // Expect the overflow area remains shrunk.
637 MoveMouse(gfx::Point(panels[5]->GetBounds().right() + 1,
638 panels[5]->GetBounds().y()));
639 EXPECT_EQ(iconified_width, panel_overflow_strip->current_display_width());
640
641 // Move mouse above the top overflow panel. Expect the overflow area
642 // remains shrunk.
643 MoveMouse(gfx::Point(panels[5]->GetBounds().x(),
644 panels[5]->GetBounds().y() - 1));
645 EXPECT_EQ(iconified_width, panel_overflow_strip->current_display_width());
646
647 // Move mouse below the bottom overflow panel. Expect the overflow area
648 // remains shrunk.
649 MoveMouse(gfx::Point(panels[3]->GetBounds().right(),
650 panels[3]->GetBounds().bottom() + 1));
651 EXPECT_EQ(iconified_width, panel_overflow_strip->current_display_width());
652
653 // Move mouse to the origin of an overflow panel. Expect the overflow area
654 // gets expanded.
655 MoveMouseAndWaitForOverflowAnimationEnded(
656 panels[4]->GetBounds().origin());
657 int hover_width = panel_overflow_strip->current_display_width();
658 EXPECT_GT(hover_width, iconified_width);
659 EXPECT_EQ(hover_width, panels[3]->GetBounds().width());
660 EXPECT_EQ(hover_width, panels[4]->GetBounds().width());
661 EXPECT_EQ(hover_width, panels[5]->GetBounds().width());
662 EXPECT_EQ(hover_width, panels[6]->GetBounds().width());
663 EXPECT_EQ(hover_width, panels[7]->GetBounds().width());
664
665 // Move mouse to the origin of another overflow panel. Expect the overflow
666 // area remains expanded.
667 MoveMouse(panels[5]->GetBounds().origin());
668 EXPECT_EQ(hover_width, panel_overflow_strip->current_display_width());
669
670 // Move mouse beyond the left edge of an overflow panel. Expect the overflow
671 // area remains expanded.
672 MoveMouse(gfx::Point(panels[5]->GetBounds().x() - 5,
673 panels[5]->GetBounds().y()));
674 EXPECT_EQ(hover_width, panel_overflow_strip->current_display_width());
675
676 // Move mouse to the origin of the top overflow-on-overflow panel. Expect the
677 // overflow area remains expanded.
678 MoveMouse(panels[7]->GetBounds().origin());
679 EXPECT_EQ(hover_width, panel_overflow_strip->current_display_width());
680
681 // Move mouse to the bottom-right corner of the bottom overflow panel.
682 // Expect the overflow area remains expanded.
683 MoveMouse(gfx::Point(panels[3]->GetBounds().right(),
684 panels[3]->GetBounds().bottom()));
685 EXPECT_EQ(hover_width, panel_overflow_strip->current_display_width());
686
687 // Move mouse beyond the right edge of the hover panel. Expect the overflow
688 // area gets shrunk.
689 MoveMouseAndWaitForOverflowAnimationEnded(gfx::Point(
690 panels[4]->GetBounds().right() + 5, panels[4]->GetBounds().y()));
691 EXPECT_EQ(iconified_width, panel_overflow_strip->current_display_width());
692 EXPECT_EQ(iconified_width, panels[3]->GetBounds().width());
693 EXPECT_EQ(iconified_width, panels[4]->GetBounds().width());
694 EXPECT_EQ(iconified_width, panels[5]->GetBounds().width());
695 EXPECT_EQ(0, panels[6]->GetBounds().width());
696 EXPECT_EQ(0, panels[7]->GetBounds().width());
697
698 // Move mouse beyond the left edge of an overflow panel. Expect the overflow
699 // area gets expanded.
700 MoveMouseAndWaitForOverflowAnimationEnded(gfx::Point(
701 panels[4]->GetBounds().x() - 5, panels[4]->GetBounds().y()));
702 EXPECT_EQ(hover_width, panel_overflow_strip->current_display_width());
703 EXPECT_EQ(hover_width, panels[3]->GetBounds().width());
704 EXPECT_EQ(hover_width, panels[4]->GetBounds().width());
705 EXPECT_EQ(hover_width, panels[5]->GetBounds().width());
706 EXPECT_EQ(hover_width, panels[6]->GetBounds().width());
707 EXPECT_EQ(hover_width, panels[7]->GetBounds().width());
708
709 // Move mouse above the top overflow-on-overflow panel. Expect the overflow
710 // area gets shrunk.
711 MoveMouseAndWaitForOverflowAnimationEnded(gfx::Point(
712 panels[7]->GetBounds().x(), panels[7]->GetBounds().y() - 1));
713 EXPECT_EQ(iconified_width, panel_overflow_strip->current_display_width());
714 EXPECT_EQ(iconified_width, panels[3]->GetBounds().width());
715 EXPECT_EQ(iconified_width, panels[4]->GetBounds().width());
716 EXPECT_EQ(iconified_width, panels[5]->GetBounds().width());
717 EXPECT_EQ(0, panels[6]->GetBounds().width());
718 EXPECT_EQ(0, panels[7]->GetBounds().width());
719
720 panel_manager->RemoveAll();
721 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698