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

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: Rename |separator_position_| to |divider_position_| 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 void SetUp() override { test::AshTestBase::SetUp(); }
oshima 2017/06/28 17:36:36 not necessary?
xdai1 2017/06/28 18:48:16 Done.
22
23 aura::Window* CreateWindow(const gfx::Rect& bounds) {
24 aura::Window* window =
25 CreateTestWindowInShellWithDelegate(&delegate_, -1, bounds);
26 return window;
27 }
28
29 void EndSplitView() { split_view_controller()->EndSplitView(); }
30
31 SplitViewController* split_view_controller() {
32 return Shell::Get()->split_view_controller();
33 }
34
35 private:
36 aura::test::TestWindowDelegate delegate_;
37
38 DISALLOW_COPY_AND_ASSIGN(SplitViewControllerTest);
39 };
40
41 // Tests the basic functionalities.
42 TEST_F(SplitViewControllerTest, Basic) {
43 const gfx::Rect bounds(0, 0, 400, 400);
44 std::unique_ptr<aura::Window> window1(CreateWindow(bounds));
45 std::unique_ptr<aura::Window> window2(CreateWindow(bounds));
46
47 EXPECT_EQ(split_view_controller()->state(), SplitViewController::NOSNAP);
48 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false);
49
50 split_view_controller()->SetLeftWindow(window1.get());
51 EXPECT_EQ(split_view_controller()->state(),
52 SplitViewController::LEFT_SNAPPED);
53 EXPECT_EQ(split_view_controller()->left_window(), window1.get());
54 EXPECT_NE(split_view_controller()->left_window(), window2.get());
55 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true);
56 EXPECT_EQ(window1->GetBoundsInScreen(),
57 split_view_controller()->GetSnappedWindowBoundsInScreen(
58 window1.get(), SplitViewController::LEFT_SNAPPED));
59
60 split_view_controller()->SetRightWindow(window2.get());
61 EXPECT_EQ(split_view_controller()->state(),
62 SplitViewController::BOTH_SNAPPED);
63 EXPECT_EQ(split_view_controller()->right_window(), window2.get());
64 EXPECT_NE(split_view_controller()->right_window(), window1.get());
65 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true);
66 EXPECT_EQ(window2->GetBoundsInScreen(),
67 split_view_controller()->GetSnappedWindowBoundsInScreen(
68 window2.get(), SplitViewController::RIGHT_SNAPPED));
69
70 EndSplitView();
71 EXPECT_EQ(split_view_controller()->state(), SplitViewController::NOSNAP);
72 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false);
73 }
74
75 // Tests that the default snapped window is the first window that gets snapped.
76 TEST_F(SplitViewControllerTest, DefaultSnappedWindow) {
77 const gfx::Rect bounds(0, 0, 400, 400);
78 std::unique_ptr<aura::Window> window1(CreateWindow(bounds));
79 std::unique_ptr<aura::Window> window2(CreateWindow(bounds));
80
81 split_view_controller()->SetLeftWindow(window1.get());
82 split_view_controller()->SetRightWindow(window2.get());
83 EXPECT_EQ(window1.get(), split_view_controller()->GetDefaultSnappedWindow());
84
85 EndSplitView();
86 split_view_controller()->SetLeftWindow(window2.get());
87 split_view_controller()->SetRightWindow(window1.get());
88 EXPECT_EQ(window2.get(), split_view_controller()->GetDefaultSnappedWindow());
89 }
90
91 // Tests that closing one of the snapped windows exits the split view mode.
92 TEST_F(SplitViewControllerTest, EndSplitViewUponWindowClose) {
93 const gfx::Rect bounds(0, 0, 400, 400);
94 std::unique_ptr<aura::Window> window1(CreateWindow(bounds));
95 std::unique_ptr<aura::Window> window2(CreateWindow(bounds));
96
97 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false);
98 split_view_controller()->SetLeftWindow(window1.get());
99 split_view_controller()->SetRightWindow(window2.get());
100 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true);
101
102 window1.reset();
103 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false);
104 }
105
106 // Tests that if one of the snapped window gets minimized / maximized / full-
107 // screened, end the split view mode.
108 TEST_F(SplitViewControllerTest, WindowStateChangeTest) {
109 const gfx::Rect bounds(0, 0, 400, 400);
110 std::unique_ptr<aura::Window> window1(CreateWindow(bounds));
111 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false);
112
113 split_view_controller()->SetLeftWindow(window1.get());
114 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true);
115
116 wm::WMEvent minimize_event(wm::WM_EVENT_MINIMIZE);
117 wm::GetWindowState(window1.get())->OnWMEvent(&minimize_event);
118 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false);
119
120 split_view_controller()->SetLeftWindow(window1.get());
121 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true);
122
123 wm::WMEvent maximize_event(wm::WM_EVENT_MAXIMIZE);
124 wm::GetWindowState(window1.get())->OnWMEvent(&maximize_event);
125 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false);
126
127 split_view_controller()->SetLeftWindow(window1.get());
128 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true);
129
130 wm::WMEvent fullscreen_event(wm::WM_EVENT_FULLSCREEN);
131 wm::GetWindowState(window1.get())->OnWMEvent(&fullscreen_event);
132 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false);
133 }
134
135 // Tests that if split view mode is active, activate another window will snap
136 // the window to the non-default side of the screen.
137 TEST_F(SplitViewControllerTest, WindowActivationTest) {
138 const gfx::Rect bounds(0, 0, 400, 400);
139 std::unique_ptr<aura::Window> window1(CreateWindow(bounds));
140 std::unique_ptr<aura::Window> window2(CreateWindow(bounds));
141 std::unique_ptr<aura::Window> window3(CreateWindow(bounds));
142 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false);
143
144 split_view_controller()->SetLeftWindow(window1.get());
145 EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true);
146 EXPECT_EQ(split_view_controller()->left_window(), window1.get());
147 EXPECT_EQ(split_view_controller()->state(),
148 SplitViewController::LEFT_SNAPPED);
149
150 wm::ActivateWindow(window2.get());
151 EXPECT_EQ(split_view_controller()->right_window(), window2.get());
152 EXPECT_EQ(split_view_controller()->state(),
153 SplitViewController::BOTH_SNAPPED);
154
155 wm::ActivateWindow(window3.get());
156 EXPECT_EQ(split_view_controller()->right_window(), window3.get());
157 EXPECT_EQ(split_view_controller()->state(),
158 SplitViewController::BOTH_SNAPPED);
159 }
160
161 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698