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

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
« no previous file with comments | « ui/views/focus/focus_manager.cc ('k') | ui/views/view.cc » ('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 (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,
235 focus_manager->RegisterAccelerator(escape_accelerator, &escape_target); 235 ui::AcceleratorManager::kNormalPriority,
236 &return_target);
237 focus_manager->RegisterAccelerator(escape_accelerator,
238 ui::AcceleratorManager::kNormalPriority,
239 &escape_target);
236 240
237 // Checks if the correct target is registered. 241 // Checks if the correct target is registered.
238 EXPECT_EQ(&return_target, 242 EXPECT_EQ(&return_target,
239 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); 243 focus_manager->GetCurrentTargetForAccelerator(return_accelerator));
240 EXPECT_EQ(&escape_target, 244 EXPECT_EQ(&escape_target,
241 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator)); 245 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator));
242 246
243 // Hitting the return key. 247 // Hitting the return key.
244 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); 248 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator));
245 EXPECT_EQ(return_target.accelerator_count(), 1); 249 EXPECT_EQ(return_target.accelerator_count(), 1);
246 EXPECT_EQ(escape_target.accelerator_count(), 0); 250 EXPECT_EQ(escape_target.accelerator_count(), 0);
247 251
248 // Hitting the escape key. 252 // Hitting the escape key.
249 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator)); 253 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator));
250 EXPECT_EQ(return_target.accelerator_count(), 1); 254 EXPECT_EQ(return_target.accelerator_count(), 1);
251 EXPECT_EQ(escape_target.accelerator_count(), 1); 255 EXPECT_EQ(escape_target.accelerator_count(), 1);
252 256
253 // Register another target for the return key. 257 // Register another target for the return key.
254 TestAcceleratorTarget return_target2(true); 258 TestAcceleratorTarget return_target2(true);
255 EXPECT_EQ(return_target2.accelerator_count(), 0); 259 EXPECT_EQ(return_target2.accelerator_count(), 0);
256 focus_manager->RegisterAccelerator(return_accelerator, &return_target2); 260 focus_manager->RegisterAccelerator(return_accelerator,
261 ui::AcceleratorManager::kNormalPriority,
262 &return_target2);
257 EXPECT_EQ(&return_target2, 263 EXPECT_EQ(&return_target2,
258 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); 264 focus_manager->GetCurrentTargetForAccelerator(return_accelerator));
259 265
260 // Hitting the return key; return_target2 has the priority. 266 // Hitting the return key; return_target2 has the priority.
261 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); 267 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator));
262 EXPECT_EQ(return_target.accelerator_count(), 1); 268 EXPECT_EQ(return_target.accelerator_count(), 1);
263 EXPECT_EQ(return_target2.accelerator_count(), 1); 269 EXPECT_EQ(return_target2.accelerator_count(), 1);
264 270
265 // Register a target that does not process the accelerator event. 271 // Register a target that does not process the accelerator event.
266 TestAcceleratorTarget return_target3(false); 272 TestAcceleratorTarget return_target3(false);
267 EXPECT_EQ(return_target3.accelerator_count(), 0); 273 EXPECT_EQ(return_target3.accelerator_count(), 0);
268 focus_manager->RegisterAccelerator(return_accelerator, &return_target3); 274 focus_manager->RegisterAccelerator(return_accelerator,
275 ui::AcceleratorManager::kNormalPriority,
276 &return_target3);
269 EXPECT_EQ(&return_target3, 277 EXPECT_EQ(&return_target3,
270 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); 278 focus_manager->GetCurrentTargetForAccelerator(return_accelerator));
271 279
272 // Hitting the return key. 280 // Hitting the return key.
273 // Since the event handler of return_target3 returns false, return_target2 281 // Since the event handler of return_target3 returns false, return_target2
274 // should be called too. 282 // should be called too.
275 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); 283 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator));
276 EXPECT_EQ(return_target.accelerator_count(), 1); 284 EXPECT_EQ(return_target.accelerator_count(), 1);
277 EXPECT_EQ(return_target2.accelerator_count(), 2); 285 EXPECT_EQ(return_target2.accelerator_count(), 2);
278 EXPECT_EQ(return_target3.accelerator_count(), 1); 286 EXPECT_EQ(return_target3.accelerator_count(), 1);
(...skipping 22 matching lines...) Expand all
301 309
302 // Hitting the return key and the escape key. Nothing should happen. 310 // Hitting the return key and the escape key. Nothing should happen.
303 EXPECT_FALSE(focus_manager->ProcessAccelerator(return_accelerator)); 311 EXPECT_FALSE(focus_manager->ProcessAccelerator(return_accelerator));
304 EXPECT_EQ(return_target.accelerator_count(), 2); 312 EXPECT_EQ(return_target.accelerator_count(), 2);
305 EXPECT_EQ(return_target2.accelerator_count(), 2); 313 EXPECT_EQ(return_target2.accelerator_count(), 2);
306 EXPECT_EQ(return_target3.accelerator_count(), 2); 314 EXPECT_EQ(return_target3.accelerator_count(), 2);
307 EXPECT_FALSE(focus_manager->ProcessAccelerator(escape_accelerator)); 315 EXPECT_FALSE(focus_manager->ProcessAccelerator(escape_accelerator));
308 EXPECT_EQ(escape_target.accelerator_count(), 1); 316 EXPECT_EQ(escape_target.accelerator_count(), 1);
309 } 317 }
310 318
319 TEST_F(FocusManagerTest, HighPriorityHandlers) {
320 FocusManager* focus_manager = GetFocusManager();
321 ui::Accelerator escape_accelerator(ui::VKEY_ESCAPE, false, false, false);
322
323 TestAcceleratorTarget escape_target_high(true);
324 TestAcceleratorTarget escape_target_normal(true);
325 EXPECT_EQ(escape_target_high.accelerator_count(), 0);
326 EXPECT_EQ(escape_target_normal.accelerator_count(), 0);
327 EXPECT_EQ(NULL,
328 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator));
329 EXPECT_FALSE(focus_manager->HasPriorityHandler(escape_accelerator));
330
331 // Register high priority target.
332 focus_manager->RegisterAccelerator(escape_accelerator,
333 ui::AcceleratorManager::kHighPriority,
334 &escape_target_high);
335 EXPECT_EQ(&escape_target_high,
336 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator));
337 EXPECT_TRUE(focus_manager->HasPriorityHandler(escape_accelerator));
338
339 // Hit the escape key.
340 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator));
341 EXPECT_EQ(escape_target_high.accelerator_count(), 1);
342 EXPECT_EQ(escape_target_normal.accelerator_count(), 0);
343
344 // Add a normal priority target and make sure it doesn't see the key.
345 focus_manager->RegisterAccelerator(escape_accelerator,
346 ui::AcceleratorManager::kNormalPriority,
347 &escape_target_normal);
348
349 // Checks if the correct target is registered (same as before, the high
350 // priority one).
351 EXPECT_EQ(&escape_target_high,
352 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator));
353 EXPECT_TRUE(focus_manager->HasPriorityHandler(escape_accelerator));
354
355 // Hit the escape key.
356 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator));
357 EXPECT_EQ(escape_target_high.accelerator_count(), 2);
358 EXPECT_EQ(escape_target_normal.accelerator_count(), 0);
359
360 // Unregister the high priority accelerator.
361 focus_manager->UnregisterAccelerator(escape_accelerator, &escape_target_high);
362 EXPECT_EQ(&escape_target_normal,
363 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator));
364 EXPECT_FALSE(focus_manager->HasPriorityHandler(escape_accelerator));
365
366 // Hit the escape key.
367 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator));
368 EXPECT_EQ(escape_target_high.accelerator_count(), 2);
369 EXPECT_EQ(escape_target_normal.accelerator_count(), 1);
370
371 // Add the high priority target back and make sure it starts seeing the key.
372 focus_manager->RegisterAccelerator(escape_accelerator,
373 ui::AcceleratorManager::kHighPriority,
374 &escape_target_high);
375 EXPECT_EQ(&escape_target_high,
376 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator));
377 EXPECT_TRUE(focus_manager->HasPriorityHandler(escape_accelerator));
378
379 // Hit the escape key.
380 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator));
381 EXPECT_EQ(escape_target_high.accelerator_count(), 3);
382 EXPECT_EQ(escape_target_normal.accelerator_count(), 1);
383
384 // Unregister the normal priority accelerator.
385 focus_manager->UnregisterAccelerator(
386 escape_accelerator, &escape_target_normal);
387 EXPECT_EQ(&escape_target_high,
388 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator));
389 EXPECT_TRUE(focus_manager->HasPriorityHandler(escape_accelerator));
390
391 // Hit the escape key.
392 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator));
393 EXPECT_EQ(escape_target_high.accelerator_count(), 4);
394 EXPECT_EQ(escape_target_normal.accelerator_count(), 1);
395
396 // Unregister the high priority accelerator.
397 focus_manager->UnregisterAccelerator(escape_accelerator, &escape_target_high);
398 EXPECT_EQ(NULL,
399 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator));
400 EXPECT_FALSE(focus_manager->HasPriorityHandler(escape_accelerator));
401
402 // Hit the escape key (no change, no targets registered).
403 EXPECT_FALSE(focus_manager->ProcessAccelerator(escape_accelerator));
404 EXPECT_EQ(escape_target_high.accelerator_count(), 4);
405 EXPECT_EQ(escape_target_normal.accelerator_count(), 1);
406 }
407
311 TEST_F(FocusManagerTest, CallsEnabledAcceleratorTargetsOnly) { 408 TEST_F(FocusManagerTest, CallsEnabledAcceleratorTargetsOnly) {
312 FocusManager* focus_manager = GetFocusManager(); 409 FocusManager* focus_manager = GetFocusManager();
313 ui::Accelerator return_accelerator(ui::VKEY_RETURN, false, false, false); 410 ui::Accelerator return_accelerator(ui::VKEY_RETURN, false, false, false);
314 411
315 TestAcceleratorTarget return_target1(true); 412 TestAcceleratorTarget return_target1(true);
316 TestAcceleratorTarget return_target2(true); 413 TestAcceleratorTarget return_target2(true);
317 414
318 focus_manager->RegisterAccelerator(return_accelerator, &return_target1); 415 focus_manager->RegisterAccelerator(return_accelerator,
319 focus_manager->RegisterAccelerator(return_accelerator, &return_target2); 416 ui::AcceleratorManager::kNormalPriority,
417 &return_target1);
418 focus_manager->RegisterAccelerator(return_accelerator,
419 ui::AcceleratorManager::kNormalPriority,
420 &return_target2);
320 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); 421 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator));
321 EXPECT_EQ(0, return_target1.accelerator_count()); 422 EXPECT_EQ(0, return_target1.accelerator_count());
322 EXPECT_EQ(1, return_target2.accelerator_count()); 423 EXPECT_EQ(1, return_target2.accelerator_count());
323 424
324 // If CanHandleAccelerators() return false, FocusManager shouldn't call 425 // If CanHandleAccelerators() return false, FocusManager shouldn't call
325 // AcceleratorPressed(). 426 // AcceleratorPressed().
326 return_target2.set_can_handle_accelerators(false); 427 return_target2.set_can_handle_accelerators(false);
327 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); 428 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator));
328 EXPECT_EQ(1, return_target1.accelerator_count()); 429 EXPECT_EQ(1, return_target1.accelerator_count());
329 EXPECT_EQ(1, return_target2.accelerator_count()); 430 EXPECT_EQ(1, return_target2.accelerator_count());
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 475
375 TEST_F(FocusManagerTest, CallsSelfDeletingAcceleratorTarget) { 476 TEST_F(FocusManagerTest, CallsSelfDeletingAcceleratorTarget) {
376 FocusManager* focus_manager = GetFocusManager(); 477 FocusManager* focus_manager = GetFocusManager();
377 ui::Accelerator return_accelerator(ui::VKEY_RETURN, false, false, false); 478 ui::Accelerator return_accelerator(ui::VKEY_RETURN, false, false, false);
378 SelfUnregisteringAcceleratorTarget target(return_accelerator, focus_manager); 479 SelfUnregisteringAcceleratorTarget target(return_accelerator, focus_manager);
379 EXPECT_EQ(target.accelerator_count(), 0); 480 EXPECT_EQ(target.accelerator_count(), 0);
380 EXPECT_EQ(NULL, 481 EXPECT_EQ(NULL,
381 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); 482 focus_manager->GetCurrentTargetForAccelerator(return_accelerator));
382 483
383 // Register the target. 484 // Register the target.
384 focus_manager->RegisterAccelerator(return_accelerator, &target); 485 focus_manager->RegisterAccelerator(return_accelerator,
486 ui::AcceleratorManager::kNormalPriority,
487 &target);
385 EXPECT_EQ(&target, 488 EXPECT_EQ(&target,
386 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); 489 focus_manager->GetCurrentTargetForAccelerator(return_accelerator));
387 490
388 // Hitting the return key. The target will be unregistered. 491 // Hitting the return key. The target will be unregistered.
389 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); 492 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator));
390 EXPECT_EQ(target.accelerator_count(), 1); 493 EXPECT_EQ(target.accelerator_count(), 1);
391 EXPECT_EQ(NULL, 494 EXPECT_EQ(NULL,
392 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); 495 focus_manager->GetCurrentTargetForAccelerator(return_accelerator));
393 496
394 // Hitting the return key again; nothing should happen. 497 // Hitting the return key again; nothing should happen.
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 602
500 // Test window, button and focus manager should all be destructed. 603 // Test window, button and focus manager should all be destructed.
501 ASSERT_EQ(3, static_cast<int>(dtor_tracker_.size())); 604 ASSERT_EQ(3, static_cast<int>(dtor_tracker_.size()));
502 605
503 // Focus manager should be the last one to destruct. 606 // Focus manager should be the last one to destruct.
504 ASSERT_STREQ("FocusManagerDtorTracked", dtor_tracker_[2].c_str()); 607 ASSERT_STREQ("FocusManagerDtorTracked", dtor_tracker_[2].c_str());
505 } 608 }
506 #endif 609 #endif
507 610
508 } // namespace views 611 } // namespace views
OLDNEW
« no previous file with comments | « ui/views/focus/focus_manager.cc ('k') | ui/views/view.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698