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 |