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" |
9 #include "ash/wm/window_state.h" | 10 #include "ash/wm/window_state.h" |
10 #include "ash/wm/window_util.h" | 11 #include "ash/wm/window_util.h" |
11 #include "ash/wm/wm_event.h" | 12 #include "ash/wm/wm_event.h" |
12 #include "ui/aura/test/test_window_delegate.h" | 13 #include "ui/aura/test/test_window_delegate.h" |
13 | 14 |
14 namespace ash { | 15 namespace ash { |
15 | 16 |
16 class SplitViewControllerTest : public AshTestBase { | 17 class SplitViewControllerTest : public AshTestBase { |
17 public: | 18 public: |
18 SplitViewControllerTest() {} | 19 SplitViewControllerTest() {} |
19 ~SplitViewControllerTest() override {} | 20 ~SplitViewControllerTest() override {} |
20 | 21 |
21 aura::Window* CreateWindow(const gfx::Rect& bounds) { | 22 aura::Window* CreateWindow(const gfx::Rect& bounds) { |
22 aura::Window* window = | 23 aura::Window* window = |
23 CreateTestWindowInShellWithDelegate(&delegate_, -1, bounds); | 24 CreateTestWindowInShellWithDelegate(&delegate_, -1, bounds); |
24 return window; | 25 return window; |
25 } | 26 } |
26 | 27 |
27 void EndSplitView() { split_view_controller()->EndSplitView(); } | 28 void EndSplitView() { split_view_controller()->EndSplitView(); } |
28 | 29 |
| 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 |
29 SplitViewController* split_view_controller() { | 40 SplitViewController* split_view_controller() { |
30 return Shell::Get()->split_view_controller(); | 41 return Shell::Get()->split_view_controller(); |
31 } | 42 } |
32 | 43 |
33 private: | 44 private: |
34 aura::test::TestWindowDelegate delegate_; | 45 aura::test::TestWindowDelegate delegate_; |
35 | 46 |
36 DISALLOW_COPY_AND_ASSIGN(SplitViewControllerTest); | 47 DISALLOW_COPY_AND_ASSIGN(SplitViewControllerTest); |
37 }; | 48 }; |
38 | 49 |
39 // Tests the basic functionalities. | 50 // Tests the basic functionalities. |
40 TEST_F(SplitViewControllerTest, Basic) { | 51 TEST_F(SplitViewControllerTest, Basic) { |
41 const gfx::Rect bounds(0, 0, 400, 400); | 52 const gfx::Rect bounds(0, 0, 400, 400); |
42 std::unique_ptr<aura::Window> window1(CreateWindow(bounds)); | 53 std::unique_ptr<aura::Window> window1(CreateWindow(bounds)); |
43 std::unique_ptr<aura::Window> window2(CreateWindow(bounds)); | 54 std::unique_ptr<aura::Window> window2(CreateWindow(bounds)); |
44 | 55 |
45 EXPECT_EQ(split_view_controller()->state(), SplitViewController::NO_SNAP); | 56 EXPECT_EQ(split_view_controller()->state(), SplitViewController::NO_SNAP); |
46 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false); | 57 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false); |
47 | 58 |
48 split_view_controller()->SnapWindow(window1.get(), SplitViewController::LEFT); | 59 split_view_controller()->SnapWindow(window1.get(), SplitViewController::LEFT); |
49 EXPECT_EQ(split_view_controller()->state(), | 60 EXPECT_EQ(split_view_controller()->state(), |
50 SplitViewController::LEFT_SNAPPED); | 61 SplitViewController::LEFT_SNAPPED); |
51 EXPECT_EQ(split_view_controller()->left_window(), window1.get()); | 62 EXPECT_EQ(split_view_controller()->left_window(), window1.get()); |
52 EXPECT_NE(split_view_controller()->left_window(), window2.get()); | 63 EXPECT_NE(split_view_controller()->left_window(), window2.get()); |
53 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true); | 64 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true); |
54 EXPECT_EQ(window1->GetBoundsInScreen(), | 65 EXPECT_EQ(window1->GetBoundsInScreen(), |
55 split_view_controller()->GetSnappedWindowBoundsInScreen( | 66 split_view_controller()->GetSnappedWindowBoundsInScreen( |
56 window1.get(), SplitViewController::LEFT_SNAPPED)); | 67 window1.get(), SplitViewController::LEFT)); |
57 | 68 |
58 split_view_controller()->SnapWindow(window2.get(), | 69 split_view_controller()->SnapWindow(window2.get(), |
59 SplitViewController::RIGHT); | 70 SplitViewController::RIGHT); |
60 EXPECT_EQ(split_view_controller()->state(), | 71 EXPECT_EQ(split_view_controller()->state(), |
61 SplitViewController::BOTH_SNAPPED); | 72 SplitViewController::BOTH_SNAPPED); |
62 EXPECT_EQ(split_view_controller()->right_window(), window2.get()); | 73 EXPECT_EQ(split_view_controller()->right_window(), window2.get()); |
63 EXPECT_NE(split_view_controller()->right_window(), window1.get()); | 74 EXPECT_NE(split_view_controller()->right_window(), window1.get()); |
64 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true); | 75 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true); |
65 EXPECT_EQ(window2->GetBoundsInScreen(), | 76 EXPECT_EQ(window2->GetBoundsInScreen(), |
66 split_view_controller()->GetSnappedWindowBoundsInScreen( | 77 split_view_controller()->GetSnappedWindowBoundsInScreen( |
67 window2.get(), SplitViewController::RIGHT_SNAPPED)); | 78 window2.get(), SplitViewController::RIGHT)); |
68 | 79 |
69 EndSplitView(); | 80 EndSplitView(); |
70 EXPECT_EQ(split_view_controller()->state(), SplitViewController::NO_SNAP); | 81 EXPECT_EQ(split_view_controller()->state(), SplitViewController::NO_SNAP); |
71 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false); | 82 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false); |
72 } | 83 } |
73 | 84 |
74 // Tests that the default snapped window is the first window that gets snapped. | 85 // Tests that the default snapped window is the first window that gets snapped. |
75 TEST_F(SplitViewControllerTest, DefaultSnappedWindow) { | 86 TEST_F(SplitViewControllerTest, DefaultSnappedWindow) { |
76 const gfx::Rect bounds(0, 0, 400, 400); | 87 const gfx::Rect bounds(0, 0, 400, 400); |
77 std::unique_ptr<aura::Window> window1(CreateWindow(bounds)); | 88 std::unique_ptr<aura::Window> window1(CreateWindow(bounds)); |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
153 EXPECT_EQ(split_view_controller()->right_window(), window2.get()); | 164 EXPECT_EQ(split_view_controller()->right_window(), window2.get()); |
154 EXPECT_EQ(split_view_controller()->state(), | 165 EXPECT_EQ(split_view_controller()->state(), |
155 SplitViewController::BOTH_SNAPPED); | 166 SplitViewController::BOTH_SNAPPED); |
156 | 167 |
157 wm::ActivateWindow(window3.get()); | 168 wm::ActivateWindow(window3.get()); |
158 EXPECT_EQ(split_view_controller()->right_window(), window3.get()); | 169 EXPECT_EQ(split_view_controller()->right_window(), window3.get()); |
159 EXPECT_EQ(split_view_controller()->state(), | 170 EXPECT_EQ(split_view_controller()->state(), |
160 SplitViewController::BOTH_SNAPPED); | 171 SplitViewController::BOTH_SNAPPED); |
161 } | 172 } |
162 | 173 |
| 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 |
163 } // namespace ash | 223 } // namespace ash |
OLD | NEW |