OLD | NEW |
---|---|
(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 } | |
OLD | NEW |