Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(466)

Side by Side Diff: ash/wm/splitview/split_view_controller_unittest.cc

Issue 2960843004: CrOS Tablet Window management - Split Screen part I (Closed)
Patch Set: nit. Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "ash/wm/splitview/split_view_controller.h"
6
7 #include "ash/shell.h"
8 #include "ash/test/ash_test_base.h"
9 #include "ash/wm/window_state.h"
10 #include "ash/wm/window_util.h"
11 #include "ash/wm/wm_event.h"
12 #include "ui/aura/test/test_window_delegate.h"
13
14 namespace ash {
15
16 class SplitViewControllerTest : public test::AshTestBase {
17 public:
18 SplitViewControllerTest() {}
19 ~SplitViewControllerTest() override {}
20
21 aura::Window* CreateWindow(const gfx::Rect& bounds) {
22 aura::Window* window =
23 CreateTestWindowInShellWithDelegate(&delegate_, -1, bounds);
24 return window;
25 }
26
27 void EndSplitView() { split_view_controller()->EndSplitView(); }
28
29 SplitViewController* split_view_controller() {
30 return Shell::Get()->split_view_controller();
31 }
32
33 private:
34 aura::test::TestWindowDelegate delegate_;
35
36 DISALLOW_COPY_AND_ASSIGN(SplitViewControllerTest);
37 };
38
39 // Tests the basic functionalities.
40 TEST_F(SplitViewControllerTest, Basic) {
41 const gfx::Rect bounds(0, 0, 400, 400);
42 std::unique_ptr<aura::Window> window1(CreateWindow(bounds));
43 std::unique_ptr<aura::Window> window2(CreateWindow(bounds));
44
45 EXPECT_EQ(split_view_controller()->state(), SplitViewController::NOSNAP);
46 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false);
47
48 split_view_controller()->SetLeftWindow(window1.get());
49 EXPECT_EQ(split_view_controller()->state(),
50 SplitViewController::LEFT_SNAPPED);
51 EXPECT_EQ(split_view_controller()->left_window(), window1.get());
52 EXPECT_NE(split_view_controller()->left_window(), window2.get());
53 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true);
54 EXPECT_EQ(window1->GetBoundsInScreen(),
55 split_view_controller()->GetSnappedWindowBoundsInScreen(
56 window1.get(), SplitViewController::LEFT_SNAPPED));
57
58 split_view_controller()->SetRightWindow(window2.get());
59 EXPECT_EQ(split_view_controller()->state(),
60 SplitViewController::BOTH_SNAPPED);
61 EXPECT_EQ(split_view_controller()->right_window(), window2.get());
62 EXPECT_NE(split_view_controller()->right_window(), window1.get());
63 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true);
64 EXPECT_EQ(window2->GetBoundsInScreen(),
65 split_view_controller()->GetSnappedWindowBoundsInScreen(
66 window2.get(), SplitViewController::RIGHT_SNAPPED));
67
68 EndSplitView();
69 EXPECT_EQ(split_view_controller()->state(), SplitViewController::NOSNAP);
70 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false);
71 }
72
73 // Tests that the default snapped window is the first window that gets snapped.
74 TEST_F(SplitViewControllerTest, DefaultSnappedWindow) {
75 const gfx::Rect bounds(0, 0, 400, 400);
76 std::unique_ptr<aura::Window> window1(CreateWindow(bounds));
77 std::unique_ptr<aura::Window> window2(CreateWindow(bounds));
78
79 split_view_controller()->SetLeftWindow(window1.get());
80 split_view_controller()->SetRightWindow(window2.get());
81 EXPECT_EQ(window1.get(), split_view_controller()->GetDefaultSnappedWindow());
82
83 EndSplitView();
84 split_view_controller()->SetLeftWindow(window2.get());
85 split_view_controller()->SetRightWindow(window1.get());
86 EXPECT_EQ(window2.get(), split_view_controller()->GetDefaultSnappedWindow());
87 }
88
89 // Tests that closing one of the snapped windows exits the split view mode.
90 TEST_F(SplitViewControllerTest, EndSplitViewUponWindowClose) {
91 const gfx::Rect bounds(0, 0, 400, 400);
92 std::unique_ptr<aura::Window> window1(CreateWindow(bounds));
93 std::unique_ptr<aura::Window> window2(CreateWindow(bounds));
94
95 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false);
96 split_view_controller()->SetLeftWindow(window1.get());
97 split_view_controller()->SetRightWindow(window2.get());
98 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true);
99
100 window1.reset();
101 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false);
102 }
103
104 // Tests that if one of the snapped window gets minimized / maximized / full-
105 // screened, end the split view mode.
varkha 2017/06/30 14:29:35 nit: end the split view mode. -> the split view mo
xdai1 2017/07/05 20:18:23 Done.
106 TEST_F(SplitViewControllerTest, WindowStateChangeTest) {
107 const gfx::Rect bounds(0, 0, 400, 400);
108 std::unique_ptr<aura::Window> window1(CreateWindow(bounds));
109 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false);
110
111 split_view_controller()->SetLeftWindow(window1.get());
112 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true);
113
114 wm::WMEvent minimize_event(wm::WM_EVENT_MINIMIZE);
115 wm::GetWindowState(window1.get())->OnWMEvent(&minimize_event);
116 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false);
117
118 split_view_controller()->SetLeftWindow(window1.get());
119 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true);
120
121 wm::WMEvent maximize_event(wm::WM_EVENT_MAXIMIZE);
122 wm::GetWindowState(window1.get())->OnWMEvent(&maximize_event);
123 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false);
124
125 split_view_controller()->SetLeftWindow(window1.get());
126 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true);
127
128 wm::WMEvent fullscreen_event(wm::WM_EVENT_FULLSCREEN);
129 wm::GetWindowState(window1.get())->OnWMEvent(&fullscreen_event);
130 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false);
131 }
132
133 // Tests that if split view mode is active, activate another window will snap
134 // the window to the non-default side of the screen.
135 TEST_F(SplitViewControllerTest, WindowActivationTest) {
136 const gfx::Rect bounds(0, 0, 400, 400);
137 std::unique_ptr<aura::Window> window1(CreateWindow(bounds));
138 std::unique_ptr<aura::Window> window2(CreateWindow(bounds));
139 std::unique_ptr<aura::Window> window3(CreateWindow(bounds));
140 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false);
141
142 split_view_controller()->SetLeftWindow(window1.get());
143 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true);
144 EXPECT_EQ(split_view_controller()->left_window(), window1.get());
145 EXPECT_EQ(split_view_controller()->state(),
146 SplitViewController::LEFT_SNAPPED);
147
148 wm::ActivateWindow(window2.get());
149 EXPECT_EQ(split_view_controller()->right_window(), window2.get());
150 EXPECT_EQ(split_view_controller()->state(),
151 SplitViewController::BOTH_SNAPPED);
152
153 wm::ActivateWindow(window3.get());
154 EXPECT_EQ(split_view_controller()->right_window(), window3.get());
155 EXPECT_EQ(split_view_controller()->state(),
156 SplitViewController::BOTH_SNAPPED);
157 }
158
159 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698