OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |