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

Side by Side Diff: athena/wm/split_view_controller_unittest.cc

Issue 574113004: [Athena] Fix switching activities by swiping from the right bezel (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@athena_split
Patch Set: Created 6 years, 3 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
« no previous file with comments | « athena/wm/split_view_controller.cc ('k') | athena/wm/window_list_provider_impl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "athena/wm/split_view_controller.h" 5 #include "athena/wm/split_view_controller.h"
6 6
7 #include "athena/screen/public/screen_manager.h" 7 #include "athena/screen/public/screen_manager.h"
8 #include "athena/test/athena_test_base.h" 8 #include "athena/test/athena_test_base.h"
9 #include "athena/wm/public/window_list_provider.h" 9 #include "athena/wm/public/window_list_provider.h"
10 #include "athena/wm/test/window_manager_impl_test_api.h" 10 #include "athena/wm/test/window_manager_impl_test_api.h"
11 #include "base/memory/scoped_vector.h" 11 #include "base/memory/scoped_vector.h"
12 #include "ui/aura/test/test_window_delegate.h" 12 #include "ui/aura/test/test_window_delegate.h"
13 #include "ui/aura/window.h" 13 #include "ui/aura/window.h"
14 #include "ui/gfx/display.h" 14 #include "ui/gfx/display.h"
15 #include "ui/gfx/screen.h" 15 #include "ui/gfx/screen.h"
16 #include "ui/wm/core/window_util.h"
16 17
17 namespace athena { 18 namespace athena {
18 19
19 class SplitViewControllerTest : public test::AthenaTestBase { 20 class SplitViewControllerTest : public test::AthenaTestBase {
20 public: 21 public:
21 SplitViewControllerTest() {} 22 SplitViewControllerTest() {}
22 virtual ~SplitViewControllerTest() {} 23 virtual ~SplitViewControllerTest() {}
23 24
24 // test::AthenaTestBase: 25 // test::AthenaTestBase:
25 virtual void SetUp() OVERRIDE { 26 virtual void SetUp() OVERRIDE {
26 test::AthenaTestBase::SetUp(); 27 test::AthenaTestBase::SetUp();
27 api_.reset(new test::WindowManagerImplTestApi); 28 api_.reset(new test::WindowManagerImplTestApi);
28 } 29 }
29 30
30 virtual void TearDown() OVERRIDE { 31 virtual void TearDown() OVERRIDE {
31 api_.reset(); 32 api_.reset();
32 test::AthenaTestBase::TearDown(); 33 test::AthenaTestBase::TearDown();
33 } 34 }
34 35
35 // Returns whether the split view windows are topmost. 36 // Returns the topmost window in z-order.
36 bool SplitViewWindowsTopmost() const { 37 const aura::Window* GetTopmostWindow() const {
37 SplitViewController* controller = api_->GetSplitViewController(); 38 return *api_->GetWindowListProvider()->GetWindowList().rbegin();
38 DCHECK(controller->IsSplitViewModeActive()); 39 }
40
41 // Returns the second topmost window in z-order.
42 const aura::Window* GetSecondTopmostWindow() const {
39 const aura::Window::Windows& list = 43 const aura::Window::Windows& list =
40 api_->GetWindowListProvider()->GetWindowList(); 44 api_->GetWindowListProvider()->GetWindowList();
41 aura::Window* topmost = *list.rbegin(); 45 return *(list.rbegin() + 1);
42 aura::Window* second_topmost = *(list.rbegin() + 1);
43 return (topmost == controller->left_window() ||
44 topmost == controller->right_window()) &&
45 (second_topmost == controller->left_window() ||
46 second_topmost == controller->right_window());
47 } 46 }
48 47
49 // Returns whether only the split view windows are visible. 48 // Returns whether only the split view windows are visible.
50 bool OnlySplitViewWindowsVisible() const { 49 bool OnlySplitViewWindowsVisible() const {
51 SplitViewController* controller = api_->GetSplitViewController(); 50 SplitViewController* controller = api_->GetSplitViewController();
52 DCHECK(controller->IsSplitViewModeActive()); 51 DCHECK(controller->IsSplitViewModeActive());
53 aura::Window::Windows list = 52 aura::Window::Windows list =
54 api_->GetWindowListProvider()->GetWindowList(); 53 api_->GetWindowListProvider()->GetWindowList();
55 for (aura::Window::Windows::const_iterator it = list.begin(); 54 for (aura::Window::Windows::const_iterator it = list.begin();
56 it != list.end(); ++it) { 55 it != list.end(); ++it) {
(...skipping 25 matching lines...) Expand all
82 aura::test::TestWindowDelegate delegate; 81 aura::test::TestWindowDelegate delegate;
83 ScopedVector<aura::Window> windows; 82 ScopedVector<aura::Window> windows;
84 const int kNumWindows = 6; 83 const int kNumWindows = 6;
85 for (size_t i = 0; i < kNumWindows; ++i) { 84 for (size_t i = 0; i < kNumWindows; ++i) {
86 scoped_ptr<aura::Window> window = CreateTestWindow(NULL, gfx::Rect()); 85 scoped_ptr<aura::Window> window = CreateTestWindow(NULL, gfx::Rect());
87 windows.push_back(window.release()); 86 windows.push_back(window.release());
88 windows[i]->Hide(); 87 windows[i]->Hide();
89 } 88 }
90 89
91 windows[kNumWindows - 1]->Show(); 90 windows[kNumWindows - 1]->Show();
91 wm::ActivateWindow(windows[kNumWindows - 1]);
92 92
93 SplitViewController* controller = api()->GetSplitViewController(); 93 SplitViewController* controller = api()->GetSplitViewController();
94 ASSERT_FALSE(controller->IsSplitViewModeActive()); 94 ASSERT_FALSE(controller->IsSplitViewModeActive());
95 95
96 controller->ActivateSplitMode(NULL, NULL); 96 controller->ActivateSplitMode(NULL, NULL, NULL);
97 ASSERT_TRUE(controller->IsSplitViewModeActive()); 97 ASSERT_TRUE(controller->IsSplitViewModeActive());
98 // The last two windows should be on the left and right, respectively. 98 // The last two windows should be on the left and right, respectively.
99 EXPECT_EQ(windows[kNumWindows - 1], controller->left_window()); 99 EXPECT_EQ(windows[kNumWindows - 1], controller->left_window());
100 EXPECT_EQ(windows[kNumWindows - 2], controller->right_window()); 100 EXPECT_EQ(windows[kNumWindows - 2], controller->right_window());
101 EXPECT_TRUE(SplitViewWindowsTopmost()); 101 EXPECT_EQ(windows[kNumWindows - 1], GetTopmostWindow());
102 EXPECT_EQ(windows[kNumWindows - 2], GetSecondTopmostWindow());
102 EXPECT_TRUE(OnlySplitViewWindowsVisible()); 103 EXPECT_TRUE(OnlySplitViewWindowsVisible());
103 104
104 // Select the window that is currently on the left for the right panel. The 105 // Select the window that is currently on the left for the right panel. The
105 // windows should switch. 106 // windows should switch.
106 controller->ActivateSplitMode(NULL, windows[kNumWindows - 1]); 107 controller->ActivateSplitMode(
108 NULL, windows[kNumWindows - 1], windows[kNumWindows - 1]);
107 EXPECT_EQ(windows[kNumWindows - 2], controller->left_window()); 109 EXPECT_EQ(windows[kNumWindows - 2], controller->left_window());
108 EXPECT_EQ(windows[kNumWindows - 1], controller->right_window()); 110 EXPECT_EQ(windows[kNumWindows - 1], controller->right_window());
109 EXPECT_TRUE(SplitViewWindowsTopmost()); 111 EXPECT_EQ(windows[kNumWindows - 1], GetTopmostWindow());
112 EXPECT_EQ(windows[kNumWindows - 2], GetSecondTopmostWindow());
110 EXPECT_TRUE(OnlySplitViewWindowsVisible()); 113 EXPECT_TRUE(OnlySplitViewWindowsVisible());
111 114
112 controller->ActivateSplitMode(windows[kNumWindows - 1], NULL); 115 controller->ActivateSplitMode(
116 windows[kNumWindows - 1], NULL, windows[kNumWindows - 1]);
113 EXPECT_EQ(windows[kNumWindows - 1], controller->left_window()); 117 EXPECT_EQ(windows[kNumWindows - 1], controller->left_window());
114 EXPECT_EQ(windows[kNumWindows - 2], controller->right_window()); 118 EXPECT_EQ(windows[kNumWindows - 2], controller->right_window());
115 EXPECT_TRUE(SplitViewWindowsTopmost()); 119 EXPECT_EQ(windows[kNumWindows - 1], GetTopmostWindow());
120 EXPECT_EQ(windows[kNumWindows - 2], GetSecondTopmostWindow());
121 EXPECT_TRUE(OnlySplitViewWindowsVisible());
122
123 // Select the same windows, but pass in a different window to activate.
124 controller->ActivateSplitMode(windows[kNumWindows - 1],
125 windows[kNumWindows - 2],
126 windows[kNumWindows - 2]);
127 EXPECT_EQ(windows[kNumWindows - 1], controller->left_window());
128 EXPECT_EQ(windows[kNumWindows - 2], controller->right_window());
129 EXPECT_EQ(windows[kNumWindows - 2], GetTopmostWindow());
130 EXPECT_EQ(windows[kNumWindows - 1], GetSecondTopmostWindow());
116 EXPECT_TRUE(OnlySplitViewWindowsVisible()); 131 EXPECT_TRUE(OnlySplitViewWindowsVisible());
117 132
118 // Select one of the windows behind the stacks for the right panel. The window 133 // Select one of the windows behind the stacks for the right panel. The window
119 // on the left should remain unchanged. 134 // on the left should remain unchanged.
120 controller->ActivateSplitMode(NULL, windows[0]); 135 controller->ActivateSplitMode(NULL, windows[0], windows[0]);
121 EXPECT_EQ(windows[kNumWindows - 1], controller->left_window()); 136 EXPECT_EQ(windows[kNumWindows - 1], controller->left_window());
122 EXPECT_EQ(windows[0], controller->right_window()); 137 EXPECT_EQ(windows[0], controller->right_window());
123 EXPECT_TRUE(SplitViewWindowsTopmost()); 138 EXPECT_EQ(windows[0], GetTopmostWindow());
139 EXPECT_EQ(windows[kNumWindows - 1], GetSecondTopmostWindow());
124 EXPECT_TRUE(OnlySplitViewWindowsVisible()); 140 EXPECT_TRUE(OnlySplitViewWindowsVisible());
125 141
126 controller->ActivateSplitMode(windows[1], NULL); 142 controller->ActivateSplitMode(windows[1], NULL, NULL);
127 EXPECT_EQ(windows[1], controller->left_window()); 143 EXPECT_EQ(windows[1], controller->left_window());
128 EXPECT_EQ(windows[0], controller->right_window()); 144 EXPECT_EQ(windows[0], controller->right_window());
129 EXPECT_TRUE(SplitViewWindowsTopmost()); 145 EXPECT_EQ(windows[0], GetTopmostWindow());
146 EXPECT_EQ(windows[1], GetSecondTopmostWindow());
130 EXPECT_TRUE(OnlySplitViewWindowsVisible()); 147 EXPECT_TRUE(OnlySplitViewWindowsVisible());
131 148
132 controller->ActivateSplitMode(windows[4], windows[5]); 149 controller->ActivateSplitMode(windows[4], windows[5], windows[5]);
133 EXPECT_EQ(windows[4], controller->left_window()); 150 EXPECT_EQ(windows[4], controller->left_window());
134 EXPECT_EQ(windows[5], controller->right_window()); 151 EXPECT_EQ(windows[5], controller->right_window());
135 EXPECT_TRUE(SplitViewWindowsTopmost()); 152 EXPECT_EQ(windows[5], GetTopmostWindow());
153 EXPECT_EQ(windows[4], GetSecondTopmostWindow());
136 EXPECT_TRUE(OnlySplitViewWindowsVisible()); 154 EXPECT_TRUE(OnlySplitViewWindowsVisible());
137 155
138 controller->ActivateSplitMode(windows[0], NULL); 156 controller->ActivateSplitMode(windows[0], NULL, windows[0]);
139 EXPECT_EQ(windows[0], controller->left_window()); 157 EXPECT_EQ(windows[0], controller->left_window());
140 EXPECT_EQ(windows[5], controller->right_window()); 158 EXPECT_EQ(windows[5], controller->right_window());
141 EXPECT_TRUE(SplitViewWindowsTopmost()); 159 EXPECT_EQ(windows[0], GetTopmostWindow());
160 EXPECT_EQ(windows[5], GetSecondTopmostWindow());
142 EXPECT_TRUE(OnlySplitViewWindowsVisible()); 161 EXPECT_TRUE(OnlySplitViewWindowsVisible());
143 } 162 }
144 163
145 TEST_F(SplitViewControllerTest, LandscapeOnly) { 164 TEST_F(SplitViewControllerTest, LandscapeOnly) {
146 aura::test::TestWindowDelegate delegate; 165 aura::test::TestWindowDelegate delegate;
147 ScopedVector<aura::Window> windows; 166 ScopedVector<aura::Window> windows;
148 const int kNumWindows = 2; 167 const int kNumWindows = 2;
149 for (size_t i = 0; i < kNumWindows; ++i) { 168 for (size_t i = 0; i < kNumWindows; ++i) {
150 scoped_ptr<aura::Window> window = CreateTestWindow(NULL, gfx::Rect()); 169 scoped_ptr<aura::Window> window = CreateTestWindow(NULL, gfx::Rect());
170 window->Hide();
151 windows.push_back(window.release()); 171 windows.push_back(window.release());
152 } 172 }
173 windows[kNumWindows - 1]->Show();
174 wm::ActivateWindow(windows[kNumWindows - 1]);
175
153 ASSERT_EQ(gfx::Display::ROTATE_0, 176 ASSERT_EQ(gfx::Display::ROTATE_0,
154 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay().rotation()); 177 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay().rotation());
155 178
156 SplitViewController* controller = api()->GetSplitViewController(); 179 SplitViewController* controller = api()->GetSplitViewController();
157 ASSERT_TRUE(IsSplitViewAllowed()); 180 ASSERT_TRUE(IsSplitViewAllowed());
158 ASSERT_FALSE(controller->IsSplitViewModeActive()); 181 ASSERT_FALSE(controller->IsSplitViewModeActive());
159 182
160 controller->ActivateSplitMode(NULL, NULL); 183 controller->ActivateSplitMode(NULL, NULL, NULL);
161 ASSERT_TRUE(controller->IsSplitViewModeActive()); 184 ASSERT_TRUE(controller->IsSplitViewModeActive());
162 185
163 // Screen rotation should be locked while in splitview. 186 // Screen rotation should be locked while in splitview.
164 ScreenManager::Get()->SetRotation(gfx::Display::ROTATE_90); 187 ScreenManager::Get()->SetRotation(gfx::Display::ROTATE_90);
165 EXPECT_EQ(gfx::Display::ROTATE_0, 188 EXPECT_EQ(gfx::Display::ROTATE_0,
166 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay().rotation()); 189 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay().rotation());
167 190
168 // Screen is rotated on exiting splitview. 191 // Screen is rotated on exiting splitview.
169 controller->DeactivateSplitMode(); 192 controller->DeactivateSplitMode();
170 ASSERT_EQ(gfx::Display::ROTATE_90, 193 ASSERT_EQ(gfx::Display::ROTATE_90,
171 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay().rotation()); 194 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay().rotation());
172 195
173 // Entering splitview should now be disabled now that the screen is in a 196 // Entering splitview should now be disabled now that the screen is in a
174 // portrait orientation. 197 // portrait orientation.
175 EXPECT_FALSE(IsSplitViewAllowed()); 198 EXPECT_FALSE(IsSplitViewAllowed());
176 199
177 // Rotating back to 0 allows splitview again. 200 // Rotating back to 0 allows splitview again.
178 ScreenManager::Get()->SetRotation(gfx::Display::ROTATE_0); 201 ScreenManager::Get()->SetRotation(gfx::Display::ROTATE_0);
179 EXPECT_TRUE(IsSplitViewAllowed()); 202 EXPECT_TRUE(IsSplitViewAllowed());
180 } 203 }
181 204
182 } // namespace athena 205 } // namespace athena
OLDNEW
« no previous file with comments | « athena/wm/split_view_controller.cc ('k') | athena/wm/window_list_provider_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698