OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "ui/views/controls/combobox/combobox.h" | 5 #include "ui/views/controls/combobox/combobox.h" |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 | 8 |
9 #include "base/macros.h" | 9 #include "base/macros.h" |
10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
11 #include "build/build_config.h" | 11 #include "build/build_config.h" |
12 #include "ui/base/ime/input_method.h" | 12 #include "ui/base/ime/input_method.h" |
13 #include "ui/base/ime/text_input_client.h" | 13 #include "ui/base/ime/text_input_client.h" |
14 #include "ui/base/models/combobox_model.h" | 14 #include "ui/base/models/combobox_model.h" |
15 #include "ui/base/models/menu_model.h" | 15 #include "ui/base/models/menu_model.h" |
16 #include "ui/events/event.h" | 16 #include "ui/events/event.h" |
17 #include "ui/events/event_constants.h" | 17 #include "ui/events/event_constants.h" |
18 #include "ui/events/event_utils.h" | 18 #include "ui/events/event_utils.h" |
19 #include "ui/events/keycodes/dom/dom_code.h" | 19 #include "ui/events/keycodes/dom/dom_code.h" |
20 #include "ui/events/keycodes/keyboard_codes.h" | 20 #include "ui/events/keycodes/keyboard_codes.h" |
21 #include "ui/events/test/event_generator.h" | 21 #include "ui/events/test/event_generator.h" |
22 #include "ui/views/controls/combobox/combobox_listener.h" | 22 #include "ui/views/controls/combobox/combobox_listener.h" |
| 23 #include "ui/views/style/platform_style.h" |
23 #include "ui/views/test/combobox_test_api.h" | 24 #include "ui/views/test/combobox_test_api.h" |
24 #include "ui/views/test/views_test_base.h" | 25 #include "ui/views/test/views_test_base.h" |
25 #include "ui/views/widget/widget.h" | 26 #include "ui/views/widget/widget.h" |
26 | 27 |
27 using base::ASCIIToUTF16; | 28 using base::ASCIIToUTF16; |
28 | 29 |
29 namespace views { | 30 namespace views { |
30 | 31 |
31 using test::ComboboxTestApi; | 32 using test::ComboboxTestApi; |
32 | 33 |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
218 | 219 |
219 combobox_->RequestFocus(); | 220 combobox_->RequestFocus(); |
220 combobox_->SizeToPreferredSize(); | 221 combobox_->SizeToPreferredSize(); |
221 | 222 |
222 event_generator_ = | 223 event_generator_ = |
223 base::MakeUnique<ui::test::EventGenerator>(widget_->GetNativeWindow()); | 224 base::MakeUnique<ui::test::EventGenerator>(widget_->GetNativeWindow()); |
224 event_generator_->set_target(ui::test::EventGenerator::Target::WINDOW); | 225 event_generator_->set_target(ui::test::EventGenerator::Target::WINDOW); |
225 } | 226 } |
226 | 227 |
227 protected: | 228 protected: |
228 void PressKey(ui::KeyboardCode key_code) { | 229 void PressKey(ui::KeyboardCode key_code, ui::EventFlags flags = ui::EF_NONE) { |
229 event_generator_->PressKey(key_code, ui::EF_NONE); | 230 event_generator_->PressKey(key_code, flags); |
230 } | 231 } |
231 | 232 |
232 void ReleaseKey(ui::KeyboardCode key_code) { | 233 void ReleaseKey(ui::KeyboardCode key_code, |
233 event_generator_->ReleaseKey(key_code, ui::EF_NONE); | 234 ui::EventFlags flags = ui::EF_NONE) { |
| 235 event_generator_->ReleaseKey(key_code, flags); |
234 } | 236 } |
235 | 237 |
236 View* GetFocusedView() { | 238 View* GetFocusedView() { |
237 return widget_->GetFocusManager()->GetFocusedView(); | 239 return widget_->GetFocusManager()->GetFocusedView(); |
238 } | 240 } |
239 | 241 |
240 void PerformMousePress(const gfx::Point& point) { | 242 void PerformMousePress(const gfx::Point& point) { |
241 ui::MouseEvent pressed_event = ui::MouseEvent( | 243 ui::MouseEvent pressed_event = ui::MouseEvent( |
242 ui::ET_MOUSE_PRESSED, point, point, ui::EventTimeForNow(), | 244 ui::ET_MOUSE_PRESSED, point, point, ui::EventTimeForNow(), |
243 ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON); | 245 ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON); |
(...skipping 24 matching lines...) Expand all Loading... |
268 | 270 |
269 // The current menu show count. | 271 // The current menu show count. |
270 int menu_show_count_ = 0; | 272 int menu_show_count_ = 0; |
271 | 273 |
272 std::unique_ptr<ui::test::EventGenerator> event_generator_; | 274 std::unique_ptr<ui::test::EventGenerator> event_generator_; |
273 | 275 |
274 private: | 276 private: |
275 DISALLOW_COPY_AND_ASSIGN(ComboboxTest); | 277 DISALLOW_COPY_AND_ASSIGN(ComboboxTest); |
276 }; | 278 }; |
277 | 279 |
278 TEST_F(ComboboxTest, KeyTest) { | 280 #if defined(OS_MACOSX) |
| 281 // Tests whether the various Mac specific keyboard shortcuts invoke the dropdown |
| 282 // menu or not. |
| 283 TEST_F(ComboboxTest, KeyTestMac) { |
279 InitCombobox(nullptr, Combobox::STYLE_NORMAL); | 284 InitCombobox(nullptr, Combobox::STYLE_NORMAL); |
280 PressKey(ui::VKEY_END); | 285 PressKey(ui::VKEY_END); |
281 EXPECT_EQ(combobox_->selected_index() + 1, model_->GetItemCount()); | 286 EXPECT_EQ(0, combobox_->selected_index()); |
| 287 EXPECT_EQ(1, menu_show_count_); |
| 288 |
282 PressKey(ui::VKEY_HOME); | 289 PressKey(ui::VKEY_HOME); |
283 EXPECT_EQ(combobox_->selected_index(), 0); | 290 EXPECT_EQ(0, combobox_->selected_index()); |
| 291 EXPECT_EQ(2, menu_show_count_); |
| 292 |
| 293 PressKey(ui::VKEY_UP, ui::EF_COMMAND_DOWN); |
| 294 EXPECT_EQ(0, combobox_->selected_index()); |
| 295 EXPECT_EQ(3, menu_show_count_); |
| 296 |
| 297 PressKey(ui::VKEY_DOWN, ui::EF_COMMAND_DOWN); |
| 298 EXPECT_EQ(0, combobox_->selected_index()); |
| 299 EXPECT_EQ(4, menu_show_count_); |
| 300 |
284 PressKey(ui::VKEY_DOWN); | 301 PressKey(ui::VKEY_DOWN); |
285 PressKey(ui::VKEY_DOWN); | 302 EXPECT_EQ(0, combobox_->selected_index()); |
286 EXPECT_EQ(combobox_->selected_index(), 2); | 303 EXPECT_EQ(5, menu_show_count_); |
| 304 |
287 PressKey(ui::VKEY_RIGHT); | 305 PressKey(ui::VKEY_RIGHT); |
288 EXPECT_EQ(combobox_->selected_index(), 2); | 306 EXPECT_EQ(0, combobox_->selected_index()); |
| 307 EXPECT_EQ(5, menu_show_count_); |
| 308 |
289 PressKey(ui::VKEY_LEFT); | 309 PressKey(ui::VKEY_LEFT); |
290 EXPECT_EQ(combobox_->selected_index(), 2); | 310 EXPECT_EQ(0, combobox_->selected_index()); |
| 311 EXPECT_EQ(5, menu_show_count_); |
| 312 |
291 PressKey(ui::VKEY_UP); | 313 PressKey(ui::VKEY_UP); |
292 EXPECT_EQ(combobox_->selected_index(), 1); | 314 EXPECT_EQ(0, combobox_->selected_index()); |
| 315 EXPECT_EQ(6, menu_show_count_); |
| 316 |
293 PressKey(ui::VKEY_PRIOR); | 317 PressKey(ui::VKEY_PRIOR); |
294 EXPECT_EQ(combobox_->selected_index(), 0); | 318 EXPECT_EQ(0, combobox_->selected_index()); |
| 319 EXPECT_EQ(6, menu_show_count_); |
| 320 |
295 PressKey(ui::VKEY_NEXT); | 321 PressKey(ui::VKEY_NEXT); |
296 EXPECT_EQ(combobox_->selected_index(), model_->GetItemCount() - 1); | 322 EXPECT_EQ(0, combobox_->selected_index()); |
| 323 EXPECT_EQ(6, menu_show_count_); |
297 } | 324 } |
| 325 #endif |
298 | 326 |
299 // Check that if a combobox is disabled before it has a native wrapper, then the | 327 // Check that if a combobox is disabled before it has a native wrapper, then the |
300 // native wrapper inherits the disabled state when it gets created. | 328 // native wrapper inherits the disabled state when it gets created. |
301 TEST_F(ComboboxTest, DisabilityTest) { | 329 TEST_F(ComboboxTest, DisabilityTest) { |
302 model_.reset(new TestComboboxModel()); | 330 model_.reset(new TestComboboxModel()); |
303 | 331 |
304 ASSERT_FALSE(combobox_); | 332 ASSERT_FALSE(combobox_); |
305 combobox_ = new TestCombobox(model_.get(), Combobox::STYLE_NORMAL); | 333 combobox_ = new TestCombobox(model_.get(), Combobox::STYLE_NORMAL); |
306 combobox_->SetEnabled(false); | 334 combobox_->SetEnabled(false); |
307 | 335 |
308 widget_ = new Widget; | 336 widget_ = new Widget; |
309 Widget::InitParams params = | 337 Widget::InitParams params = |
310 CreateParams(Widget::InitParams::TYPE_WINDOW_FRAMELESS); | 338 CreateParams(Widget::InitParams::TYPE_WINDOW_FRAMELESS); |
311 params.bounds = gfx::Rect(100, 100, 100, 100); | 339 params.bounds = gfx::Rect(100, 100, 100, 100); |
312 widget_->Init(params); | 340 widget_->Init(params); |
313 View* container = new View(); | 341 View* container = new View(); |
314 widget_->SetContentsView(container); | 342 widget_->SetContentsView(container); |
315 container->AddChildView(combobox_); | 343 container->AddChildView(combobox_); |
316 EXPECT_FALSE(combobox_->enabled()); | 344 EXPECT_FALSE(combobox_->enabled()); |
317 } | 345 } |
318 | 346 |
| 347 // On Mac, key events can't change the currently selected index directly for a |
| 348 // combobox. |
| 349 #if !defined(OS_MACOSX) |
| 350 |
| 351 // Tests the behavior of various keyboard shortcuts on the currently selected |
| 352 // index. |
| 353 TEST_F(ComboboxTest, KeyTest) { |
| 354 InitCombobox(nullptr, Combobox::STYLE_NORMAL); |
| 355 PressKey(ui::VKEY_END); |
| 356 EXPECT_EQ(model_->GetItemCount(), combobox_->selected_index() + 1); |
| 357 PressKey(ui::VKEY_HOME); |
| 358 EXPECT_EQ(0, combobox_->selected_index()); |
| 359 PressKey(ui::VKEY_DOWN); |
| 360 PressKey(ui::VKEY_DOWN); |
| 361 EXPECT_EQ(2, combobox_->selected_index()); |
| 362 PressKey(ui::VKEY_RIGHT); |
| 363 EXPECT_EQ(2, combobox_->selected_index()); |
| 364 PressKey(ui::VKEY_LEFT); |
| 365 EXPECT_EQ(2, combobox_->selected_index()); |
| 366 PressKey(ui::VKEY_UP); |
| 367 EXPECT_EQ(1, combobox_->selected_index()); |
| 368 PressKey(ui::VKEY_PRIOR); |
| 369 EXPECT_EQ(0, combobox_->selected_index()); |
| 370 PressKey(ui::VKEY_NEXT); |
| 371 EXPECT_EQ(model_->GetItemCount() - 1, combobox_->selected_index()); |
| 372 } |
| 373 |
319 // Verifies that we don't select a separator line in combobox when navigating | 374 // Verifies that we don't select a separator line in combobox when navigating |
320 // through keyboard. | 375 // through keyboard. |
321 TEST_F(ComboboxTest, SkipSeparatorSimple) { | 376 TEST_F(ComboboxTest, SkipSeparatorSimple) { |
322 std::set<int> separators; | 377 std::set<int> separators; |
323 separators.insert(2); | 378 separators.insert(2); |
324 InitCombobox(&separators, Combobox::STYLE_NORMAL); | 379 InitCombobox(&separators, Combobox::STYLE_NORMAL); |
325 EXPECT_EQ(0, combobox_->selected_index()); | 380 EXPECT_EQ(0, combobox_->selected_index()); |
326 PressKey(ui::VKEY_DOWN); | 381 PressKey(ui::VKEY_DOWN); |
327 EXPECT_EQ(1, combobox_->selected_index()); | 382 EXPECT_EQ(1, combobox_->selected_index()); |
328 PressKey(ui::VKEY_DOWN); | 383 PressKey(ui::VKEY_DOWN); |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
429 EXPECT_EQ(5, combobox_->selected_index()); | 484 EXPECT_EQ(5, combobox_->selected_index()); |
430 PressKey(ui::VKEY_HOME); | 485 PressKey(ui::VKEY_HOME); |
431 EXPECT_EQ(0, combobox_->selected_index()); | 486 EXPECT_EQ(0, combobox_->selected_index()); |
432 PressKey(ui::VKEY_NEXT); | 487 PressKey(ui::VKEY_NEXT); |
433 EXPECT_EQ(6, combobox_->selected_index()); | 488 EXPECT_EQ(6, combobox_->selected_index()); |
434 PressKey(ui::VKEY_PRIOR); | 489 PressKey(ui::VKEY_PRIOR); |
435 EXPECT_EQ(0, combobox_->selected_index()); | 490 EXPECT_EQ(0, combobox_->selected_index()); |
436 PressKey(ui::VKEY_END); | 491 PressKey(ui::VKEY_END); |
437 EXPECT_EQ(6, combobox_->selected_index()); | 492 EXPECT_EQ(6, combobox_->selected_index()); |
438 } | 493 } |
| 494 #endif // !OS_MACOSX |
439 | 495 |
440 TEST_F(ComboboxTest, GetTextForRowTest) { | 496 TEST_F(ComboboxTest, GetTextForRowTest) { |
441 std::set<int> separators; | 497 std::set<int> separators; |
442 separators.insert(0); | 498 separators.insert(0); |
443 separators.insert(1); | 499 separators.insert(1); |
444 separators.insert(9); | 500 separators.insert(9); |
445 InitCombobox(&separators, Combobox::STYLE_NORMAL); | 501 InitCombobox(&separators, Combobox::STYLE_NORMAL); |
446 for (int i = 0; i < combobox_->GetRowCount(); ++i) { | 502 for (int i = 0; i < combobox_->GetRowCount(); ++i) { |
447 if (separators.count(i) != 0) { | 503 if (separators.count(i) != 0) { |
448 EXPECT_TRUE(combobox_->GetTextForRow(i).empty()) << i; | 504 EXPECT_TRUE(combobox_->GetTextForRow(i).empty()) << i; |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
539 } | 595 } |
540 | 596 |
541 TEST_F(ComboboxTest, NotifyOnClickWithReturnKey) { | 597 TEST_F(ComboboxTest, NotifyOnClickWithReturnKey) { |
542 InitCombobox(nullptr, Combobox::STYLE_NORMAL); | 598 InitCombobox(nullptr, Combobox::STYLE_NORMAL); |
543 | 599 |
544 TestComboboxListener listener; | 600 TestComboboxListener listener; |
545 combobox_->set_listener(&listener); | 601 combobox_->set_listener(&listener); |
546 | 602 |
547 // With STYLE_NORMAL, the click event is ignored. Instead the menu is shown. | 603 // With STYLE_NORMAL, the click event is ignored. Instead the menu is shown. |
548 PressKey(ui::VKEY_RETURN); | 604 PressKey(ui::VKEY_RETURN); |
549 EXPECT_EQ(1, menu_show_count_); | 605 EXPECT_EQ(PlatformStyle::kReturnClicksFocusedControl ? 1 : 0, |
| 606 menu_show_count_); |
550 EXPECT_FALSE(listener.on_perform_action_called()); | 607 EXPECT_FALSE(listener.on_perform_action_called()); |
551 } | 608 } |
552 | 609 |
553 TEST_F(ComboboxTest, NotifyOnClickWithReturnKeyActionStyle) { | 610 TEST_F(ComboboxTest, NotifyOnClickWithReturnKeyActionStyle) { |
554 InitCombobox(nullptr, Combobox::STYLE_ACTION); | 611 InitCombobox(nullptr, Combobox::STYLE_ACTION); |
555 | 612 |
556 TestComboboxListener listener; | 613 TestComboboxListener listener; |
557 combobox_->set_listener(&listener); | 614 combobox_->set_listener(&listener); |
558 | 615 |
559 // With STYLE_ACTION, the click event is notified and the menu is not shown. | 616 // With STYLE_ACTION, the click event is notified and the menu is not shown. |
560 PressKey(ui::VKEY_RETURN); | 617 PressKey(ui::VKEY_RETURN); |
561 EXPECT_EQ(0, menu_show_count_); | 618 EXPECT_EQ(0, menu_show_count_); |
562 EXPECT_TRUE(listener.on_perform_action_called()); | 619 |
563 EXPECT_EQ(0, listener.perform_action_index()); | 620 if (PlatformStyle::kReturnClicksFocusedControl) { |
| 621 EXPECT_TRUE(listener.on_perform_action_called()); |
| 622 EXPECT_EQ(0, listener.perform_action_index()); |
| 623 } else { |
| 624 EXPECT_FALSE(listener.on_perform_action_called()); |
| 625 EXPECT_EQ(-1, listener.perform_action_index()); |
| 626 } |
564 } | 627 } |
565 | 628 |
566 TEST_F(ComboboxTest, NotifyOnClickWithSpaceKey) { | 629 TEST_F(ComboboxTest, NotifyOnClickWithSpaceKey) { |
567 InitCombobox(nullptr, Combobox::STYLE_NORMAL); | 630 InitCombobox(nullptr, Combobox::STYLE_NORMAL); |
568 | 631 |
569 TestComboboxListener listener; | 632 TestComboboxListener listener; |
570 combobox_->set_listener(&listener); | 633 combobox_->set_listener(&listener); |
571 | 634 |
572 // With STYLE_NORMAL, the click event is ignored. Instead the menu is shwon. | 635 // With STYLE_NORMAL, the click event is ignored. Instead the menu is shwon. |
573 PressKey(ui::VKEY_SPACE); | 636 PressKey(ui::VKEY_SPACE); |
574 EXPECT_EQ(1, menu_show_count_); | 637 EXPECT_EQ(1, menu_show_count_); |
575 EXPECT_FALSE(listener.on_perform_action_called()); | 638 EXPECT_FALSE(listener.on_perform_action_called()); |
576 | 639 |
577 ReleaseKey(ui::VKEY_SPACE); | 640 ReleaseKey(ui::VKEY_SPACE); |
578 EXPECT_EQ(1, menu_show_count_); | 641 EXPECT_EQ(1, menu_show_count_); |
579 EXPECT_FALSE(listener.on_perform_action_called()); | 642 EXPECT_FALSE(listener.on_perform_action_called()); |
580 } | 643 } |
581 | 644 |
582 TEST_F(ComboboxTest, NotifyOnClickWithSpaceKeyActionStyle) { | 645 TEST_F(ComboboxTest, NotifyOnClickWithSpaceKeyActionStyle) { |
583 InitCombobox(nullptr, Combobox::STYLE_ACTION); | 646 InitCombobox(nullptr, Combobox::STYLE_ACTION); |
584 | 647 |
585 TestComboboxListener listener; | 648 TestComboboxListener listener; |
586 combobox_->set_listener(&listener); | 649 combobox_->set_listener(&listener); |
587 | 650 |
588 // With STYLE_ACTION, the click event is notified after releasing and the menu | 651 // With STYLE_ACTION, the click event is notified after releasing and the menu |
589 // is not shown. | 652 // is not shown. On Mac, the menu should be shown. |
590 PressKey(ui::VKEY_SPACE); | 653 PressKey(ui::VKEY_SPACE); |
| 654 #if defined(OS_MACOSX) |
| 655 EXPECT_EQ(1, menu_show_count_); |
| 656 #else |
591 EXPECT_EQ(0, menu_show_count_); | 657 EXPECT_EQ(0, menu_show_count_); |
| 658 #endif |
592 EXPECT_FALSE(listener.on_perform_action_called()); | 659 EXPECT_FALSE(listener.on_perform_action_called()); |
| 660 EXPECT_EQ(-1, listener.perform_action_index()); |
593 | 661 |
594 ReleaseKey(ui::VKEY_SPACE); | 662 ReleaseKey(ui::VKEY_SPACE); |
| 663 #if defined(OS_MACOSX) |
| 664 EXPECT_EQ(1, menu_show_count_); |
| 665 EXPECT_FALSE(listener.on_perform_action_called()); |
| 666 EXPECT_EQ(-1, listener.perform_action_index()); |
| 667 #else |
595 EXPECT_EQ(0, menu_show_count_); | 668 EXPECT_EQ(0, menu_show_count_); |
596 EXPECT_TRUE(listener.on_perform_action_called()); | 669 EXPECT_TRUE(listener.on_perform_action_called()); |
597 EXPECT_EQ(0, listener.perform_action_index()); | 670 EXPECT_EQ(0, listener.perform_action_index()); |
| 671 #endif |
598 } | 672 } |
599 | 673 |
600 TEST_F(ComboboxTest, NotifyOnClickWithMouse) { | 674 TEST_F(ComboboxTest, NotifyOnClickWithMouse) { |
601 InitCombobox(nullptr, Combobox::STYLE_ACTION); | 675 InitCombobox(nullptr, Combobox::STYLE_ACTION); |
602 | 676 |
603 TestComboboxListener listener; | 677 TestComboboxListener listener; |
604 combobox_->set_listener(&listener); | 678 combobox_->set_listener(&listener); |
605 | 679 |
606 combobox_->Layout(); | 680 combobox_->Layout(); |
607 | 681 |
(...skipping 23 matching lines...) Expand all Loading... |
631 PerformMouseRelease(left_point); | 705 PerformMouseRelease(left_point); |
632 | 706 |
633 EXPECT_EQ(1, menu_show_count_); // Unchanged. | 707 EXPECT_EQ(1, menu_show_count_); // Unchanged. |
634 EXPECT_EQ(0, listener.perform_action_index()); | 708 EXPECT_EQ(0, listener.perform_action_index()); |
635 } | 709 } |
636 | 710 |
637 TEST_F(ComboboxTest, ConsumingPressKeyEvents) { | 711 TEST_F(ComboboxTest, ConsumingPressKeyEvents) { |
638 InitCombobox(nullptr, Combobox::STYLE_NORMAL); | 712 InitCombobox(nullptr, Combobox::STYLE_NORMAL); |
639 | 713 |
640 EXPECT_TRUE(combobox_->OnKeyPressed( | 714 EXPECT_TRUE(combobox_->OnKeyPressed( |
641 ui::KeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_RETURN, ui::EF_NONE))); | 715 ui::KeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_SPACE, ui::EF_NONE))); |
642 EXPECT_EQ(1, menu_show_count_); | 716 EXPECT_EQ(1, menu_show_count_); |
643 EXPECT_TRUE(combobox_->OnKeyPressed( | 717 |
644 ui::KeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_SPACE, ui::EF_NONE))); | 718 ui::KeyEvent return_press(ui::ET_KEY_PRESSED, ui::VKEY_RETURN, ui::EF_NONE); |
645 EXPECT_EQ(2, menu_show_count_); | 719 if (PlatformStyle::kReturnClicksFocusedControl) { |
| 720 EXPECT_TRUE(combobox_->OnKeyPressed(return_press)); |
| 721 EXPECT_EQ(2, menu_show_count_); |
| 722 } else { |
| 723 EXPECT_FALSE(combobox_->OnKeyPressed(return_press)); |
| 724 EXPECT_EQ(1, menu_show_count_); |
| 725 } |
646 } | 726 } |
647 | 727 |
648 TEST_F(ComboboxTest, ConsumingKeyPressEventsActionStyle) { | 728 TEST_F(ComboboxTest, ConsumingKeyPressEventsActionStyle) { |
649 // When the combobox's style is STYLE_ACTION, pressing events of a space key | 729 // When the combobox's style is STYLE_ACTION, pressing events of a space key |
650 // or an enter key will be consumed and the menu is not shown. | 730 // or an enter key will be consumed and the menu is not shown. However, on |
| 731 // Mac, space will show the menu. |
651 InitCombobox(nullptr, Combobox::STYLE_ACTION); | 732 InitCombobox(nullptr, Combobox::STYLE_ACTION); |
652 | 733 |
653 EXPECT_TRUE(combobox_->OnKeyPressed( | 734 EXPECT_EQ(PlatformStyle::kReturnClicksFocusedControl, |
654 ui::KeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_RETURN, ui::EF_NONE))); | 735 combobox_->OnKeyPressed(ui::KeyEvent( |
| 736 ui::ET_KEY_PRESSED, ui::VKEY_RETURN, ui::EF_NONE))); |
655 EXPECT_EQ(0, menu_show_count_); | 737 EXPECT_EQ(0, menu_show_count_); |
| 738 |
656 EXPECT_TRUE(combobox_->OnKeyPressed( | 739 EXPECT_TRUE(combobox_->OnKeyPressed( |
657 ui::KeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_SPACE, ui::EF_NONE))); | 740 ui::KeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_SPACE, ui::EF_NONE))); |
| 741 #if defined(OS_MACOSX) |
| 742 EXPECT_EQ(1, menu_show_count_); |
| 743 #else |
658 EXPECT_EQ(0, menu_show_count_); | 744 EXPECT_EQ(0, menu_show_count_); |
| 745 #endif |
659 } | 746 } |
660 | 747 |
661 TEST_F(ComboboxTest, ContentWidth) { | 748 TEST_F(ComboboxTest, ContentWidth) { |
662 std::vector<std::string> values; | 749 std::vector<std::string> values; |
663 VectorComboboxModel model(&values); | 750 VectorComboboxModel model(&values); |
664 TestCombobox combobox(&model, Combobox::STYLE_NORMAL); | 751 TestCombobox combobox(&model, Combobox::STYLE_NORMAL); |
665 TestCombobox action_combobox(&model, Combobox::STYLE_ACTION); | 752 TestCombobox action_combobox(&model, Combobox::STYLE_ACTION); |
666 ComboboxTestApi test_api(&combobox); | 753 ComboboxTestApi test_api(&combobox); |
667 ComboboxTestApi action_test_api(&action_combobox); | 754 ComboboxTestApi action_test_api(&action_combobox); |
668 | 755 |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
829 EXPECT_EQ(ui::MenuModel::TYPE_COMMAND, menu_model->GetTypeAt(0)); | 916 EXPECT_EQ(ui::MenuModel::TYPE_COMMAND, menu_model->GetTypeAt(0)); |
830 EXPECT_EQ(ui::MenuModel::TYPE_COMMAND, menu_model->GetTypeAt(1)); | 917 EXPECT_EQ(ui::MenuModel::TYPE_COMMAND, menu_model->GetTypeAt(1)); |
831 | 918 |
832 EXPECT_EQ(ASCIIToUTF16("PEANUT BUTTER"), menu_model->GetLabelAt(0)); | 919 EXPECT_EQ(ASCIIToUTF16("PEANUT BUTTER"), menu_model->GetLabelAt(0)); |
833 EXPECT_EQ(ASCIIToUTF16("JELLY"), menu_model->GetLabelAt(1)); | 920 EXPECT_EQ(ASCIIToUTF16("JELLY"), menu_model->GetLabelAt(1)); |
834 EXPECT_FALSE(menu_model->IsVisibleAt(0)); | 921 EXPECT_FALSE(menu_model->IsVisibleAt(0)); |
835 EXPECT_TRUE(menu_model->IsVisibleAt(1)); | 922 EXPECT_TRUE(menu_model->IsVisibleAt(1)); |
836 } | 923 } |
837 | 924 |
838 } // namespace views | 925 } // namespace views |
OLD | NEW |