Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "athena/wm/public/window_manager.h" | 5 #include "athena/wm/public/window_manager.h" |
| 6 | 6 |
| 7 #include "athena/screen/public/screen_manager.h" | 7 #include "athena/screen/public/screen_manager.h" |
| 8 #include "athena/test/athena_test_base.h" | 8 #include "athena/test/athena_test_base.h" |
| 9 #include "athena/wm/public/window_list_provider.h" | 9 #include "athena/wm/public/window_list_provider.h" |
| 10 #include "athena/wm/split_view_controller.h" | 10 #include "athena/wm/split_view_controller.h" |
| 11 #include "athena/wm/test/window_manager_impl_test_api.h" | 11 #include "athena/wm/test/window_manager_impl_test_api.h" |
| 12 #include "athena/wm/window_manager_impl.h" | 12 #include "athena/wm/window_manager_impl.h" |
| 13 #include "ui/aura/client/window_tree_client.h" | 13 #include "ui/aura/client/window_tree_client.h" |
| 14 #include "ui/aura/test/test_window_delegate.h" | 14 #include "ui/aura/test/test_window_delegate.h" |
| 15 #include "ui/aura/window.h" | 15 #include "ui/aura/window.h" |
| 16 #include "ui/base/hit_test.h" | 16 #include "ui/base/hit_test.h" |
| 17 #include "ui/events/test/event_generator.h" | 17 #include "ui/events/test/event_generator.h" |
| 18 #include "ui/gfx/display.h" | 18 #include "ui/gfx/display.h" |
| 19 #include "ui/gfx/screen.h" | 19 #include "ui/gfx/screen.h" |
| 20 #include "ui/wm/core/window_util.h" | 20 #include "ui/wm/core/window_util.h" |
| 21 | 21 |
| 22 namespace { | |
| 23 | |
| 24 scoped_ptr<aura::Window> CreateWindow(aura::WindowDelegate* delegate) { | |
| 25 scoped_ptr<aura::Window> window(new aura::Window(delegate)); | |
| 26 window->SetType(ui::wm::WINDOW_TYPE_NORMAL); | |
| 27 window->Init(aura::WINDOW_LAYER_SOLID_COLOR); | |
| 28 window->Show(); | |
| 29 return window.Pass(); | |
| 30 } | |
| 31 | |
| 32 } // namespace | |
| 33 | |
| 34 namespace athena { | 22 namespace athena { |
| 35 | 23 |
| 36 typedef test::AthenaTestBase WindowManagerTest; | 24 class WindowManagerTest : public test::AthenaTestBase { |
| 25 public: | |
| 26 WindowManagerTest() {} | |
| 27 virtual ~WindowManagerTest() {} | |
| 28 | |
| 29 scoped_ptr<aura::Window> CreateAndActivateWindow( | |
| 30 aura::WindowDelegate* delegate) { | |
| 31 scoped_ptr<aura::Window> window(CreateTestWindow(delegate, gfx::Rect())); | |
| 32 window->Show(); | |
| 33 wm::ActivateWindow(window.get()); | |
| 34 return window.Pass(); | |
| 35 } | |
| 36 | |
| 37 private: | |
| 38 DISALLOW_COPY_AND_ASSIGN(WindowManagerTest); | |
| 39 }; | |
| 37 | 40 |
| 38 TEST_F(WindowManagerTest, Empty) { | 41 TEST_F(WindowManagerTest, Empty) { |
| 39 } | 42 } |
| 40 | 43 |
| 41 TEST_F(WindowManagerTest, OverviewModeBasics) { | 44 TEST_F(WindowManagerTest, OverviewModeBasics) { |
| 42 aura::test::TestWindowDelegate delegate; | 45 aura::test::TestWindowDelegate delegate; |
| 43 scoped_ptr<aura::Window> first(CreateWindow(&delegate)); | 46 scoped_ptr<aura::Window> first(CreateAndActivateWindow(&delegate)); |
| 44 scoped_ptr<aura::Window> second(CreateWindow(&delegate)); | 47 scoped_ptr<aura::Window> second(CreateAndActivateWindow(&delegate)); |
| 45 | 48 |
| 46 test::WindowManagerImplTestApi wm_api; | 49 test::WindowManagerImplTestApi wm_api; |
| 47 aura::client::ParentWindowWithContext( | |
| 48 first.get(), ScreenManager::Get()->GetContext(), gfx::Rect()); | |
| 49 aura::client::ParentWindowWithContext( | |
| 50 second.get(), ScreenManager::Get()->GetContext(), gfx::Rect()); | |
| 51 wm::ActivateWindow(second.get()); | |
| 52 | 50 |
| 53 ASSERT_FALSE(WindowManager::GetInstance()->IsOverviewModeActive()); | 51 ASSERT_FALSE(WindowManager::GetInstance()->IsOverviewModeActive()); |
| 54 EXPECT_EQ(first->bounds().ToString(), second->bounds().ToString()); | 52 EXPECT_EQ(first->bounds().ToString(), second->bounds().ToString()); |
| 55 EXPECT_EQ(gfx::Screen::GetNativeScreen() | 53 EXPECT_EQ(gfx::Screen::GetNativeScreen() |
| 56 ->GetPrimaryDisplay() | 54 ->GetPrimaryDisplay() |
| 57 .work_area() | 55 .work_area() |
| 58 .size() | 56 .size() |
| 59 .ToString(), | 57 .ToString(), |
| 60 first->bounds().size().ToString()); | 58 first->bounds().size().ToString()); |
| 61 EXPECT_FALSE(WindowManager::GetInstance()->IsOverviewModeActive()); | 59 EXPECT_FALSE(WindowManager::GetInstance()->IsOverviewModeActive()); |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 78 WindowManager::GetInstance()->ToggleOverview(); | 76 WindowManager::GetInstance()->ToggleOverview(); |
| 79 ASSERT_FALSE(WindowManager::GetInstance()->IsOverviewModeActive()); | 77 ASSERT_FALSE(WindowManager::GetInstance()->IsOverviewModeActive()); |
| 80 EXPECT_FALSE(first->IsVisible()); | 78 EXPECT_FALSE(first->IsVisible()); |
| 81 EXPECT_TRUE(second->IsVisible()); | 79 EXPECT_TRUE(second->IsVisible()); |
| 82 } | 80 } |
| 83 | 81 |
| 84 TEST_F(WindowManagerTest, OverviewToSplitViewMode) { | 82 TEST_F(WindowManagerTest, OverviewToSplitViewMode) { |
| 85 test::WindowManagerImplTestApi wm_api; | 83 test::WindowManagerImplTestApi wm_api; |
| 86 | 84 |
| 87 aura::test::TestWindowDelegate delegate; | 85 aura::test::TestWindowDelegate delegate; |
| 88 scoped_ptr<aura::Window> w1(CreateTestWindow(&delegate, gfx::Rect())); | 86 scoped_ptr<aura::Window> w1(CreateAndActivateWindow(&delegate)); |
| 89 scoped_ptr<aura::Window> w2(CreateTestWindow(&delegate, gfx::Rect())); | 87 scoped_ptr<aura::Window> w2(CreateAndActivateWindow(&delegate)); |
| 90 scoped_ptr<aura::Window> w3(CreateTestWindow(&delegate, gfx::Rect())); | 88 scoped_ptr<aura::Window> w3(CreateAndActivateWindow(&delegate)); |
| 91 wm::ActivateWindow(w3.get()); | |
| 92 | 89 |
| 93 WindowManager::GetInstance()->ToggleOverview(); | 90 WindowManager::GetInstance()->ToggleOverview(); |
| 94 EXPECT_TRUE(w1->IsVisible()); | 91 EXPECT_TRUE(w1->IsVisible()); |
| 95 EXPECT_TRUE(w2->IsVisible()); | 92 EXPECT_TRUE(w2->IsVisible()); |
| 96 EXPECT_TRUE(w3->IsVisible()); | 93 EXPECT_TRUE(w3->IsVisible()); |
| 97 | 94 |
| 98 // Go into split-view mode. | 95 // Go into split-view mode. |
| 99 WindowOverviewModeDelegate* overview_delegate = wm_api.wm(); | 96 WindowOverviewModeDelegate* overview_delegate = wm_api.wm(); |
| 100 overview_delegate->OnSplitViewMode(NULL, w2.get()); | 97 overview_delegate->OnSplitViewMode(w3.get(), NULL); |
| 101 EXPECT_TRUE(w3->IsVisible()); | 98 EXPECT_TRUE(w3->IsVisible()); |
| 102 EXPECT_TRUE(w2->IsVisible()); | 99 EXPECT_TRUE(w2->IsVisible()); |
| 103 EXPECT_FALSE(w1->IsVisible()); | 100 EXPECT_FALSE(w1->IsVisible()); |
| 104 } | 101 } |
| 105 | 102 |
| 106 TEST_F(WindowManagerTest, BezelGestureToSplitViewMode) { | 103 TEST_F(WindowManagerTest, BezelGestureToSplitViewMode) { |
| 107 aura::test::TestWindowDelegate delegate; | 104 aura::test::TestWindowDelegate delegate; |
| 108 scoped_ptr<aura::Window> first(CreateWindow(&delegate)); | 105 scoped_ptr<aura::Window> first(CreateAndActivateWindow(&delegate)); |
| 109 scoped_ptr<aura::Window> second(CreateWindow(&delegate)); | 106 scoped_ptr<aura::Window> second(CreateAndActivateWindow(&delegate)); |
| 110 scoped_ptr<aura::Window> third(CreateWindow(&delegate)); | 107 scoped_ptr<aura::Window> third(CreateAndActivateWindow(&delegate)); |
| 111 | 108 |
| 112 test::WindowManagerImplTestApi wm_api; | 109 test::WindowManagerImplTestApi wm_api; |
| 113 aura::client::ParentWindowWithContext( | |
| 114 first.get(), ScreenManager::Get()->GetContext(), gfx::Rect()); | |
| 115 aura::client::ParentWindowWithContext( | |
| 116 second.get(), ScreenManager::Get()->GetContext(), gfx::Rect()); | |
| 117 aura::client::ParentWindowWithContext( | |
| 118 third.get(), ScreenManager::Get()->GetContext(), gfx::Rect()); | |
| 119 | 110 |
| 120 // Test that going into split-view mode with two-finger gesture selects the | 111 // Test that going into split-view mode with two-finger gesture selects the |
| 121 // correct windows on left and right splits. | 112 // correct windows on left and right splits. |
| 122 ui::test::EventGenerator generator(root_window()); | 113 ui::test::EventGenerator generator(root_window()); |
| 123 const gfx::Point start_points[2] = { | 114 const gfx::Point start_points[2] = { |
| 124 gfx::Point(2, 10), gfx::Point(4, 20), | 115 gfx::Point(2, 10), gfx::Point(4, 20), |
| 125 }; | 116 }; |
| 126 const int kEventTimeSepration = 16; | 117 const int kEventTimeSepration = 16; |
| 127 int x_middle = root_window()->bounds().width() / 2; | 118 int x_middle = root_window()->bounds().width() / 2; |
| 128 generator.GestureMultiFingerScroll( | 119 generator.GestureMultiFingerScroll( |
| 129 2, start_points, kEventTimeSepration, 1, x_middle, 0); | 120 2, start_points, kEventTimeSepration, 1, x_middle, 0); |
| 130 ASSERT_TRUE(wm_api.GetSplitViewController()->IsSplitViewModeActive()); | 121 ASSERT_TRUE(wm_api.GetSplitViewController()->IsSplitViewModeActive()); |
| 131 EXPECT_EQ(second.get(), wm_api.GetSplitViewController()->left_window()); | 122 EXPECT_EQ(second.get(), wm_api.GetSplitViewController()->left_window()); |
| 132 EXPECT_EQ(third.get(), wm_api.GetSplitViewController()->right_window()); | 123 EXPECT_EQ(third.get(), wm_api.GetSplitViewController()->right_window()); |
| 133 EXPECT_EQ(second->bounds().size().ToString(), | 124 EXPECT_EQ(second->bounds().size().ToString(), |
| 134 third->bounds().size().ToString()); | 125 third->bounds().size().ToString()); |
| 135 } | 126 } |
| 136 | 127 |
| 137 TEST_F(WindowManagerTest, BezelGestureToSwitchBetweenWindows) { | 128 TEST_F(WindowManagerTest, BezelGestureToSwitchBetweenWindows) { |
| 138 aura::test::TestWindowDelegate delegate; | 129 aura::test::TestWindowDelegate delegate; |
| 139 scoped_ptr<aura::Window> first(CreateWindow(&delegate)); | 130 scoped_ptr<aura::Window> first(CreateAndActivateWindow(&delegate)); |
| 140 scoped_ptr<aura::Window> second(CreateWindow(&delegate)); | 131 scoped_ptr<aura::Window> second(CreateAndActivateWindow(&delegate)); |
| 141 scoped_ptr<aura::Window> third(CreateWindow(&delegate)); | 132 scoped_ptr<aura::Window> third(CreateAndActivateWindow(&delegate)); |
| 142 first->Hide(); | 133 first->Hide(); |
| 143 second->Hide(); | 134 second->Hide(); |
| 144 | 135 |
| 145 test::WindowManagerImplTestApi wm_api; | 136 test::WindowManagerImplTestApi wm_api; |
| 146 aura::client::ParentWindowWithContext( | |
| 147 first.get(), ScreenManager::Get()->GetContext(), gfx::Rect()); | |
| 148 aura::client::ParentWindowWithContext( | |
| 149 second.get(), ScreenManager::Get()->GetContext(), gfx::Rect()); | |
| 150 aura::client::ParentWindowWithContext( | |
| 151 third.get(), ScreenManager::Get()->GetContext(), gfx::Rect()); | |
| 152 | |
| 153 EXPECT_EQ(third.get(), | 137 EXPECT_EQ(third.get(), |
| 154 wm_api.GetWindowListProvider()->GetWindowList().back()); | 138 wm_api.GetWindowListProvider()->GetWindowList().back()); |
| 155 | 139 |
| 156 // Do a two-finger swipe from the left bezel. | 140 // Do a two-finger swipe from the left bezel. |
| 157 ui::test::EventGenerator generator(root_window()); | 141 ui::test::EventGenerator generator(root_window()); |
| 158 const gfx::Point left_bezel_points[2] = { | 142 const gfx::Point left_bezel_points[2] = { |
| 159 gfx::Point(2, 10), gfx::Point(4, 20), | 143 gfx::Point(2, 10), gfx::Point(4, 20), |
| 160 }; | 144 }; |
| 161 const int kEventTimeSepration = 16; | 145 const int kEventTimeSepration = 16; |
| 162 int width = root_window()->bounds().width(); | 146 int width = root_window()->bounds().width(); |
| 163 generator.GestureMultiFingerScroll( | 147 generator.GestureMultiFingerScroll( |
| 164 2, left_bezel_points, kEventTimeSepration, 1, width, 0); | 148 2, left_bezel_points, kEventTimeSepration, 1, width, 0); |
| 165 EXPECT_TRUE(wm::IsActiveWindow(second.get())); | 149 EXPECT_TRUE(wm::IsActiveWindow(second.get())); |
| 166 EXPECT_EQ(second.get(), | 150 EXPECT_EQ(second.get(), |
| 167 wm_api.GetWindowListProvider()->GetWindowList().back()); | 151 wm_api.GetWindowListProvider()->GetWindowList().back()); |
| 168 EXPECT_FALSE(first->IsVisible()); | 152 EXPECT_FALSE(first->IsVisible()); |
| 169 EXPECT_TRUE(second->IsVisible()); | 153 EXPECT_TRUE(second->IsVisible()); |
| 170 EXPECT_FALSE(third->IsVisible()); | 154 EXPECT_FALSE(third->IsVisible()); |
| 171 } | 155 } |
| 172 | 156 |
| 173 TEST_F(WindowManagerTest, TitleDragSwitchBetweenWindows) { | 157 TEST_F(WindowManagerTest, TitleDragSwitchBetweenWindows) { |
| 174 aura::test::TestWindowDelegate delegate; | 158 aura::test::TestWindowDelegate delegate; |
| 175 delegate.set_window_component(HTCAPTION); | 159 delegate.set_window_component(HTCAPTION); |
| 176 scoped_ptr<aura::Window> first(CreateWindow(&delegate)); | 160 scoped_ptr<aura::Window> first(CreateAndActivateWindow(&delegate)); |
| 177 scoped_ptr<aura::Window> second(CreateWindow(&delegate)); | 161 scoped_ptr<aura::Window> second(CreateAndActivateWindow(&delegate)); |
| 178 scoped_ptr<aura::Window> third(CreateWindow(&delegate)); | 162 scoped_ptr<aura::Window> third(CreateAndActivateWindow(&delegate)); |
| 179 | 163 |
| 180 test::WindowManagerImplTestApi wm_api; | 164 test::WindowManagerImplTestApi wm_api; |
| 181 aura::client::ParentWindowWithContext( | |
| 182 first.get(), ScreenManager::Get()->GetContext(), gfx::Rect()); | |
| 183 aura::client::ParentWindowWithContext( | |
| 184 second.get(), ScreenManager::Get()->GetContext(), gfx::Rect()); | |
| 185 aura::client::ParentWindowWithContext( | |
| 186 third.get(), ScreenManager::Get()->GetContext(), gfx::Rect()); | |
| 187 | |
| 188 EXPECT_EQ(third.get(), | 165 EXPECT_EQ(third.get(), |
| 189 wm_api.GetWindowListProvider()->GetWindowList().back()); | 166 wm_api.GetWindowListProvider()->GetWindowList().back()); |
| 190 | 167 |
| 191 // Do a title-swipe from the top to switch to the previous window. | 168 // Do a title-swipe from the top to switch to the previous window. |
| 192 ui::test::EventGenerator generator(root_window()); | 169 ui::test::EventGenerator generator(root_window()); |
| 193 generator.GestureScrollSequence(gfx::Point(20, 10), | 170 generator.GestureScrollSequence(gfx::Point(20, 10), |
| 194 gfx::Point(20, 400), | 171 gfx::Point(20, 400), |
| 195 base::TimeDelta::FromMilliseconds(20), | 172 base::TimeDelta::FromMilliseconds(20), |
| 196 5); | 173 5); |
| 197 EXPECT_TRUE(wm::IsActiveWindow(second.get())); | 174 EXPECT_TRUE(wm::IsActiveWindow(second.get())); |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 219 EXPECT_TRUE(wm::IsActiveWindow(third.get())); | 196 EXPECT_TRUE(wm::IsActiveWindow(third.get())); |
| 220 EXPECT_EQ(third.get(), | 197 EXPECT_EQ(third.get(), |
| 221 wm_api.GetWindowListProvider()->GetWindowList().back()); | 198 wm_api.GetWindowListProvider()->GetWindowList().back()); |
| 222 EXPECT_FALSE(second->IsVisible()); | 199 EXPECT_FALSE(second->IsVisible()); |
| 223 EXPECT_TRUE(third->IsVisible()); | 200 EXPECT_TRUE(third->IsVisible()); |
| 224 } | 201 } |
| 225 | 202 |
| 226 TEST_F(WindowManagerTest, TitleDragSwitchBetweenWindowsInSplitViewMode) { | 203 TEST_F(WindowManagerTest, TitleDragSwitchBetweenWindowsInSplitViewMode) { |
| 227 aura::test::TestWindowDelegate delegate; | 204 aura::test::TestWindowDelegate delegate; |
| 228 delegate.set_window_component(HTCAPTION); | 205 delegate.set_window_component(HTCAPTION); |
| 229 scoped_ptr<aura::Window> first(CreateWindow(&delegate)); | 206 scoped_ptr<aura::Window> first(CreateAndActivateWindow(&delegate)); |
| 230 scoped_ptr<aura::Window> second(CreateWindow(&delegate)); | 207 scoped_ptr<aura::Window> second(CreateAndActivateWindow(&delegate)); |
| 231 scoped_ptr<aura::Window> third(CreateWindow(&delegate)); | 208 scoped_ptr<aura::Window> third(CreateAndActivateWindow(&delegate)); |
| 232 scoped_ptr<aura::Window> fourth(CreateWindow(&delegate)); | 209 scoped_ptr<aura::Window> fourth(CreateAndActivateWindow(&delegate)); |
| 233 | 210 |
| 234 test::WindowManagerImplTestApi wm_api; | 211 test::WindowManagerImplTestApi wm_api; |
| 235 aura::client::ParentWindowWithContext( | |
| 236 first.get(), ScreenManager::Get()->GetContext(), gfx::Rect()); | |
| 237 aura::client::ParentWindowWithContext( | |
| 238 second.get(), ScreenManager::Get()->GetContext(), gfx::Rect()); | |
| 239 aura::client::ParentWindowWithContext( | |
| 240 third.get(), ScreenManager::Get()->GetContext(), gfx::Rect()); | |
| 241 aura::client::ParentWindowWithContext( | |
| 242 fourth.get(), ScreenManager::Get()->GetContext(), gfx::Rect()); | |
| 243 | 212 |
| 244 // Test that going into split-view mode with two-finger gesture selects the | 213 // Test that going into split-view mode with two-finger gesture selects the |
| 245 // correct windows on left and right splits. | 214 // correct windows on left and right splits. |
| 246 ui::test::EventGenerator generator(root_window()); | 215 ui::test::EventGenerator generator(root_window()); |
| 247 const gfx::Point start_points[2] = { | 216 const gfx::Point start_points[2] = { |
| 248 gfx::Point(2, 10), gfx::Point(4, 20), | 217 gfx::Point(2, 10), gfx::Point(4, 20), |
| 249 }; | 218 }; |
| 250 const int kEventTimeSepration = 16; | 219 const int kEventTimeSepration = 16; |
| 251 int x_middle = root_window()->bounds().width() / 2; | 220 int x_middle = root_window()->bounds().width() / 2; |
| 252 generator.GestureMultiFingerScroll( | 221 generator.GestureMultiFingerScroll( |
| 253 2, start_points, kEventTimeSepration, 1, x_middle, 0); | 222 2, start_points, kEventTimeSepration, 1, x_middle, 0); |
| 254 ASSERT_TRUE(wm_api.GetSplitViewController()->IsSplitViewModeActive()); | 223 ASSERT_TRUE(wm_api.GetSplitViewController()->IsSplitViewModeActive()); |
| 255 EXPECT_EQ(third.get(), wm_api.GetSplitViewController()->left_window()); | 224 EXPECT_EQ(third.get(), wm_api.GetSplitViewController()->left_window()); |
| 256 EXPECT_EQ(fourth.get(), wm_api.GetSplitViewController()->right_window()); | 225 EXPECT_EQ(fourth.get(), wm_api.GetSplitViewController()->right_window()); |
| 257 | 226 |
| 258 // Swipe the title of the left window. It should switch to |second|. | 227 // Swipe the title of the left window. It should switch to |second|. |
| 259 generator.GestureScrollSequence(gfx::Point(20, 10), | 228 generator.GestureScrollSequence(gfx::Point(20, 10), |
| 260 gfx::Point(20, 400), | 229 gfx::Point(20, 400), |
| 261 base::TimeDelta::FromMilliseconds(20), | 230 base::TimeDelta::FromMilliseconds(20), |
| 262 5); | 231 5); |
| 263 EXPECT_EQ(second.get(), wm_api.GetSplitViewController()->left_window()); | 232 EXPECT_EQ(second.get(), wm_api.GetSplitViewController()->left_window()); |
| 264 EXPECT_EQ(fourth.get(), wm_api.GetSplitViewController()->right_window()); | 233 EXPECT_EQ(fourth.get(), wm_api.GetSplitViewController()->right_window()); |
| 234 EXPECT_TRUE(wm::IsActiveWindow(second.get())); | |
| 265 aura::Window::Windows windows = | 235 aura::Window::Windows windows = |
| 266 wm_api.GetWindowListProvider()->GetWindowList(); | 236 wm_api.GetWindowListProvider()->GetWindowList(); |
| 267 ASSERT_EQ(4u, windows.size()); | 237 ASSERT_EQ(4u, windows.size()); |
| 268 EXPECT_EQ(second.get(), windows[3]); | 238 EXPECT_EQ(second.get(), windows[3]); |
| 269 EXPECT_EQ(third.get(), windows[2]); | 239 EXPECT_EQ(fourth.get(), windows[2]); |
| 270 EXPECT_EQ(fourth.get(), windows[1]); | 240 EXPECT_EQ(third.get(), windows[1]); |
| 271 | 241 |
| 272 // Swipe the title of the right window now. It should switch to |third|. | 242 // Swipe the title of the right window now. It should switch to |third|. |
| 273 generator.GestureScrollSequence(gfx::Point(x_middle + 20, 10), | 243 generator.GestureScrollSequence(gfx::Point(x_middle + 20, 10), |
| 274 gfx::Point(x_middle + 20, 400), | 244 gfx::Point(x_middle + 20, 400), |
| 275 base::TimeDelta::FromMilliseconds(20), | 245 base::TimeDelta::FromMilliseconds(20), |
| 276 5); | 246 5); |
| 277 EXPECT_EQ(second.get(), wm_api.GetSplitViewController()->left_window()); | 247 EXPECT_EQ(second.get(), wm_api.GetSplitViewController()->left_window()); |
| 278 EXPECT_EQ(third.get(), wm_api.GetSplitViewController()->right_window()); | 248 EXPECT_EQ(third.get(), wm_api.GetSplitViewController()->right_window()); |
| 249 EXPECT_TRUE(wm::IsActiveWindow(third.get())); | |
| 250 windows = wm_api.GetWindowListProvider()->GetWindowList(); | |
| 251 ASSERT_EQ(4u, windows.size()); | |
| 252 EXPECT_EQ(third.get(), windows[3]); | |
| 253 EXPECT_EQ(second.get(), windows[2]); | |
| 254 EXPECT_EQ(fourth.get(), windows[1]); | |
| 279 } | 255 } |
| 280 | 256 |
| 281 TEST_F(WindowManagerTest, NewWindowBounds) { | 257 TEST_F(WindowManagerTest, NewWindowBounds) { |
| 282 aura::test::TestWindowDelegate delegate; | 258 aura::test::TestWindowDelegate delegate; |
| 283 scoped_ptr<aura::Window> first(CreateWindow(&delegate)); | 259 scoped_ptr<aura::Window> first(CreateAndActivateWindow(&delegate)); |
| 284 | 260 |
| 285 test::WindowManagerImplTestApi wm_api; | 261 test::WindowManagerImplTestApi wm_api; |
| 286 aura::client::ParentWindowWithContext( | 262 |
| 287 first.get(), ScreenManager::Get()->GetContext(), gfx::Rect()); | |
| 288 // The window should have the same size as the container. | 263 // The window should have the same size as the container. |
| 289 const gfx::Size work_area = | 264 const gfx::Size work_area = |
| 290 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay().work_area().size(); | 265 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay().work_area().size(); |
| 291 EXPECT_EQ(work_area.ToString(), | 266 EXPECT_EQ(work_area.ToString(), |
| 292 first->bounds().size().ToString()); | 267 first->bounds().size().ToString()); |
| 293 EXPECT_TRUE(first->bounds().origin().IsOrigin()); | 268 EXPECT_TRUE(first->bounds().origin().IsOrigin()); |
| 294 | 269 |
| 295 // A second window should have the same bounds as the first one. | 270 // A second window should have the same bounds as the first one. |
| 296 scoped_ptr<aura::Window> second(CreateWindow(&delegate)); | 271 scoped_ptr<aura::Window> second(CreateAndActivateWindow(&delegate)); |
| 297 aura::client::ParentWindowWithContext( | |
| 298 second.get(), ScreenManager::Get()->GetContext(), gfx::Rect()); | |
| 299 EXPECT_EQ(first->bounds().ToString(), second->bounds().ToString()); | 272 EXPECT_EQ(first->bounds().ToString(), second->bounds().ToString()); |
| 300 | 273 |
| 301 // Get into split view. | 274 // Get into split view. |
| 302 wm_api.GetSplitViewController()->ActivateSplitMode(NULL, NULL); | 275 wm_api.GetSplitViewController()->ActivateSplitMode(NULL, second.get()); |
| 303 const gfx::Rect left_bounds = | 276 const gfx::Rect left_bounds = |
| 304 wm_api.GetSplitViewController()->left_window()->bounds(); | 277 wm_api.GetSplitViewController()->left_window()->bounds(); |
| 305 EXPECT_NE(work_area.ToString(), | 278 EXPECT_NE(work_area.ToString(), |
| 306 left_bounds.size().ToString()); | 279 left_bounds.size().ToString()); |
| 307 | 280 |
| 308 // A new window should replace the left window when in split view. | 281 // A new window should replace the left window when in split view. |
| 309 scoped_ptr<aura::Window> third(CreateWindow(&delegate)); | 282 scoped_ptr<aura::Window> third(CreateAndActivateWindow(&delegate)); |
| 310 aura::client::ParentWindowWithContext( | |
| 311 third.get(), ScreenManager::Get()->GetContext(), gfx::Rect()); | |
| 312 EXPECT_EQ(wm_api.GetSplitViewController()->left_window(), third.get()); | 283 EXPECT_EQ(wm_api.GetSplitViewController()->left_window(), third.get()); |
| 313 EXPECT_EQ(left_bounds.ToString(), third->bounds().ToString()); | 284 EXPECT_EQ(left_bounds.ToString(), third->bounds().ToString()); |
| 314 } | 285 } |
| 315 | 286 |
| 316 TEST_F(WindowManagerTest, SplitModeActivationByShortcut) { | 287 TEST_F(WindowManagerTest, SplitModeActivationByShortcut) { |
| 317 test::WindowManagerImplTestApi wm_api; | 288 test::WindowManagerImplTestApi wm_api; |
| 318 | 289 |
| 319 aura::test::TestWindowDelegate delegate; | 290 aura::test::TestWindowDelegate delegate; |
| 320 scoped_ptr<aura::Window> w1(CreateTestWindow(&delegate, gfx::Rect())); | 291 scoped_ptr<aura::Window> w1(CreateAndActivateWindow(&delegate)); |
| 321 w1->Show(); | |
| 322 | |
| 323 ui::test::EventGenerator generator(root_window()); | |
| 324 | 292 |
| 325 // Splitview mode needs at least two windows. | 293 // Splitview mode needs at least two windows. |
| 326 generator.PressKey(ui::VKEY_F6, ui::EF_CONTROL_DOWN); | 294 wm_api.wm()->ToggleSplitView(); |
| 327 generator.ReleaseKey(ui::VKEY_F6, ui::EF_CONTROL_DOWN); | |
| 328 EXPECT_FALSE(wm_api.GetSplitViewController()->IsSplitViewModeActive()); | 295 EXPECT_FALSE(wm_api.GetSplitViewController()->IsSplitViewModeActive()); |
| 329 | 296 |
| 330 scoped_ptr<aura::Window> w2(CreateTestWindow(&delegate, gfx::Rect())); | 297 scoped_ptr<aura::Window> w2(CreateAndActivateWindow(&delegate)); |
| 331 w2->Show(); | |
| 332 | 298 |
| 333 generator.PressKey(ui::VKEY_F6, ui::EF_CONTROL_DOWN); | 299 wm_api.wm()->ToggleSplitView(); |
|
pkotwicz
2014/09/08 02:27:46
In order for accelerators to work when an activity
| |
| 334 generator.ReleaseKey(ui::VKEY_F6, ui::EF_CONTROL_DOWN); | |
| 335 EXPECT_TRUE(wm_api.GetSplitViewController()->IsSplitViewModeActive()); | 300 EXPECT_TRUE(wm_api.GetSplitViewController()->IsSplitViewModeActive()); |
| 336 int width = | 301 int width = |
| 337 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay().work_area().width(); | 302 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay().work_area().width(); |
| 338 | 303 |
| 339 EXPECT_EQ(width / 2, w1->bounds().width()); | 304 EXPECT_EQ(width / 2, w1->bounds().width()); |
| 340 EXPECT_EQ(width / 2, w2->bounds().width()); | 305 EXPECT_EQ(width / 2, w2->bounds().width()); |
| 341 | 306 |
| 342 // Toggle back to normal mode. | 307 // Toggle back to normal mode. |
| 343 generator.PressKey(ui::VKEY_F6, ui::EF_CONTROL_DOWN); | 308 wm_api.wm()->ToggleSplitView(); |
| 344 generator.ReleaseKey(ui::VKEY_F6, ui::EF_CONTROL_DOWN); | |
| 345 EXPECT_FALSE(wm_api.GetSplitViewController()->IsSplitViewModeActive()); | 309 EXPECT_FALSE(wm_api.GetSplitViewController()->IsSplitViewModeActive()); |
| 346 | 310 |
| 347 EXPECT_EQ(width, w1->bounds().width()); | 311 EXPECT_EQ(width, w1->bounds().width()); |
| 348 EXPECT_EQ(width, w2->bounds().width()); | 312 EXPECT_EQ(width, w2->bounds().width()); |
| 349 } | 313 } |
| 350 | 314 |
| 351 TEST_F(WindowManagerTest, OverviewModeFromSplitMode) { | 315 TEST_F(WindowManagerTest, OverviewModeFromSplitMode) { |
| 352 test::WindowManagerImplTestApi wm_api; | 316 test::WindowManagerImplTestApi wm_api; |
| 353 | 317 |
| 354 aura::test::TestWindowDelegate delegate; | 318 aura::test::TestWindowDelegate delegate; |
| 355 scoped_ptr<aura::Window> w1(CreateTestWindow(&delegate, gfx::Rect())); | 319 scoped_ptr<aura::Window> w1(CreateAndActivateWindow(&delegate)); |
| 356 scoped_ptr<aura::Window> w2(CreateTestWindow(&delegate, gfx::Rect())); | 320 scoped_ptr<aura::Window> w2(CreateAndActivateWindow(&delegate)); |
| 357 scoped_ptr<aura::Window> w3(CreateTestWindow(&delegate, gfx::Rect())); | 321 scoped_ptr<aura::Window> w3(CreateAndActivateWindow(&delegate)); |
| 358 | 322 |
| 359 // Get into split-view mode, and then turn on overview mode. | 323 // Get into split-view mode, and then turn on overview mode. |
| 360 wm_api.GetSplitViewController()->ActivateSplitMode(NULL, NULL); | 324 wm_api.GetSplitViewController()->ActivateSplitMode(w3.get(), NULL); |
| 361 WindowManager::GetInstance()->ToggleOverview(); | 325 WindowManager::GetInstance()->ToggleOverview(); |
| 362 EXPECT_TRUE(wm_api.GetSplitViewController()->IsSplitViewModeActive()); | 326 EXPECT_TRUE(wm_api.GetSplitViewController()->IsSplitViewModeActive()); |
| 363 EXPECT_EQ(w3.get(), wm_api.GetSplitViewController()->left_window()); | 327 EXPECT_EQ(w3.get(), wm_api.GetSplitViewController()->left_window()); |
| 364 EXPECT_EQ(w2.get(), wm_api.GetSplitViewController()->right_window()); | 328 EXPECT_EQ(w2.get(), wm_api.GetSplitViewController()->right_window()); |
| 365 | 329 |
| 366 WindowOverviewModeDelegate* overview_delegate = wm_api.wm(); | 330 WindowOverviewModeDelegate* overview_delegate = wm_api.wm(); |
| 367 overview_delegate->OnSelectWindow(w1.get()); | 331 overview_delegate->OnSelectWindow(w1.get()); |
| 368 EXPECT_FALSE(wm_api.GetSplitViewController()->IsSplitViewModeActive()); | 332 EXPECT_FALSE(wm_api.GetSplitViewController()->IsSplitViewModeActive()); |
| 369 EXPECT_TRUE(w1->IsVisible()); | 333 EXPECT_TRUE(w1->IsVisible()); |
| 370 // Make sure the windows that were in split-view mode are hidden. | 334 // Make sure the windows that were in split-view mode are hidden. |
| 371 EXPECT_FALSE(w2->IsVisible()); | 335 EXPECT_FALSE(w2->IsVisible()); |
| 372 EXPECT_FALSE(w3->IsVisible()); | 336 EXPECT_FALSE(w3->IsVisible()); |
| 373 } | 337 } |
| 374 | 338 |
| 375 } // namespace athena | 339 } // namespace athena |
| OLD | NEW |