| OLD | NEW |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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/splitview/split_view_controller.h" | 5 #include "ash/wm/splitview/split_view_controller.h" |
| 6 | 6 |
| 7 #include "ash/shell.h" | 7 #include "ash/shell.h" |
| 8 #include "ash/test/ash_test_base.h" | 8 #include "ash/test/ash_test_base.h" |
| 9 #include "ash/wm/overview/window_selector_controller.h" | |
| 10 #include "ash/wm/window_state.h" | 9 #include "ash/wm/window_state.h" |
| 11 #include "ash/wm/window_util.h" | 10 #include "ash/wm/window_util.h" |
| 12 #include "ash/wm/wm_event.h" | 11 #include "ash/wm/wm_event.h" |
| 13 #include "ui/aura/test/test_window_delegate.h" | 12 #include "ui/aura/test/test_window_delegate.h" |
| 14 | 13 |
| 15 namespace ash { | 14 namespace ash { |
| 16 | 15 |
| 17 class SplitViewControllerTest : public AshTestBase { | 16 class SplitViewControllerTest : public AshTestBase { |
| 18 public: | 17 public: |
| 19 SplitViewControllerTest() {} | 18 SplitViewControllerTest() {} |
| 20 ~SplitViewControllerTest() override {} | 19 ~SplitViewControllerTest() override {} |
| 21 | 20 |
| 22 aura::Window* CreateWindow(const gfx::Rect& bounds) { | 21 aura::Window* CreateWindow(const gfx::Rect& bounds) { |
| 23 aura::Window* window = | 22 aura::Window* window = |
| 24 CreateTestWindowInShellWithDelegate(&delegate_, -1, bounds); | 23 CreateTestWindowInShellWithDelegate(&delegate_, -1, bounds); |
| 25 return window; | 24 return window; |
| 26 } | 25 } |
| 27 | 26 |
| 28 void EndSplitView() { split_view_controller()->EndSplitView(); } | 27 void EndSplitView() { split_view_controller()->EndSplitView(); } |
| 29 | 28 |
| 30 void ToggleOverview() { | |
| 31 Shell::Get()->window_selector_controller()->ToggleOverview(); | |
| 32 } | |
| 33 | |
| 34 std::vector<aura::Window*> GetWindowsInOverviewGrids() { | |
| 35 return Shell::Get() | |
| 36 ->window_selector_controller() | |
| 37 ->GetWindowsListInOverviewGridsForTesting(); | |
| 38 } | |
| 39 | |
| 40 SplitViewController* split_view_controller() { | 29 SplitViewController* split_view_controller() { |
| 41 return Shell::Get()->split_view_controller(); | 30 return Shell::Get()->split_view_controller(); |
| 42 } | 31 } |
| 43 | 32 |
| 44 private: | 33 private: |
| 45 aura::test::TestWindowDelegate delegate_; | 34 aura::test::TestWindowDelegate delegate_; |
| 46 | 35 |
| 47 DISALLOW_COPY_AND_ASSIGN(SplitViewControllerTest); | 36 DISALLOW_COPY_AND_ASSIGN(SplitViewControllerTest); |
| 48 }; | 37 }; |
| 49 | 38 |
| 50 // Tests the basic functionalities. | 39 // Tests the basic functionalities. |
| 51 TEST_F(SplitViewControllerTest, Basic) { | 40 TEST_F(SplitViewControllerTest, Basic) { |
| 52 const gfx::Rect bounds(0, 0, 400, 400); | 41 const gfx::Rect bounds(0, 0, 400, 400); |
| 53 std::unique_ptr<aura::Window> window1(CreateWindow(bounds)); | 42 std::unique_ptr<aura::Window> window1(CreateWindow(bounds)); |
| 54 std::unique_ptr<aura::Window> window2(CreateWindow(bounds)); | 43 std::unique_ptr<aura::Window> window2(CreateWindow(bounds)); |
| 55 | 44 |
| 56 EXPECT_EQ(split_view_controller()->state(), SplitViewController::NO_SNAP); | 45 EXPECT_EQ(split_view_controller()->state(), SplitViewController::NO_SNAP); |
| 57 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false); | 46 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false); |
| 58 | 47 |
| 59 split_view_controller()->SnapWindow(window1.get(), SplitViewController::LEFT); | 48 split_view_controller()->SnapWindow(window1.get(), SplitViewController::LEFT); |
| 60 EXPECT_EQ(split_view_controller()->state(), | 49 EXPECT_EQ(split_view_controller()->state(), |
| 61 SplitViewController::LEFT_SNAPPED); | 50 SplitViewController::LEFT_SNAPPED); |
| 62 EXPECT_EQ(split_view_controller()->left_window(), window1.get()); | 51 EXPECT_EQ(split_view_controller()->left_window(), window1.get()); |
| 63 EXPECT_NE(split_view_controller()->left_window(), window2.get()); | 52 EXPECT_NE(split_view_controller()->left_window(), window2.get()); |
| 64 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true); | 53 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true); |
| 65 EXPECT_EQ(window1->GetBoundsInScreen(), | 54 EXPECT_EQ(window1->GetBoundsInScreen(), |
| 66 split_view_controller()->GetSnappedWindowBoundsInScreen( | 55 split_view_controller()->GetSnappedWindowBoundsInScreen( |
| 67 window1.get(), SplitViewController::LEFT)); | 56 window1.get(), SplitViewController::LEFT_SNAPPED)); |
| 68 | 57 |
| 69 split_view_controller()->SnapWindow(window2.get(), | 58 split_view_controller()->SnapWindow(window2.get(), |
| 70 SplitViewController::RIGHT); | 59 SplitViewController::RIGHT); |
| 71 EXPECT_EQ(split_view_controller()->state(), | 60 EXPECT_EQ(split_view_controller()->state(), |
| 72 SplitViewController::BOTH_SNAPPED); | 61 SplitViewController::BOTH_SNAPPED); |
| 73 EXPECT_EQ(split_view_controller()->right_window(), window2.get()); | 62 EXPECT_EQ(split_view_controller()->right_window(), window2.get()); |
| 74 EXPECT_NE(split_view_controller()->right_window(), window1.get()); | 63 EXPECT_NE(split_view_controller()->right_window(), window1.get()); |
| 75 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true); | 64 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true); |
| 76 EXPECT_EQ(window2->GetBoundsInScreen(), | 65 EXPECT_EQ(window2->GetBoundsInScreen(), |
| 77 split_view_controller()->GetSnappedWindowBoundsInScreen( | 66 split_view_controller()->GetSnappedWindowBoundsInScreen( |
| 78 window2.get(), SplitViewController::RIGHT)); | 67 window2.get(), SplitViewController::RIGHT_SNAPPED)); |
| 79 | 68 |
| 80 EndSplitView(); | 69 EndSplitView(); |
| 81 EXPECT_EQ(split_view_controller()->state(), SplitViewController::NO_SNAP); | 70 EXPECT_EQ(split_view_controller()->state(), SplitViewController::NO_SNAP); |
| 82 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false); | 71 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false); |
| 83 } | 72 } |
| 84 | 73 |
| 85 // Tests that the default snapped window is the first window that gets snapped. | 74 // Tests that the default snapped window is the first window that gets snapped. |
| 86 TEST_F(SplitViewControllerTest, DefaultSnappedWindow) { | 75 TEST_F(SplitViewControllerTest, DefaultSnappedWindow) { |
| 87 const gfx::Rect bounds(0, 0, 400, 400); | 76 const gfx::Rect bounds(0, 0, 400, 400); |
| 88 std::unique_ptr<aura::Window> window1(CreateWindow(bounds)); | 77 std::unique_ptr<aura::Window> window1(CreateWindow(bounds)); |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 164 EXPECT_EQ(split_view_controller()->right_window(), window2.get()); | 153 EXPECT_EQ(split_view_controller()->right_window(), window2.get()); |
| 165 EXPECT_EQ(split_view_controller()->state(), | 154 EXPECT_EQ(split_view_controller()->state(), |
| 166 SplitViewController::BOTH_SNAPPED); | 155 SplitViewController::BOTH_SNAPPED); |
| 167 | 156 |
| 168 wm::ActivateWindow(window3.get()); | 157 wm::ActivateWindow(window3.get()); |
| 169 EXPECT_EQ(split_view_controller()->right_window(), window3.get()); | 158 EXPECT_EQ(split_view_controller()->right_window(), window3.get()); |
| 170 EXPECT_EQ(split_view_controller()->state(), | 159 EXPECT_EQ(split_view_controller()->state(), |
| 171 SplitViewController::BOTH_SNAPPED); | 160 SplitViewController::BOTH_SNAPPED); |
| 172 } | 161 } |
| 173 | 162 |
| 174 // Tests that if split view mode and overview mode are active at the same time, | |
| 175 // i.e., half of the screen is occupied by a snapped window and half of the | |
| 176 // screen is occupied by the overview windows grid, the next activatable window | |
| 177 // will be picked to snap when exiting the overview mode. | |
| 178 TEST_F(SplitViewControllerTest, ExitOverviewTest) { | |
| 179 const gfx::Rect bounds(0, 0, 400, 400); | |
| 180 std::unique_ptr<aura::Window> window1(CreateWindow(bounds)); | |
| 181 std::unique_ptr<aura::Window> window2(CreateWindow(bounds)); | |
| 182 std::unique_ptr<aura::Window> window3(CreateWindow(bounds)); | |
| 183 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false); | |
| 184 | |
| 185 ToggleOverview(); | |
| 186 split_view_controller()->SnapWindow(window1.get(), SplitViewController::LEFT); | |
| 187 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true); | |
| 188 EXPECT_EQ(split_view_controller()->state(), | |
| 189 SplitViewController::LEFT_SNAPPED); | |
| 190 EXPECT_EQ(split_view_controller()->left_window(), window1.get()); | |
| 191 | |
| 192 ToggleOverview(); | |
| 193 EXPECT_EQ(split_view_controller()->state(), | |
| 194 SplitViewController::BOTH_SNAPPED); | |
| 195 EXPECT_EQ(split_view_controller()->right_window(), window3.get()); | |
| 196 } | |
| 197 | |
| 198 // Tests that if split view mode is active when entering overview, the overview | |
| 199 // windows grid should show in the non-default side of the screen, and the | |
| 200 // default snapped window should not be shown in the overview window grid. | |
| 201 TEST_F(SplitViewControllerTest, EnterOverviewTest) { | |
| 202 const gfx::Rect bounds(0, 0, 400, 400); | |
| 203 std::unique_ptr<aura::Window> window1(CreateWindow(bounds)); | |
| 204 std::unique_ptr<aura::Window> window2(CreateWindow(bounds)); | |
| 205 std::unique_ptr<aura::Window> window3(CreateWindow(bounds)); | |
| 206 | |
| 207 split_view_controller()->SnapWindow(window1.get(), SplitViewController::LEFT); | |
| 208 split_view_controller()->SnapWindow(window2.get(), | |
| 209 SplitViewController::RIGHT); | |
| 210 EXPECT_EQ(split_view_controller()->state(), | |
| 211 SplitViewController::BOTH_SNAPPED); | |
| 212 EXPECT_EQ(split_view_controller()->GetDefaultSnappedWindow(), window1.get()); | |
| 213 | |
| 214 ToggleOverview(); | |
| 215 EXPECT_EQ(split_view_controller()->state(), | |
| 216 SplitViewController::LEFT_SNAPPED); | |
| 217 std::vector<aura::Window*> windows = GetWindowsInOverviewGrids(); | |
| 218 auto iter = std::find(windows.begin(), windows.end(), | |
| 219 split_view_controller()->GetDefaultSnappedWindow()); | |
| 220 EXPECT_TRUE(iter == windows.end()); | |
| 221 } | |
| 222 | |
| 223 } // namespace ash | 163 } // namespace ash |
| OLD | NEW |