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

Side by Side Diff: components/mus/ws/focus_controller_unittest.cc

Issue 1560063003: mus: Fix activation cycle direction. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: tot.merge Created 4 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "components/mus/ws/focus_controller.h" 5 #include "components/mus/ws/focus_controller.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 focus_observer.ClearAll(); 141 focus_observer.ClearAll();
142 focus_controller.RemoveObserver(&focus_observer); 142 focus_controller.RemoveObserver(&focus_observer);
143 } 143 }
144 144
145 // Tests that focus shifts correctly if the focused window is destroyed. 145 // Tests that focus shifts correctly if the focused window is destroyed.
146 TEST(FocusControllerTest, FocusShiftsOnDestroy) { 146 TEST(FocusControllerTest, FocusShiftsOnDestroy) {
147 TestServerWindowDelegate server_window_delegate; 147 TestServerWindowDelegate server_window_delegate;
148 ServerWindow parent(&server_window_delegate, WindowId()); 148 ServerWindow parent(&server_window_delegate, WindowId());
149 server_window_delegate.set_root_window(&parent); 149 server_window_delegate.set_root_window(&parent);
150 parent.SetVisible(true); 150 parent.SetVisible(true);
151 scoped_ptr<ServerWindow> child_first( 151 ServerWindow child_first(&server_window_delegate, WindowId());
152 child_first.SetVisible(true);
153 parent.Add(&child_first);
154 scoped_ptr<ServerWindow> child_second(
152 new ServerWindow(&server_window_delegate, WindowId())); 155 new ServerWindow(&server_window_delegate, WindowId()));
153 child_first->SetVisible(true); 156 child_second->SetVisible(true);
154 parent.Add(child_first.get()); 157 parent.Add(child_second.get());
155 ServerWindow child_second(&server_window_delegate, WindowId());
156 child_second.SetVisible(true);
157 parent.Add(&child_second);
158 std::vector<uint8_t> dummy; 158 std::vector<uint8_t> dummy;
159 // Allow only |parent| to be activated. 159 // Allow only |parent| to be activated.
160 parent.SetProperty(kDisallowActiveChildren, &dummy); 160 parent.SetProperty(kDisallowActiveChildren, &dummy);
161 161
162 TestFocusControllerObserver focus_observer; 162 TestFocusControllerObserver focus_observer;
163 focus_observer.set_ignore_explicit(false); 163 focus_observer.set_ignore_explicit(false);
164 FocusController focus_controller(&focus_observer, &parent); 164 FocusController focus_controller(&focus_observer, &parent);
165 focus_controller.AddObserver(&focus_observer); 165 focus_controller.AddObserver(&focus_observer);
166 166
167 focus_controller.ActivateNextWindow(); 167 focus_controller.ActivateNextWindow();
168 EXPECT_EQ(nullptr, focus_observer.old_active_window()); 168 EXPECT_EQ(nullptr, focus_observer.old_active_window());
169 EXPECT_EQ(&parent, focus_observer.new_active_window()); 169 EXPECT_EQ(&parent, focus_observer.new_active_window());
170 EXPECT_EQ(nullptr, focus_observer.old_focused_window()); 170 EXPECT_EQ(nullptr, focus_observer.old_focused_window());
171 EXPECT_EQ(child_first.get(), focus_observer.new_focused_window()); 171 EXPECT_EQ(child_second.get(), focus_observer.new_focused_window());
172 focus_observer.ClearAll(); 172 focus_observer.ClearAll();
173 173
174 // Destroying |child_first| should move focus to |child_second|. 174 // Destroying |child_second| should move focus to |child_first|.
175 child_first.reset(); 175 child_second.reset();
176 EXPECT_NE(nullptr, focus_observer.old_focused_window()); 176 EXPECT_NE(nullptr, focus_observer.old_focused_window());
177 EXPECT_EQ(&child_second, focus_observer.new_focused_window()); 177 EXPECT_EQ(&child_first, focus_observer.new_focused_window());
178 178
179 focus_controller.RemoveObserver(&focus_observer); 179 focus_controller.RemoveObserver(&focus_observer);
180 } 180 }
181 181
182 TEST(FocusControllerTest, ActivationSkipsOverHiddenWindow) { 182 TEST(FocusControllerTest, ActivationSkipsOverHiddenWindow) {
183 TestServerWindowDelegate server_window_delegate; 183 TestServerWindowDelegate server_window_delegate;
184 ServerWindow parent(&server_window_delegate, WindowId()); 184 ServerWindow parent(&server_window_delegate, WindowId());
185 server_window_delegate.set_root_window(&parent); 185 server_window_delegate.set_root_window(&parent);
186 parent.SetVisible(true); 186 parent.SetVisible(true);
187 187
188 ServerWindow child_first(&server_window_delegate, WindowId()); 188 ServerWindow child_first(&server_window_delegate, WindowId());
189 ServerWindow child_second(&server_window_delegate, WindowId()); 189 ServerWindow child_second(&server_window_delegate, WindowId());
190 ServerWindow child_third(&server_window_delegate, WindowId()); 190 ServerWindow child_third(&server_window_delegate, WindowId());
191 191
192 parent.Add(&child_first); 192 parent.Add(&child_first);
193 parent.Add(&child_second); 193 parent.Add(&child_second);
194 parent.Add(&child_third); 194 parent.Add(&child_third);
195 195
196 child_first.SetVisible(true); 196 child_first.SetVisible(true);
197 child_second.SetVisible(false); 197 child_second.SetVisible(false);
198 child_third.SetVisible(true); 198 child_third.SetVisible(true);
199 199
200 TestFocusControllerObserver focus_observer; 200 TestFocusControllerObserver focus_observer;
201 focus_observer.set_ignore_explicit(false); 201 focus_observer.set_ignore_explicit(false);
202 FocusController focus_controller(&focus_observer, &parent); 202 FocusController focus_controller(&focus_observer, &parent);
203 focus_controller.AddObserver(&focus_observer); 203 focus_controller.AddObserver(&focus_observer);
204 204
205 // Since |child_second| is invisible, activation should cycle from 205 // Since |child_second| is invisible, activation should cycle from
206 // |child_first|, to |child_third|, to |parent|, back to |child_first|. 206 // |child_third|, to |child_first|, to |parent|, back to |child_third|.
207 focus_controller.ActivateNextWindow(); 207 focus_controller.ActivateNextWindow();
208 EXPECT_EQ(nullptr, focus_observer.old_active_window()); 208 EXPECT_EQ(nullptr, focus_observer.old_active_window());
209 EXPECT_EQ(&child_third, focus_observer.new_active_window());
210 focus_observer.ClearAll();
211
212 focus_controller.ActivateNextWindow();
213 EXPECT_EQ(&child_third, focus_observer.old_active_window());
209 EXPECT_EQ(&child_first, focus_observer.new_active_window()); 214 EXPECT_EQ(&child_first, focus_observer.new_active_window());
210 focus_observer.ClearAll(); 215 focus_observer.ClearAll();
211 216
212 focus_controller.ActivateNextWindow(); 217 focus_controller.ActivateNextWindow();
213 EXPECT_EQ(&child_first, focus_observer.old_active_window()); 218 EXPECT_EQ(&child_first, focus_observer.old_active_window());
214 EXPECT_EQ(&child_third, focus_observer.new_active_window());
215 focus_observer.ClearAll();
216
217 focus_controller.ActivateNextWindow();
218 EXPECT_EQ(&child_third, focus_observer.old_active_window());
219 EXPECT_EQ(&parent, focus_observer.new_active_window()); 219 EXPECT_EQ(&parent, focus_observer.new_active_window());
220 focus_observer.ClearAll(); 220 focus_observer.ClearAll();
221 221
222 focus_controller.ActivateNextWindow(); 222 focus_controller.ActivateNextWindow();
223 EXPECT_EQ(&parent, focus_observer.old_active_window()); 223 EXPECT_EQ(&parent, focus_observer.old_active_window());
224 EXPECT_EQ(&child_first, focus_observer.new_active_window()); 224 EXPECT_EQ(&child_third, focus_observer.new_active_window());
225 focus_observer.ClearAll(); 225 focus_observer.ClearAll();
226 226
227 // Once |child_second| is made visible, activation should go from 227 // Once |child_second| is made visible, activation should go from
228 // |child_first| to |child_second|. 228 // |child_third| to |child_second|.
229 child_second.SetVisible(true); 229 child_second.SetVisible(true);
230 focus_controller.ActivateNextWindow(); 230 focus_controller.ActivateNextWindow();
231 EXPECT_EQ(&child_first, focus_observer.old_active_window()); 231 EXPECT_EQ(&child_third, focus_observer.old_active_window());
232 EXPECT_EQ(&child_second, focus_observer.new_active_window()); 232 EXPECT_EQ(&child_second, focus_observer.new_active_window());
233 } 233 }
234 234
235 } // namespace ws 235 } // namespace ws
236 } // namespace mus 236 } // namespace mus
OLDNEW
« no previous file with comments | « components/mus/ws/focus_controller.cc ('k') | components/mus/ws/window_manager_client_apptest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698