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

Side by Side Diff: ash/wm/pinned_controller_unittest.cc

Issue 2072853002: Implement "pinned" mode in ash. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix linux build breakage Created 4 years, 6 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 2014 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/pinned_controller.h"
6
7 #include <vector>
8
9 #include "ash/aura/wm_window_aura.h"
10 #include "ash/common/wm/window_state.h"
11 #include "ash/common/wm/wm_event.h"
12 #include "ash/common/wm_shell.h"
13 #include "ash/common/wm_window.h"
14 #include "ash/test/ash_test_base.h"
15 #include "ash/wm/window_util.h"
16 #include "ui/aura/window.h"
17
18 namespace ash {
19 namespace test {
20 namespace {
21
22 int FindIndex(const std::vector<aura::Window*> windows,
23 const aura::Window* target) {
oshima 2016/06/17 10:56:51 you can get index using auto iter = std::find(...
hidehiko 2016/06/17 17:19:22 Done.
24 for (size_t i = 0; i < windows.size(); ++i) {
25 if (target == windows[i])
26 return static_cast<int>(i);
27 }
28 return -1;
29 }
30
31 } // namespace
32
33 class PinnedControllerTest : public test::AshTestBase {
34 public:
35 PinnedControllerTest() = default;
36 ~PinnedControllerTest() override = default;
37 };
38
39 TEST_F(PinnedControllerTest, IsPinned) {
40 aura::Window* w1 = CreateTestWindowInShellWithId(0);
41 wm::ActivateWindow(w1);
42
43 wm::PinWindow(w1);
44 EXPECT_TRUE(WmShell::Get()->IsPinned());
45 }
46
47 TEST_F(PinnedControllerTest, OnlyOnePinnedWindow) {
48 aura::Window* w1 = CreateTestWindowInShellWithId(0);
49 aura::Window* w2 = CreateTestWindowInShellWithId(1);
50 wm::ActivateWindow(w1);
51
52 wm::PinWindow(w1);
53 EXPECT_TRUE(WmWindowAura::Get(w1)->GetWindowState()->IsPinned());
54 EXPECT_FALSE(WmWindowAura::Get(w2)->GetWindowState()->IsPinned());
55
56 // Prohibit to pin two (or more) windows.
57 wm::PinWindow(w2);
58 EXPECT_TRUE(WmWindowAura::Get(w1)->GetWindowState()->IsPinned());
59 EXPECT_FALSE(WmWindowAura::Get(w2)->GetWindowState()->IsPinned());
60 }
61
62 TEST_F(PinnedControllerTest, FullscreenInPinnedMode) {
63 aura::Window* w1 = CreateTestWindowInShellWithId(0);
64 aura::Window* w2 = CreateTestWindowInShellWithId(1);
65 wm::ActivateWindow(w1);
66
67 wm::PinWindow(w1);
68 {
69 // Window w1 should be in front of w2.
70 std::vector<aura::Window*> siblings = w1->parent()->children();
71 int index1 = FindIndex(siblings, w1);
72 int index2 = FindIndex(siblings, w2);
73 EXPECT_NE(index1, -1);
74 EXPECT_NE(index2, -1);
75 EXPECT_GT(index1, index2);
76 }
77
78 // Set w2 to fullscreen.
79 {
80 wm::ActivateWindow(w2);
81 const wm::WMEvent event(wm::WM_EVENT_TOGGLE_FULLSCREEN);
82 WmWindowAura::Get(w2)->GetWindowState()->OnWMEvent(&event);
83 }
84 {
85 // Verify that w1 is still in front of w2.
86 std::vector<aura::Window*> siblings = w1->parent()->children();
87 int index1 = FindIndex(siblings, w1);
88 int index2 = FindIndex(siblings, w2);
89 EXPECT_NE(index1, -1);
90 EXPECT_NE(index2, -1);
91 EXPECT_GT(index1, index2);
92 }
93
94 // Unset w2's fullscreen.
95 {
96 wm::ActivateWindow(w2);
97 const wm::WMEvent event(wm::WM_EVENT_TOGGLE_FULLSCREEN);
98 WmWindowAura::Get(w2)->GetWindowState()->OnWMEvent(&event);
99 }
100 {
101 // Verify that w1 is still in front of w2.
102 std::vector<aura::Window*> siblings = w1->parent()->children();
103 int index1 = FindIndex(siblings, w1);
104 int index2 = FindIndex(siblings, w2);
105 EXPECT_NE(index1, -1);
106 EXPECT_NE(index2, -1);
107 EXPECT_GT(index1, index2);
108 }
109
110 // Maximize w2.
111 {
112 wm::ActivateWindow(w2);
113 const wm::WMEvent event(wm::WM_EVENT_TOGGLE_MAXIMIZE);
114 WmWindowAura::Get(w2)->GetWindowState()->OnWMEvent(&event);
115 }
116 {
117 // Verify that w1 is still in front of w2.
118 std::vector<aura::Window*> siblings = w1->parent()->children();
119 int index1 = FindIndex(siblings, w1);
120 int index2 = FindIndex(siblings, w2);
121 EXPECT_NE(index1, -1);
122 EXPECT_NE(index2, -1);
123 EXPECT_GT(index1, index2);
124 }
125
126 // Unset w2's maximize.
127 {
128 wm::ActivateWindow(w2);
129 const wm::WMEvent event(wm::WM_EVENT_TOGGLE_MAXIMIZE);
130 WmWindowAura::Get(w2)->GetWindowState()->OnWMEvent(&event);
131 }
132 {
133 // Verify that w1 is still in front of w2.
134 std::vector<aura::Window*> siblings = w1->parent()->children();
135 int index1 = FindIndex(siblings, w1);
136 int index2 = FindIndex(siblings, w2);
137 EXPECT_NE(index1, -1);
138 EXPECT_NE(index2, -1);
139 EXPECT_GT(index1, index2);
140 }
141
142 // Restore w1.
143 WmWindowAura::Get(w1)->GetWindowState()->Restore();
144
145 // Now, fullscreen-ize w2 should put it in front of w1.
146 {
147 wm::ActivateWindow(w2);
148 const wm::WMEvent event(wm::WM_EVENT_TOGGLE_FULLSCREEN);
149 WmWindowAura::Get(w2)->GetWindowState()->OnWMEvent(&event);
150 }
151 {
152 // Verify that w1 is still in front of w2.
153 std::vector<aura::Window*> siblings = w1->parent()->children();
154 int index1 = FindIndex(siblings, w1);
155 int index2 = FindIndex(siblings, w2);
156 EXPECT_NE(index1, -1);
157 EXPECT_NE(index2, -1);
158 EXPECT_GT(index2, index1);
159 }
160 }
161
162 } // namespace test
163 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698