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

Side by Side Diff: ui/wm/core/transient_window_stacking_client_unittest.cc

Issue 851853002: It is time. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Trying to reup because the last upload failed. Created 5 years, 11 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 | « ui/wm/core/transient_window_stacking_client.cc ('k') | ui/wm/core/user_activity_detector.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2013 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 "ui/wm/core/transient_window_stacking_client.h"
6
7 #include "base/memory/scoped_ptr.h"
8 #include "ui/aura/test/aura_test_base.h"
9 #include "ui/aura/test/test_windows.h"
10 #include "ui/compositor/test/test_layers.h"
11 #include "ui/wm/core/window_util.h"
12
13 using aura::test::ChildWindowIDsAsString;
14 using aura::test::CreateTestWindowWithId;
15 using aura::Window;
16
17 namespace wm {
18
19 class TransientWindowStackingClientTest : public aura::test::AuraTestBase {
20 public:
21 TransientWindowStackingClientTest() {}
22 virtual ~TransientWindowStackingClientTest() {}
23
24 virtual void SetUp() override {
25 AuraTestBase::SetUp();
26 client_.reset(new TransientWindowStackingClient);
27 aura::client::SetWindowStackingClient(client_.get());
28 }
29
30 virtual void TearDown() override {
31 aura::client::SetWindowStackingClient(NULL);
32 AuraTestBase::TearDown();
33 }
34
35 private:
36 scoped_ptr<TransientWindowStackingClient> client_;
37 DISALLOW_COPY_AND_ASSIGN(TransientWindowStackingClientTest);
38 };
39
40 // Tests that transient children are stacked as a unit when using stack above.
41 TEST_F(TransientWindowStackingClientTest, TransientChildrenGroupAbove) {
42 scoped_ptr<Window> parent(CreateTestWindowWithId(0, root_window()));
43 scoped_ptr<Window> w1(CreateTestWindowWithId(1, parent.get()));
44 Window* w11 = CreateTestWindowWithId(11, parent.get());
45 scoped_ptr<Window> w2(CreateTestWindowWithId(2, parent.get()));
46 Window* w21 = CreateTestWindowWithId(21, parent.get());
47 Window* w211 = CreateTestWindowWithId(211, parent.get());
48 Window* w212 = CreateTestWindowWithId(212, parent.get());
49 Window* w213 = CreateTestWindowWithId(213, parent.get());
50 Window* w22 = CreateTestWindowWithId(22, parent.get());
51 ASSERT_EQ(8u, parent->children().size());
52
53 AddTransientChild(w1.get(), w11); // w11 is now owned by w1.
54 AddTransientChild(w2.get(), w21); // w21 is now owned by w2.
55 AddTransientChild(w2.get(), w22); // w22 is now owned by w2.
56 AddTransientChild(w21, w211); // w211 is now owned by w21.
57 AddTransientChild(w21, w212); // w212 is now owned by w21.
58 AddTransientChild(w21, w213); // w213 is now owned by w21.
59 EXPECT_EQ("1 11 2 21 211 212 213 22", ChildWindowIDsAsString(parent.get()));
60
61 // Stack w1 at the top (end), this should force w11 to be last (on top of w1).
62 parent->StackChildAtTop(w1.get());
63 EXPECT_EQ(w11, parent->children().back());
64 EXPECT_EQ("2 21 211 212 213 22 1 11", ChildWindowIDsAsString(parent.get()));
65
66 // This tests that the order in children_ array rather than in
67 // transient_children_ array is used when reinserting transient children.
68 // If transient_children_ array was used '22' would be following '21'.
69 parent->StackChildAtTop(w2.get());
70 EXPECT_EQ(w22, parent->children().back());
71 EXPECT_EQ("1 11 2 21 211 212 213 22", ChildWindowIDsAsString(parent.get()));
72
73 parent->StackChildAbove(w11, w2.get());
74 EXPECT_EQ(w11, parent->children().back());
75 EXPECT_EQ("2 21 211 212 213 22 1 11", ChildWindowIDsAsString(parent.get()));
76
77 parent->StackChildAbove(w21, w1.get());
78 EXPECT_EQ(w22, parent->children().back());
79 EXPECT_EQ("1 11 2 21 211 212 213 22", ChildWindowIDsAsString(parent.get()));
80
81 parent->StackChildAbove(w21, w22);
82 EXPECT_EQ(w213, parent->children().back());
83 EXPECT_EQ("1 11 2 22 21 211 212 213", ChildWindowIDsAsString(parent.get()));
84
85 parent->StackChildAbove(w11, w21);
86 EXPECT_EQ(w11, parent->children().back());
87 EXPECT_EQ("2 22 21 211 212 213 1 11", ChildWindowIDsAsString(parent.get()));
88
89 parent->StackChildAbove(w213, w21);
90 EXPECT_EQ(w11, parent->children().back());
91 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get()));
92
93 // No change when stacking a transient parent above its transient child.
94 parent->StackChildAbove(w21, w211);
95 EXPECT_EQ(w11, parent->children().back());
96 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get()));
97
98 // This tests that the order in children_ array rather than in
99 // transient_children_ array is used when reinserting transient children.
100 // If transient_children_ array was used '22' would be following '21'.
101 parent->StackChildAbove(w2.get(), w1.get());
102 EXPECT_EQ(w212, parent->children().back());
103 EXPECT_EQ("1 11 2 22 21 213 211 212", ChildWindowIDsAsString(parent.get()));
104
105 parent->StackChildAbove(w11, w213);
106 EXPECT_EQ(w11, parent->children().back());
107 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get()));
108 }
109
110 // Tests that transient children are stacked as a unit when using stack below.
111 TEST_F(TransientWindowStackingClientTest, TransientChildrenGroupBelow) {
112 scoped_ptr<Window> parent(CreateTestWindowWithId(0, root_window()));
113 scoped_ptr<Window> w1(CreateTestWindowWithId(1, parent.get()));
114 Window* w11 = CreateTestWindowWithId(11, parent.get());
115 scoped_ptr<Window> w2(CreateTestWindowWithId(2, parent.get()));
116 Window* w21 = CreateTestWindowWithId(21, parent.get());
117 Window* w211 = CreateTestWindowWithId(211, parent.get());
118 Window* w212 = CreateTestWindowWithId(212, parent.get());
119 Window* w213 = CreateTestWindowWithId(213, parent.get());
120 Window* w22 = CreateTestWindowWithId(22, parent.get());
121 ASSERT_EQ(8u, parent->children().size());
122
123 AddTransientChild(w1.get(), w11); // w11 is now owned by w1.
124 AddTransientChild(w2.get(), w21); // w21 is now owned by w2.
125 AddTransientChild(w2.get(), w22); // w22 is now owned by w2.
126 AddTransientChild(w21, w211); // w211 is now owned by w21.
127 AddTransientChild(w21, w212); // w212 is now owned by w21.
128 AddTransientChild(w21, w213); // w213 is now owned by w21.
129 EXPECT_EQ("1 11 2 21 211 212 213 22", ChildWindowIDsAsString(parent.get()));
130
131 // Stack w2 at the bottom, this should force w11 to be last (on top of w1).
132 // This also tests that the order in children_ array rather than in
133 // transient_children_ array is used when reinserting transient children.
134 // If transient_children_ array was used '22' would be following '21'.
135 parent->StackChildAtBottom(w2.get());
136 EXPECT_EQ(w11, parent->children().back());
137 EXPECT_EQ("2 21 211 212 213 22 1 11", ChildWindowIDsAsString(parent.get()));
138
139 parent->StackChildAtBottom(w1.get());
140 EXPECT_EQ(w22, parent->children().back());
141 EXPECT_EQ("1 11 2 21 211 212 213 22", ChildWindowIDsAsString(parent.get()));
142
143 parent->StackChildBelow(w21, w1.get());
144 EXPECT_EQ(w11, parent->children().back());
145 EXPECT_EQ("2 21 211 212 213 22 1 11", ChildWindowIDsAsString(parent.get()));
146
147 parent->StackChildBelow(w11, w2.get());
148 EXPECT_EQ(w22, parent->children().back());
149 EXPECT_EQ("1 11 2 21 211 212 213 22", ChildWindowIDsAsString(parent.get()));
150
151 parent->StackChildBelow(w22, w21);
152 EXPECT_EQ(w213, parent->children().back());
153 EXPECT_EQ("1 11 2 22 21 211 212 213", ChildWindowIDsAsString(parent.get()));
154
155 parent->StackChildBelow(w21, w11);
156 EXPECT_EQ(w11, parent->children().back());
157 EXPECT_EQ("2 22 21 211 212 213 1 11", ChildWindowIDsAsString(parent.get()));
158
159 parent->StackChildBelow(w213, w211);
160 EXPECT_EQ(w11, parent->children().back());
161 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get()));
162
163 // No change when stacking a transient parent below its transient child.
164 parent->StackChildBelow(w21, w211);
165 EXPECT_EQ(w11, parent->children().back());
166 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get()));
167
168 parent->StackChildBelow(w1.get(), w2.get());
169 EXPECT_EQ(w212, parent->children().back());
170 EXPECT_EQ("1 11 2 22 21 213 211 212", ChildWindowIDsAsString(parent.get()));
171
172 parent->StackChildBelow(w213, w11);
173 EXPECT_EQ(w11, parent->children().back());
174 EXPECT_EQ("2 22 21 213 211 212 1 11", ChildWindowIDsAsString(parent.get()));
175 }
176
177 TEST_F(TransientWindowStackingClientTest,
178 StackWindowsWhoseLayersHaveNoDelegate) {
179 scoped_ptr<Window> window1(CreateTestWindowWithId(1, root_window()));
180 window1->layer()->set_name("1");
181 scoped_ptr<Window> window2(CreateTestWindowWithId(2, root_window()));
182 window2->layer()->set_name("2");
183 scoped_ptr<Window> window3(CreateTestWindowWithId(3, root_window()));
184 window3->layer()->set_name("3");
185
186 // This brings |window1| (and its layer) to the front.
187 root_window()->StackChildAbove(window1.get(), window3.get());
188 EXPECT_EQ("2 3 1", ChildWindowIDsAsString(root_window()));
189 EXPECT_EQ("2 3 1",
190 ui::test::ChildLayerNamesAsString(*root_window()->layer()));
191
192 // Since |window1| does not have a delegate, |window2| should not move in
193 // front of it, nor should its layer.
194 window1->layer()->set_delegate(NULL);
195 root_window()->StackChildAbove(window2.get(), window1.get());
196 EXPECT_EQ("3 2 1", ChildWindowIDsAsString(root_window()));
197 EXPECT_EQ("3 2 1",
198 ui::test::ChildLayerNamesAsString(*root_window()->layer()));
199
200 // It should still be possible to stack |window3| immediately below |window1|.
201 root_window()->StackChildBelow(window3.get(), window1.get());
202 EXPECT_EQ("2 3 1", ChildWindowIDsAsString(root_window()));
203 EXPECT_EQ("2 3 1",
204 ui::test::ChildLayerNamesAsString(*root_window()->layer()));
205
206 // Since neither |window3| nor |window1| have a delegate, |window2| should
207 // not move in front of either.
208 window3->layer()->set_delegate(NULL);
209 root_window()->StackChildBelow(window2.get(), window1.get());
210 EXPECT_EQ("2 3 1", ChildWindowIDsAsString(root_window()));
211 EXPECT_EQ("2 3 1",
212 ui::test::ChildLayerNamesAsString(*root_window()->layer()));
213 }
214
215 } // namespace wm
OLDNEW
« no previous file with comments | « ui/wm/core/transient_window_stacking_client.cc ('k') | ui/wm/core/user_activity_detector.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698