OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ash/wm/window_cycle_controller.h" | 5 #include "ash/wm/window_cycle_controller.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "ash/display/display_controller.h" | 9 #include "ash/display/display_controller.h" |
10 #include "ash/display/display_manager.h" | 10 #include "ash/display/display_manager.h" |
(...skipping 23 matching lines...) Expand all Loading... |
34 typedef test::AshTestBase WindowCycleControllerTest; | 34 typedef test::AshTestBase WindowCycleControllerTest; |
35 | 35 |
36 TEST_F(WindowCycleControllerTest, HandleCycleWindowBaseCases) { | 36 TEST_F(WindowCycleControllerTest, HandleCycleWindowBaseCases) { |
37 WindowCycleController* controller = | 37 WindowCycleController* controller = |
38 Shell::GetInstance()->window_cycle_controller(); | 38 Shell::GetInstance()->window_cycle_controller(); |
39 | 39 |
40 // Cycling doesn't crash if there are no windows. | 40 // Cycling doesn't crash if there are no windows. |
41 controller->HandleCycleWindow(WindowCycleController::FORWARD, false); | 41 controller->HandleCycleWindow(WindowCycleController::FORWARD, false); |
42 | 42 |
43 // Create a single test window. | 43 // Create a single test window. |
44 scoped_ptr<Window> window0(CreateTestWindowWithId(0, NULL)); | 44 scoped_ptr<Window> window0(CreateTestWindowInShellWithId(0)); |
45 wm::ActivateWindow(window0.get()); | 45 wm::ActivateWindow(window0.get()); |
46 EXPECT_TRUE(wm::IsActiveWindow(window0.get())); | 46 EXPECT_TRUE(wm::IsActiveWindow(window0.get())); |
47 | 47 |
48 // Cycling works for a single window, even though nothing changes. | 48 // Cycling works for a single window, even though nothing changes. |
49 controller->HandleCycleWindow(WindowCycleController::FORWARD, false); | 49 controller->HandleCycleWindow(WindowCycleController::FORWARD, false); |
50 EXPECT_TRUE(wm::IsActiveWindow(window0.get())); | 50 EXPECT_TRUE(wm::IsActiveWindow(window0.get())); |
51 } | 51 } |
52 | 52 |
53 // Verifies if there is only one window and it isn't active that cycling | 53 // Verifies if there is only one window and it isn't active that cycling |
54 // activates it. | 54 // activates it. |
55 TEST_F(WindowCycleControllerTest, SingleWindowNotActive) { | 55 TEST_F(WindowCycleControllerTest, SingleWindowNotActive) { |
56 WindowCycleController* controller = | 56 WindowCycleController* controller = |
57 Shell::GetInstance()->window_cycle_controller(); | 57 Shell::GetInstance()->window_cycle_controller(); |
58 | 58 |
59 // Create a single test window. | 59 // Create a single test window. |
60 scoped_ptr<Window> window0(CreateTestWindowWithId(0, NULL)); | 60 scoped_ptr<Window> window0(CreateTestWindowInShellWithId(0)); |
61 wm::ActivateWindow(window0.get()); | 61 wm::ActivateWindow(window0.get()); |
62 EXPECT_TRUE(wm::IsActiveWindow(window0.get())); | 62 EXPECT_TRUE(wm::IsActiveWindow(window0.get())); |
63 | 63 |
64 // Rotate focus, this should move focus to another window that isn't part of | 64 // Rotate focus, this should move focus to another window that isn't part of |
65 // the default container. | 65 // the default container. |
66 Shell::GetInstance()->RotateFocus(Shell::FORWARD); | 66 Shell::GetInstance()->RotateFocus(Shell::FORWARD); |
67 EXPECT_FALSE(wm::IsActiveWindow(window0.get())); | 67 EXPECT_FALSE(wm::IsActiveWindow(window0.get())); |
68 | 68 |
69 // Cycling should activate the window. | 69 // Cycling should activate the window. |
70 controller->HandleCycleWindow(WindowCycleController::FORWARD, false); | 70 controller->HandleCycleWindow(WindowCycleController::FORWARD, false); |
71 EXPECT_TRUE(wm::IsActiveWindow(window0.get())); | 71 EXPECT_TRUE(wm::IsActiveWindow(window0.get())); |
72 } | 72 } |
73 | 73 |
74 TEST_F(WindowCycleControllerTest, HandleCycleWindow) { | 74 TEST_F(WindowCycleControllerTest, HandleCycleWindow) { |
75 WindowCycleController* controller = | 75 WindowCycleController* controller = |
76 Shell::GetInstance()->window_cycle_controller(); | 76 Shell::GetInstance()->window_cycle_controller(); |
77 | 77 |
78 // Set up several windows to use to test cycling. Create them in reverse | 78 // Set up several windows to use to test cycling. Create them in reverse |
79 // order so they are stacked 0 over 1 over 2. | 79 // order so they are stacked 0 over 1 over 2. |
80 scoped_ptr<Window> window2(CreateTestWindowWithId(2, NULL)); | 80 scoped_ptr<Window> window2(CreateTestWindowInShellWithId(2)); |
81 scoped_ptr<Window> window1(CreateTestWindowWithId(1, NULL)); | 81 scoped_ptr<Window> window1(CreateTestWindowInShellWithId(1)); |
82 scoped_ptr<Window> window0(CreateTestWindowWithId(0, NULL)); | 82 scoped_ptr<Window> window0(CreateTestWindowInShellWithId(0)); |
83 wm::ActivateWindow(window0.get()); | 83 wm::ActivateWindow(window0.get()); |
84 | 84 |
85 // Simulate pressing and releasing Alt-tab. | 85 // Simulate pressing and releasing Alt-tab. |
86 EXPECT_TRUE(wm::IsActiveWindow(window0.get())); | 86 EXPECT_TRUE(wm::IsActiveWindow(window0.get())); |
87 controller->HandleCycleWindow(WindowCycleController::FORWARD, true); | 87 controller->HandleCycleWindow(WindowCycleController::FORWARD, true); |
88 | 88 |
89 // Window lists should return the topmost window in front. | 89 // Window lists should return the topmost window in front. |
90 ASSERT_TRUE(controller->windows()); | 90 ASSERT_TRUE(controller->windows()); |
91 ASSERT_EQ(3u, controller->windows()->windows().size()); | 91 ASSERT_EQ(3u, controller->windows()->windows().size()); |
92 ASSERT_EQ(window0.get(), controller->windows()->windows()[0]); | 92 ASSERT_EQ(window0.get(), controller->windows()->windows()[0]); |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
177 controller->HandleCycleWindow(WindowCycleController::BACKWARD, false); | 177 controller->HandleCycleWindow(WindowCycleController::BACKWARD, false); |
178 EXPECT_TRUE(wm::IsActiveWindow(modal_window.get())); | 178 EXPECT_TRUE(wm::IsActiveWindow(modal_window.get())); |
179 EXPECT_FALSE(wm::IsActiveWindow(window0.get())); | 179 EXPECT_FALSE(wm::IsActiveWindow(window0.get())); |
180 EXPECT_FALSE(wm::IsActiveWindow(window1.get())); | 180 EXPECT_FALSE(wm::IsActiveWindow(window1.get())); |
181 EXPECT_FALSE(wm::IsActiveWindow(window2.get())); | 181 EXPECT_FALSE(wm::IsActiveWindow(window2.get())); |
182 } | 182 } |
183 | 183 |
184 // Cycles between a maximized and normal window. | 184 // Cycles between a maximized and normal window. |
185 TEST_F(WindowCycleControllerTest, MaximizedWindow) { | 185 TEST_F(WindowCycleControllerTest, MaximizedWindow) { |
186 // Create a couple of test windows. | 186 // Create a couple of test windows. |
187 scoped_ptr<Window> window0(CreateTestWindowWithId(0, NULL)); | 187 scoped_ptr<Window> window0(CreateTestWindowInShellWithId(0)); |
188 scoped_ptr<Window> window1(CreateTestWindowWithId(1, NULL)); | 188 scoped_ptr<Window> window1(CreateTestWindowInShellWithId(1)); |
189 | 189 |
190 wm::MaximizeWindow(window1.get()); | 190 wm::MaximizeWindow(window1.get()); |
191 wm::ActivateWindow(window1.get()); | 191 wm::ActivateWindow(window1.get()); |
192 EXPECT_TRUE(wm::IsActiveWindow(window1.get())); | 192 EXPECT_TRUE(wm::IsActiveWindow(window1.get())); |
193 | 193 |
194 // Rotate focus, this should move focus to window0. | 194 // Rotate focus, this should move focus to window0. |
195 WindowCycleController* controller = | 195 WindowCycleController* controller = |
196 Shell::GetInstance()->window_cycle_controller(); | 196 Shell::GetInstance()->window_cycle_controller(); |
197 controller->HandleCycleWindow(WindowCycleController::FORWARD, false); | 197 controller->HandleCycleWindow(WindowCycleController::FORWARD, false); |
198 EXPECT_TRUE(wm::IsActiveWindow(window0.get())); | 198 EXPECT_TRUE(wm::IsActiveWindow(window0.get())); |
199 | 199 |
200 // One more time. | 200 // One more time. |
201 controller->HandleCycleWindow(WindowCycleController::FORWARD, false); | 201 controller->HandleCycleWindow(WindowCycleController::FORWARD, false); |
202 EXPECT_TRUE(wm::IsActiveWindow(window1.get())); | 202 EXPECT_TRUE(wm::IsActiveWindow(window1.get())); |
203 } | 203 } |
204 | 204 |
205 // Cycles to a minimized window. | 205 // Cycles to a minimized window. |
206 TEST_F(WindowCycleControllerTest, Minimized) { | 206 TEST_F(WindowCycleControllerTest, Minimized) { |
207 // Create a couple of test windows. | 207 // Create a couple of test windows. |
208 scoped_ptr<Window> window0(CreateTestWindowWithId(0, NULL)); | 208 scoped_ptr<Window> window0(CreateTestWindowInShellWithId(0)); |
209 scoped_ptr<Window> window1(CreateTestWindowWithId(1, NULL)); | 209 scoped_ptr<Window> window1(CreateTestWindowInShellWithId(1)); |
210 | 210 |
211 wm::MinimizeWindow(window1.get()); | 211 wm::MinimizeWindow(window1.get()); |
212 wm::ActivateWindow(window0.get()); | 212 wm::ActivateWindow(window0.get()); |
213 EXPECT_TRUE(wm::IsActiveWindow(window0.get())); | 213 EXPECT_TRUE(wm::IsActiveWindow(window0.get())); |
214 | 214 |
215 // Rotate focus, this should move focus to window1 and unminimize it. | 215 // Rotate focus, this should move focus to window1 and unminimize it. |
216 WindowCycleController* controller = | 216 WindowCycleController* controller = |
217 Shell::GetInstance()->window_cycle_controller(); | 217 Shell::GetInstance()->window_cycle_controller(); |
218 controller->HandleCycleWindow(WindowCycleController::FORWARD, false); | 218 controller->HandleCycleWindow(WindowCycleController::FORWARD, false); |
219 EXPECT_FALSE(wm::IsWindowMinimized(window1.get())); | 219 EXPECT_FALSE(wm::IsWindowMinimized(window1.get())); |
220 EXPECT_TRUE(wm::IsActiveWindow(window1.get())); | 220 EXPECT_TRUE(wm::IsActiveWindow(window1.get())); |
221 | 221 |
222 // One more time back to w0. | 222 // One more time back to w0. |
223 controller->HandleCycleWindow(WindowCycleController::FORWARD, false); | 223 controller->HandleCycleWindow(WindowCycleController::FORWARD, false); |
224 EXPECT_TRUE(wm::IsActiveWindow(window0.get())); | 224 EXPECT_TRUE(wm::IsActiveWindow(window0.get())); |
225 } | 225 } |
226 | 226 |
227 TEST_F(WindowCycleControllerTest, AlwaysOnTopWindow) { | 227 TEST_F(WindowCycleControllerTest, AlwaysOnTopWindow) { |
228 WindowCycleController* controller = | 228 WindowCycleController* controller = |
229 Shell::GetInstance()->window_cycle_controller(); | 229 Shell::GetInstance()->window_cycle_controller(); |
230 | 230 |
231 // Set up several windows to use to test cycling. | 231 // Set up several windows to use to test cycling. |
232 scoped_ptr<Window> window0(CreateTestWindowWithId(0, NULL)); | 232 scoped_ptr<Window> window0(CreateTestWindowInShellWithId(0)); |
233 scoped_ptr<Window> window1(CreateTestWindowWithId(1, NULL)); | 233 scoped_ptr<Window> window1(CreateTestWindowInShellWithId(1)); |
234 | 234 |
235 Window* top_container = | 235 Window* top_container = |
236 Shell::GetContainer( | 236 Shell::GetContainer( |
237 Shell::GetPrimaryRootWindow(), | 237 Shell::GetPrimaryRootWindow(), |
238 internal::kShellWindowId_AlwaysOnTopContainer); | 238 internal::kShellWindowId_AlwaysOnTopContainer); |
239 scoped_ptr<Window> window2(CreateTestWindowWithId(2, top_container)); | 239 scoped_ptr<Window> window2(CreateTestWindowWithId(2, top_container)); |
240 wm::ActivateWindow(window0.get()); | 240 wm::ActivateWindow(window0.get()); |
241 | 241 |
242 // Simulate pressing and releasing Alt-tab. | 242 // Simulate pressing and releasing Alt-tab. |
243 EXPECT_TRUE(wm::IsActiveWindow(window0.get())); | 243 EXPECT_TRUE(wm::IsActiveWindow(window0.get())); |
(...skipping 22 matching lines...) Expand all Loading... |
266 | 266 |
267 controller->HandleCycleWindow(WindowCycleController::FORWARD, true); | 267 controller->HandleCycleWindow(WindowCycleController::FORWARD, true); |
268 EXPECT_TRUE(wm::IsActiveWindow(window0.get())); | 268 EXPECT_TRUE(wm::IsActiveWindow(window0.get())); |
269 } | 269 } |
270 | 270 |
271 TEST_F(WindowCycleControllerTest, AlwaysOnTopMultiWindow) { | 271 TEST_F(WindowCycleControllerTest, AlwaysOnTopMultiWindow) { |
272 WindowCycleController* controller = | 272 WindowCycleController* controller = |
273 Shell::GetInstance()->window_cycle_controller(); | 273 Shell::GetInstance()->window_cycle_controller(); |
274 | 274 |
275 // Set up several windows to use to test cycling. | 275 // Set up several windows to use to test cycling. |
276 scoped_ptr<Window> window0(CreateTestWindowWithId(0, NULL)); | 276 scoped_ptr<Window> window0(CreateTestWindowInShellWithId(0)); |
277 scoped_ptr<Window> window1(CreateTestWindowWithId(1, NULL)); | 277 scoped_ptr<Window> window1(CreateTestWindowInShellWithId(1)); |
278 | 278 |
279 Window* top_container = | 279 Window* top_container = |
280 Shell::GetContainer( | 280 Shell::GetContainer( |
281 Shell::GetPrimaryRootWindow(), | 281 Shell::GetPrimaryRootWindow(), |
282 internal::kShellWindowId_AlwaysOnTopContainer); | 282 internal::kShellWindowId_AlwaysOnTopContainer); |
283 scoped_ptr<Window> window2(CreateTestWindowWithId(2, top_container)); | 283 scoped_ptr<Window> window2(CreateTestWindowWithId(2, top_container)); |
284 scoped_ptr<Window> window3(CreateTestWindowWithId(3, top_container)); | 284 scoped_ptr<Window> window3(CreateTestWindowWithId(3, top_container)); |
285 wm::ActivateWindow(window0.get()); | 285 wm::ActivateWindow(window0.get()); |
286 | 286 |
287 // Simulate pressing and releasing Alt-tab. | 287 // Simulate pressing and releasing Alt-tab. |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
322 UpdateDisplay("0+0-1000x600,1001+0-600x400"); | 322 UpdateDisplay("0+0-1000x600,1001+0-600x400"); |
323 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); | 323 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); |
324 ASSERT_EQ(2U, root_windows.size()); | 324 ASSERT_EQ(2U, root_windows.size()); |
325 | 325 |
326 WindowCycleController* controller = | 326 WindowCycleController* controller = |
327 Shell::GetInstance()->window_cycle_controller(); | 327 Shell::GetInstance()->window_cycle_controller(); |
328 | 328 |
329 Shell::GetInstance()->set_active_root_window(root_windows[0]); | 329 Shell::GetInstance()->set_active_root_window(root_windows[0]); |
330 | 330 |
331 // Create two windows in the primary root. | 331 // Create two windows in the primary root. |
332 scoped_ptr<Window> window0(CreateTestWindowWithId(0, NULL)); | 332 scoped_ptr<Window> window0(CreateTestWindowInShellWithId(0)); |
333 EXPECT_EQ(root_windows[0], window0->GetRootWindow()); | 333 EXPECT_EQ(root_windows[0], window0->GetRootWindow()); |
334 Window* top_container0 = | 334 Window* top_container0 = |
335 Shell::GetContainer( | 335 Shell::GetContainer( |
336 root_windows[0], | 336 root_windows[0], |
337 internal::kShellWindowId_AlwaysOnTopContainer); | 337 internal::kShellWindowId_AlwaysOnTopContainer); |
338 scoped_ptr<Window> window1(CreateTestWindowWithId(1, top_container0)); | 338 scoped_ptr<Window> window1(CreateTestWindowWithId(1, top_container0)); |
339 EXPECT_EQ(root_windows[0], window1->GetRootWindow()); | 339 EXPECT_EQ(root_windows[0], window1->GetRootWindow()); |
340 | 340 |
341 // And two on the secondary root. | 341 // And two on the secondary root. |
342 Shell::GetInstance()->set_active_root_window(root_windows[1]); | 342 Shell::GetInstance()->set_active_root_window(root_windows[1]); |
343 scoped_ptr<Window> window2(CreateTestWindowWithId(2, NULL)); | 343 scoped_ptr<Window> window2(CreateTestWindowInShellWithId(2)); |
344 EXPECT_EQ(root_windows[1], window2->GetRootWindow()); | 344 EXPECT_EQ(root_windows[1], window2->GetRootWindow()); |
345 | 345 |
346 Window* top_container1 = | 346 Window* top_container1 = |
347 Shell::GetContainer( | 347 Shell::GetContainer( |
348 root_windows[1], | 348 root_windows[1], |
349 internal::kShellWindowId_AlwaysOnTopContainer); | 349 internal::kShellWindowId_AlwaysOnTopContainer); |
350 scoped_ptr<Window> window3(CreateTestWindowWithId(3, top_container1)); | 350 scoped_ptr<Window> window3(CreateTestWindowWithId(3, top_container1)); |
351 EXPECT_EQ(root_windows[1], window3->GetRootWindow()); | 351 EXPECT_EQ(root_windows[1], window3->GetRootWindow()); |
352 | 352 |
353 // Move the active root window to the secondary. | 353 // Move the active root window to the secondary. |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
391 | 391 |
392 controller->HandleCycleWindow(WindowCycleController::FORWARD, true); | 392 controller->HandleCycleWindow(WindowCycleController::FORWARD, true); |
393 EXPECT_TRUE(wm::IsActiveWindow(window2.get())); | 393 EXPECT_TRUE(wm::IsActiveWindow(window2.get())); |
394 } | 394 } |
395 | 395 |
396 TEST_F(WindowCycleControllerTest, MostRecentlyUsed) { | 396 TEST_F(WindowCycleControllerTest, MostRecentlyUsed) { |
397 WindowCycleController* controller = | 397 WindowCycleController* controller = |
398 Shell::GetInstance()->window_cycle_controller(); | 398 Shell::GetInstance()->window_cycle_controller(); |
399 | 399 |
400 // Set up several windows to use to test cycling. | 400 // Set up several windows to use to test cycling. |
401 scoped_ptr<Window> window0(CreateTestWindowWithId(0, NULL)); | 401 scoped_ptr<Window> window0(CreateTestWindowInShellWithId(0)); |
402 scoped_ptr<Window> window1(CreateTestWindowWithId(1, NULL)); | 402 scoped_ptr<Window> window1(CreateTestWindowInShellWithId(1)); |
403 scoped_ptr<Window> window2(CreateTestWindowWithId(2, NULL)); | 403 scoped_ptr<Window> window2(CreateTestWindowInShellWithId(2)); |
404 | 404 |
405 wm::ActivateWindow(window0.get()); | 405 wm::ActivateWindow(window0.get()); |
406 | 406 |
407 // Simulate pressing and releasing Alt-tab. | 407 // Simulate pressing and releasing Alt-tab. |
408 EXPECT_TRUE(wm::IsActiveWindow(window0.get())); | 408 EXPECT_TRUE(wm::IsActiveWindow(window0.get())); |
409 controller->HandleCycleWindow(WindowCycleController::FORWARD, true); | 409 controller->HandleCycleWindow(WindowCycleController::FORWARD, true); |
410 | 410 |
411 // Window lists should return the topmost window in front. | 411 // Window lists should return the topmost window in front. |
412 ASSERT_TRUE(controller->windows()); | 412 ASSERT_TRUE(controller->windows()); |
413 ASSERT_EQ(3u, controller->windows()->windows().size()); | 413 ASSERT_EQ(3u, controller->windows()->windows().size()); |
(...skipping 17 matching lines...) Expand all Loading... |
431 controller->HandleCycleWindow(WindowCycleController::FORWARD, true); | 431 controller->HandleCycleWindow(WindowCycleController::FORWARD, true); |
432 EXPECT_TRUE(wm::IsActiveWindow(window2.get())); | 432 EXPECT_TRUE(wm::IsActiveWindow(window2.get())); |
433 | 433 |
434 controller->HandleCycleWindow(WindowCycleController::FORWARD, true); | 434 controller->HandleCycleWindow(WindowCycleController::FORWARD, true); |
435 EXPECT_TRUE(wm::IsActiveWindow(window0.get())); | 435 EXPECT_TRUE(wm::IsActiveWindow(window0.get())); |
436 } | 436 } |
437 | 437 |
438 } // namespace | 438 } // namespace |
439 | 439 |
440 } // namespace ash | 440 } // namespace ash |
OLD | NEW |