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

Side by Side Diff: ui/views/focus/focus_manager_unittest.cc

Issue 9402018: Experimental Extension Keybinding (first cut). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 10 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "base/utf_string_conversions.h" 5 #include "base/utf_string_conversions.h"
6 #include "ui/base/accelerators/accelerator.h" 6 #include "ui/base/accelerators/accelerator.h"
7 #include "ui/base/keycodes/keyboard_codes.h" 7 #include "ui/base/keycodes/keyboard_codes.h"
8 #include "ui/views/controls/button/text_button.h" 8 #include "ui/views/controls/button/text_button.h"
9 #include "ui/views/controls/textfield/textfield.h" 9 #include "ui/views/controls/textfield/textfield.h"
10 #include "ui/views/focus/accelerator_handler.h" 10 #include "ui/views/focus/accelerator_handler.h"
11 #include "ui/views/focus/focus_manager_factory.h" 11 #include "ui/views/focus/focus_manager_factory.h"
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 204
205 int accelerator_count() const { return accelerator_count_; } 205 int accelerator_count() const { return accelerator_count_; }
206 206
207 void set_can_handle_accelerators(bool can_handle_accelerators) { 207 void set_can_handle_accelerators(bool can_handle_accelerators) {
208 can_handle_accelerators_ = can_handle_accelerators; 208 can_handle_accelerators_ = can_handle_accelerators;
209 } 209 }
210 210
211 private: 211 private:
212 int accelerator_count_; // number of times that the accelerator is activated 212 int accelerator_count_; // number of times that the accelerator is activated
213 bool process_accelerator_; // return value of AcceleratorPressed 213 bool process_accelerator_; // return value of AcceleratorPressed
214 bool can_handle_accelerators_; // return value of CanHandleAccelerators 214 bool can_handle_accelerators_; // return value of CanHandleAccelerators
215 215
216 DISALLOW_COPY_AND_ASSIGN(TestAcceleratorTarget); 216 DISALLOW_COPY_AND_ASSIGN(TestAcceleratorTarget);
217 }; 217 };
218 218
219 TEST_F(FocusManagerTest, CallsNormalAcceleratorTarget) { 219 TEST_F(FocusManagerTest, CallsNormalAcceleratorTarget) {
220 FocusManager* focus_manager = GetFocusManager(); 220 FocusManager* focus_manager = GetFocusManager();
221 ui::Accelerator return_accelerator(ui::VKEY_RETURN, false, false, false); 221 ui::Accelerator return_accelerator(ui::VKEY_RETURN, false, false, false);
222 ui::Accelerator escape_accelerator(ui::VKEY_ESCAPE, false, false, false); 222 ui::Accelerator escape_accelerator(ui::VKEY_ESCAPE, false, false, false);
223 223
224 TestAcceleratorTarget return_target(true); 224 TestAcceleratorTarget return_target(true);
225 TestAcceleratorTarget escape_target(true); 225 TestAcceleratorTarget escape_target(true);
226 EXPECT_EQ(return_target.accelerator_count(), 0); 226 EXPECT_EQ(return_target.accelerator_count(), 0);
227 EXPECT_EQ(escape_target.accelerator_count(), 0); 227 EXPECT_EQ(escape_target.accelerator_count(), 0);
228 EXPECT_EQ(NULL, 228 EXPECT_EQ(NULL,
229 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); 229 focus_manager->GetCurrentTargetForAccelerator(return_accelerator));
230 EXPECT_EQ(NULL, 230 EXPECT_EQ(NULL,
231 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator)); 231 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator));
232 232
233 // Register targets. 233 // Register targets.
234 focus_manager->RegisterAccelerator(return_accelerator, &return_target); 234 focus_manager->RegisterAccelerator(return_accelerator, false, &return_target);
235 focus_manager->RegisterAccelerator(escape_accelerator, &escape_target); 235 focus_manager->RegisterAccelerator(escape_accelerator, false, &escape_target);
236 236
237 // Checks if the correct target is registered. 237 // Checks if the correct target is registered.
238 EXPECT_EQ(&return_target, 238 EXPECT_EQ(&return_target,
239 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); 239 focus_manager->GetCurrentTargetForAccelerator(return_accelerator));
240 EXPECT_EQ(&escape_target, 240 EXPECT_EQ(&escape_target,
241 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator)); 241 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator));
242 242
243 // Hitting the return key. 243 // Hitting the return key.
244 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); 244 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator));
245 EXPECT_EQ(return_target.accelerator_count(), 1); 245 EXPECT_EQ(return_target.accelerator_count(), 1);
246 EXPECT_EQ(escape_target.accelerator_count(), 0); 246 EXPECT_EQ(escape_target.accelerator_count(), 0);
247 247
248 // Hitting the escape key. 248 // Hitting the escape key.
249 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator)); 249 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator));
250 EXPECT_EQ(return_target.accelerator_count(), 1); 250 EXPECT_EQ(return_target.accelerator_count(), 1);
251 EXPECT_EQ(escape_target.accelerator_count(), 1); 251 EXPECT_EQ(escape_target.accelerator_count(), 1);
252 252
253 // Register another target for the return key. 253 // Register another target for the return key.
254 TestAcceleratorTarget return_target2(true); 254 TestAcceleratorTarget return_target2(true);
255 EXPECT_EQ(return_target2.accelerator_count(), 0); 255 EXPECT_EQ(return_target2.accelerator_count(), 0);
256 focus_manager->RegisterAccelerator(return_accelerator, &return_target2); 256 focus_manager->RegisterAccelerator(
257 return_accelerator, false, &return_target2);
257 EXPECT_EQ(&return_target2, 258 EXPECT_EQ(&return_target2,
258 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); 259 focus_manager->GetCurrentTargetForAccelerator(return_accelerator));
259 260
260 // Hitting the return key; return_target2 has the priority. 261 // Hitting the return key; return_target2 has the priority.
261 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); 262 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator));
262 EXPECT_EQ(return_target.accelerator_count(), 1); 263 EXPECT_EQ(return_target.accelerator_count(), 1);
263 EXPECT_EQ(return_target2.accelerator_count(), 1); 264 EXPECT_EQ(return_target2.accelerator_count(), 1);
264 265
265 // Register a target that does not process the accelerator event. 266 // Register a target that does not process the accelerator event.
266 TestAcceleratorTarget return_target3(false); 267 TestAcceleratorTarget return_target3(false);
267 EXPECT_EQ(return_target3.accelerator_count(), 0); 268 EXPECT_EQ(return_target3.accelerator_count(), 0);
268 focus_manager->RegisterAccelerator(return_accelerator, &return_target3); 269 focus_manager->RegisterAccelerator(
270 return_accelerator, false, &return_target3);
269 EXPECT_EQ(&return_target3, 271 EXPECT_EQ(&return_target3,
270 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); 272 focus_manager->GetCurrentTargetForAccelerator(return_accelerator));
271 273
272 // Hitting the return key. 274 // Hitting the return key.
273 // Since the event handler of return_target3 returns false, return_target2 275 // Since the event handler of return_target3 returns false, return_target2
274 // should be called too. 276 // should be called too.
275 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); 277 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator));
276 EXPECT_EQ(return_target.accelerator_count(), 1); 278 EXPECT_EQ(return_target.accelerator_count(), 1);
277 EXPECT_EQ(return_target2.accelerator_count(), 2); 279 EXPECT_EQ(return_target2.accelerator_count(), 2);
278 EXPECT_EQ(return_target3.accelerator_count(), 1); 280 EXPECT_EQ(return_target3.accelerator_count(), 1);
(...skipping 22 matching lines...) Expand all
301 303
302 // Hitting the return key and the escape key. Nothing should happen. 304 // Hitting the return key and the escape key. Nothing should happen.
303 EXPECT_FALSE(focus_manager->ProcessAccelerator(return_accelerator)); 305 EXPECT_FALSE(focus_manager->ProcessAccelerator(return_accelerator));
304 EXPECT_EQ(return_target.accelerator_count(), 2); 306 EXPECT_EQ(return_target.accelerator_count(), 2);
305 EXPECT_EQ(return_target2.accelerator_count(), 2); 307 EXPECT_EQ(return_target2.accelerator_count(), 2);
306 EXPECT_EQ(return_target3.accelerator_count(), 2); 308 EXPECT_EQ(return_target3.accelerator_count(), 2);
307 EXPECT_FALSE(focus_manager->ProcessAccelerator(escape_accelerator)); 309 EXPECT_FALSE(focus_manager->ProcessAccelerator(escape_accelerator));
308 EXPECT_EQ(escape_target.accelerator_count(), 1); 310 EXPECT_EQ(escape_target.accelerator_count(), 1);
309 } 311 }
310 312
313 TEST_F(FocusManagerTest, HighPriorityHandlers) {
314 FocusManager* focus_manager = GetFocusManager();
315 ui::Accelerator escape_accelerator(ui::VKEY_ESCAPE, false, false, false);
316
317 TestAcceleratorTarget escape_target_high(true);
318 TestAcceleratorTarget escape_target_normal(true);
319 EXPECT_EQ(escape_target_high.accelerator_count(), 0);
320 EXPECT_EQ(escape_target_normal.accelerator_count(), 0);
321 EXPECT_EQ(NULL,
322 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator));
323 EXPECT_FALSE(focus_manager->HasPriorityHandler(escape_accelerator));
324
325 // Register high priority target.
326 focus_manager->RegisterAccelerator(
327 escape_accelerator, true, &escape_target_high);
328 EXPECT_EQ(&escape_target_high,
329 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator));
330 EXPECT_TRUE(focus_manager->HasPriorityHandler(escape_accelerator));
331
332 // Hit the escape key.
333 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator));
334 EXPECT_EQ(escape_target_high.accelerator_count(), 1);
335 EXPECT_EQ(escape_target_normal.accelerator_count(), 0);
336
337 // Add a normal priority target and make sure it doesn't see the key.
338 focus_manager->RegisterAccelerator(
339 escape_accelerator, false, &escape_target_normal);
340
341 // Checks if the correct target is registered (same as before, the high
342 // priority one).
343 EXPECT_EQ(&escape_target_high,
344 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator));
345 EXPECT_TRUE(focus_manager->HasPriorityHandler(escape_accelerator));
346
347 // Hit the escape key.
348 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator));
349 EXPECT_EQ(escape_target_high.accelerator_count(), 2);
350 EXPECT_EQ(escape_target_normal.accelerator_count(), 0);
351
352 // Unregister the high priority accelerator.
353 focus_manager->UnregisterAccelerator(escape_accelerator, &escape_target_high);
354 EXPECT_EQ(&escape_target_normal,
355 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator));
356 EXPECT_FALSE(focus_manager->HasPriorityHandler(escape_accelerator));
357
358 // Hit the escape key.
359 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator));
360 EXPECT_EQ(escape_target_high.accelerator_count(), 2);
361 EXPECT_EQ(escape_target_normal.accelerator_count(), 1);
362
363 // Add the high priority target back and make sure it starts seeing the key.
364 focus_manager->RegisterAccelerator(
365 escape_accelerator, true, &escape_target_high);
366 EXPECT_EQ(&escape_target_high,
367 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator));
368 EXPECT_TRUE(focus_manager->HasPriorityHandler(escape_accelerator));
369
370 // Hit the escape key.
371 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator));
372 EXPECT_EQ(escape_target_high.accelerator_count(), 3);
373 EXPECT_EQ(escape_target_normal.accelerator_count(), 1);
374
375 // Unregister the normal priority accelerator.
376 focus_manager->UnregisterAccelerator(
377 escape_accelerator, &escape_target_normal);
378 EXPECT_EQ(&escape_target_high,
379 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator));
380 EXPECT_TRUE(focus_manager->HasPriorityHandler(escape_accelerator));
381
382 // Hit the escape key.
383 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator));
384 EXPECT_EQ(escape_target_high.accelerator_count(), 4);
385 EXPECT_EQ(escape_target_normal.accelerator_count(), 1);
386
387 // Unregister the high priority accelerator.
388 focus_manager->UnregisterAccelerator(escape_accelerator, &escape_target_high);
389 EXPECT_EQ(NULL,
390 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator));
391 EXPECT_FALSE(focus_manager->HasPriorityHandler(escape_accelerator));
392
393 // Hit the escape key (no change, no targets registered).
394 EXPECT_FALSE(focus_manager->ProcessAccelerator(escape_accelerator));
395 EXPECT_EQ(escape_target_high.accelerator_count(), 4);
396 EXPECT_EQ(escape_target_normal.accelerator_count(), 1);
397 }
398
311 TEST_F(FocusManagerTest, CallsEnabledAcceleratorTargetsOnly) { 399 TEST_F(FocusManagerTest, CallsEnabledAcceleratorTargetsOnly) {
312 FocusManager* focus_manager = GetFocusManager(); 400 FocusManager* focus_manager = GetFocusManager();
313 ui::Accelerator return_accelerator(ui::VKEY_RETURN, false, false, false); 401 ui::Accelerator return_accelerator(ui::VKEY_RETURN, false, false, false);
314 402
315 TestAcceleratorTarget return_target1(true); 403 TestAcceleratorTarget return_target1(true);
316 TestAcceleratorTarget return_target2(true); 404 TestAcceleratorTarget return_target2(true);
317 405
318 focus_manager->RegisterAccelerator(return_accelerator, &return_target1); 406 focus_manager->RegisterAccelerator(
319 focus_manager->RegisterAccelerator(return_accelerator, &return_target2); 407 return_accelerator, false, &return_target1);
408 focus_manager->RegisterAccelerator(
409 return_accelerator, false, &return_target2);
320 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); 410 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator));
321 EXPECT_EQ(0, return_target1.accelerator_count()); 411 EXPECT_EQ(0, return_target1.accelerator_count());
322 EXPECT_EQ(1, return_target2.accelerator_count()); 412 EXPECT_EQ(1, return_target2.accelerator_count());
323 413
324 // If CanHandleAccelerators() return false, FocusManager shouldn't call 414 // If CanHandleAccelerators() return false, FocusManager shouldn't call
325 // AcceleratorPressed(). 415 // AcceleratorPressed().
326 return_target2.set_can_handle_accelerators(false); 416 return_target2.set_can_handle_accelerators(false);
327 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); 417 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator));
328 EXPECT_EQ(1, return_target1.accelerator_count()); 418 EXPECT_EQ(1, return_target1.accelerator_count());
329 EXPECT_EQ(1, return_target2.accelerator_count()); 419 EXPECT_EQ(1, return_target2.accelerator_count());
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 464
375 TEST_F(FocusManagerTest, CallsSelfDeletingAcceleratorTarget) { 465 TEST_F(FocusManagerTest, CallsSelfDeletingAcceleratorTarget) {
376 FocusManager* focus_manager = GetFocusManager(); 466 FocusManager* focus_manager = GetFocusManager();
377 ui::Accelerator return_accelerator(ui::VKEY_RETURN, false, false, false); 467 ui::Accelerator return_accelerator(ui::VKEY_RETURN, false, false, false);
378 SelfUnregisteringAcceleratorTarget target(return_accelerator, focus_manager); 468 SelfUnregisteringAcceleratorTarget target(return_accelerator, focus_manager);
379 EXPECT_EQ(target.accelerator_count(), 0); 469 EXPECT_EQ(target.accelerator_count(), 0);
380 EXPECT_EQ(NULL, 470 EXPECT_EQ(NULL,
381 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); 471 focus_manager->GetCurrentTargetForAccelerator(return_accelerator));
382 472
383 // Register the target. 473 // Register the target.
384 focus_manager->RegisterAccelerator(return_accelerator, &target); 474 focus_manager->RegisterAccelerator(return_accelerator, false, &target);
385 EXPECT_EQ(&target, 475 EXPECT_EQ(&target,
386 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); 476 focus_manager->GetCurrentTargetForAccelerator(return_accelerator));
387 477
388 // Hitting the return key. The target will be unregistered. 478 // Hitting the return key. The target will be unregistered.
389 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); 479 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator));
390 EXPECT_EQ(target.accelerator_count(), 1); 480 EXPECT_EQ(target.accelerator_count(), 1);
391 EXPECT_EQ(NULL, 481 EXPECT_EQ(NULL,
392 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); 482 focus_manager->GetCurrentTargetForAccelerator(return_accelerator));
393 483
394 // Hitting the return key again; nothing should happen. 484 // Hitting the return key again; nothing should happen.
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 589
500 // Test window, button and focus manager should all be destructed. 590 // Test window, button and focus manager should all be destructed.
501 ASSERT_EQ(3, static_cast<int>(dtor_tracker_.size())); 591 ASSERT_EQ(3, static_cast<int>(dtor_tracker_.size()));
502 592
503 // Focus manager should be the last one to destruct. 593 // Focus manager should be the last one to destruct.
504 ASSERT_STREQ("FocusManagerDtorTracked", dtor_tracker_[2].c_str()); 594 ASSERT_STREQ("FocusManagerDtorTracked", dtor_tracker_[2].c_str());
505 } 595 }
506 #endif 596 #endif
507 597
508 } // namespace views 598 } // namespace views
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698