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

Side by Side Diff: ui/base/ime/remote_input_method_win_unittest.cc

Issue 1257603006: Refactoring for the InputMethod & InputMethodDelegate interfaces. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: addressed Sadrul's comment. Created 5 years, 4 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
« no previous file with comments | « ui/base/ime/remote_input_method_win.cc ('k') | ui/keyboard/keyboard_util.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 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/base/ime/remote_input_method_win.h" 5 #include "ui/base/ime/remote_input_method_win.h"
6 6
7 #include <InputScope.h> 7 #include <InputScope.h>
8 8
9 #include <vector> 9 #include <vector>
10 10
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 MockInputMethodDelegate() {} 131 MockInputMethodDelegate() {}
132 132
133 const std::vector<ui::KeyboardCode>& fabricated_key_events() const { 133 const std::vector<ui::KeyboardCode>& fabricated_key_events() const {
134 return fabricated_key_events_; 134 return fabricated_key_events_;
135 } 135 }
136 void Reset() { 136 void Reset() {
137 fabricated_key_events_.clear(); 137 fabricated_key_events_.clear();
138 } 138 }
139 139
140 private: 140 private:
141 bool DispatchKeyEventPostIME(const ui::KeyEvent& event) override { 141 ui::EventDispatchDetails DispatchKeyEventPostIME(
142 EXPECT_FALSE(event.HasNativeEvent()); 142 ui::KeyEvent* event) override {
143 fabricated_key_events_.push_back(event.key_code()); 143 EXPECT_FALSE(event->HasNativeEvent());
144 return true; 144 fabricated_key_events_.push_back(event->key_code());
145 event->SetHandled();
146 return ui::EventDispatchDetails();
145 } 147 }
146 148
147 std::vector<ui::KeyboardCode> fabricated_key_events_; 149 std::vector<ui::KeyboardCode> fabricated_key_events_;
148 DISALLOW_COPY_AND_ASSIGN(MockInputMethodDelegate); 150 DISALLOW_COPY_AND_ASSIGN(MockInputMethodDelegate);
149 }; 151 };
150 152
151 class MockRemoteInputMethodDelegateWin 153 class MockRemoteInputMethodDelegateWin
152 : public internal::RemoteInputMethodDelegateWin { 154 : public internal::RemoteInputMethodDelegateWin {
153 public: 155 public:
154 MockRemoteInputMethodDelegateWin() 156 MockRemoteInputMethodDelegateWin()
(...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after
506 } 508 }
507 509
508 TEST(RemoteInputMethodWinTest, DispatchKeyEvent_NativeKeyEvent) { 510 TEST(RemoteInputMethodWinTest, DispatchKeyEvent_NativeKeyEvent) {
509 // Basically RemoteInputMethodWin does not handle native keydown event. 511 // Basically RemoteInputMethodWin does not handle native keydown event.
510 512
511 MockInputMethodDelegate delegate_; 513 MockInputMethodDelegate delegate_;
512 MockTextInputClient mock_text_input_client; 514 MockTextInputClient mock_text_input_client;
513 scoped_ptr<InputMethod> input_method(CreateRemoteInputMethodWin(&delegate_)); 515 scoped_ptr<InputMethod> input_method(CreateRemoteInputMethodWin(&delegate_));
514 516
515 const MSG wm_keydown = { NULL, WM_KEYDOWN, ui::VKEY_A }; 517 const MSG wm_keydown = { NULL, WM_KEYDOWN, ui::VKEY_A };
516 ui::KeyEvent native_keydown(wm_keydown); 518 ui::KeyEvent new_keydown(wm_keydown);
519 ui::KeyEvent native_keydown(new_keydown);
517 520
518 // This must not cause a crash. 521 // This must not cause a crash.
519 EXPECT_FALSE(input_method->DispatchKeyEvent(native_keydown)); 522 input_method->DispatchKeyEvent(&native_keydown);
523 EXPECT_FALSE(native_keydown.handled());
520 EXPECT_TRUE(mock_text_input_client.inserted_text().empty()); 524 EXPECT_TRUE(mock_text_input_client.inserted_text().empty());
521 EXPECT_TRUE(delegate_.fabricated_key_events().empty()); 525 EXPECT_TRUE(delegate_.fabricated_key_events().empty());
522 delegate_.Reset(); 526 delegate_.Reset();
523 mock_text_input_client.Reset(); 527 mock_text_input_client.Reset();
524 528
525 RemoteInputMethodPrivateWin* private_ptr = 529 RemoteInputMethodPrivateWin* private_ptr =
526 RemoteInputMethodPrivateWin::Get(input_method.get()); 530 RemoteInputMethodPrivateWin::Get(input_method.get());
527 ASSERT_TRUE(private_ptr != NULL); 531 ASSERT_TRUE(private_ptr != NULL);
528 MockRemoteInputMethodDelegateWin mock_remote_delegate; 532 MockRemoteInputMethodDelegateWin mock_remote_delegate;
529 private_ptr->SetRemoteDelegate(&mock_remote_delegate); 533 private_ptr->SetRemoteDelegate(&mock_remote_delegate);
530 534
531 // TextInputClient is not focused yet here. 535 // TextInputClient is not focused yet here.
532 536 native_keydown = new_keydown;
533 EXPECT_FALSE(input_method->DispatchKeyEvent(native_keydown)); 537 input_method->DispatchKeyEvent(&native_keydown);
538 EXPECT_FALSE(native_keydown.handled());
534 EXPECT_TRUE(mock_text_input_client.inserted_text().empty()); 539 EXPECT_TRUE(mock_text_input_client.inserted_text().empty());
535 EXPECT_TRUE(delegate_.fabricated_key_events().empty()); 540 EXPECT_TRUE(delegate_.fabricated_key_events().empty());
536 delegate_.Reset(); 541 delegate_.Reset();
537 mock_text_input_client.Reset(); 542 mock_text_input_client.Reset();
538 543
539 input_method->SetFocusedTextInputClient(&mock_text_input_client); 544 input_method->SetFocusedTextInputClient(&mock_text_input_client);
540 545
541 // TextInputClient is now focused here. 546 // TextInputClient is now focused here.
542 547 native_keydown = new_keydown;
543 EXPECT_FALSE(input_method->DispatchKeyEvent(native_keydown)); 548 input_method->DispatchKeyEvent(&native_keydown);
549 EXPECT_FALSE(native_keydown.handled());
544 EXPECT_TRUE(mock_text_input_client.inserted_text().empty()); 550 EXPECT_TRUE(mock_text_input_client.inserted_text().empty());
545 EXPECT_TRUE(delegate_.fabricated_key_events().empty()); 551 EXPECT_TRUE(delegate_.fabricated_key_events().empty());
546 delegate_.Reset(); 552 delegate_.Reset();
547 mock_text_input_client.Reset(); 553 mock_text_input_client.Reset();
548 } 554 }
549 555
550 TEST(RemoteInputMethodWinTest, DispatchKeyEvent_NativeCharEvent) { 556 TEST(RemoteInputMethodWinTest, DispatchKeyEvent_NativeCharEvent) {
551 // RemoteInputMethodWin handles native char event if possible. 557 // RemoteInputMethodWin handles native char event if possible.
552 558
553 MockInputMethodDelegate delegate_; 559 MockInputMethodDelegate delegate_;
554 MockTextInputClient mock_text_input_client; 560 MockTextInputClient mock_text_input_client;
555 scoped_ptr<InputMethod> input_method(CreateRemoteInputMethodWin(&delegate_)); 561 scoped_ptr<InputMethod> input_method(CreateRemoteInputMethodWin(&delegate_));
556 562
557 const MSG wm_char = { NULL, WM_CHAR, 'A', 0 }; 563 const MSG wm_char = { NULL, WM_CHAR, 'A', 0 };
558 ui::KeyEvent native_char(wm_char); 564 ui::KeyEvent new_char(wm_char);
565 ui::KeyEvent native_char(new_char);
559 566
560 // This must not cause a crash. 567 // This must not cause a crash.
561 EXPECT_FALSE(input_method->DispatchKeyEvent(native_char)); 568 input_method->DispatchKeyEvent(&native_char);
569 EXPECT_FALSE(native_char.handled());
562 EXPECT_TRUE(mock_text_input_client.inserted_text().empty()); 570 EXPECT_TRUE(mock_text_input_client.inserted_text().empty());
563 EXPECT_TRUE(delegate_.fabricated_key_events().empty()); 571 EXPECT_TRUE(delegate_.fabricated_key_events().empty());
564 delegate_.Reset(); 572 delegate_.Reset();
565 mock_text_input_client.Reset(); 573 mock_text_input_client.Reset();
566 574
567 RemoteInputMethodPrivateWin* private_ptr = 575 RemoteInputMethodPrivateWin* private_ptr =
568 RemoteInputMethodPrivateWin::Get(input_method.get()); 576 RemoteInputMethodPrivateWin::Get(input_method.get());
569 ASSERT_TRUE(private_ptr != NULL); 577 ASSERT_TRUE(private_ptr != NULL);
570 MockRemoteInputMethodDelegateWin mock_remote_delegate; 578 MockRemoteInputMethodDelegateWin mock_remote_delegate;
571 private_ptr->SetRemoteDelegate(&mock_remote_delegate); 579 private_ptr->SetRemoteDelegate(&mock_remote_delegate);
572 580
573 // TextInputClient is not focused yet here. 581 // TextInputClient is not focused yet here.
574 582 native_char = new_char;
575 EXPECT_FALSE(input_method->DispatchKeyEvent(native_char)); 583 input_method->DispatchKeyEvent(&native_char);
584 EXPECT_FALSE(native_char.handled());
576 EXPECT_TRUE(mock_text_input_client.inserted_text().empty()); 585 EXPECT_TRUE(mock_text_input_client.inserted_text().empty());
577 EXPECT_TRUE(delegate_.fabricated_key_events().empty()); 586 EXPECT_TRUE(delegate_.fabricated_key_events().empty());
578 delegate_.Reset(); 587 delegate_.Reset();
579 mock_text_input_client.Reset(); 588 mock_text_input_client.Reset();
580 589
581 input_method->SetFocusedTextInputClient(&mock_text_input_client); 590 input_method->SetFocusedTextInputClient(&mock_text_input_client);
582 591
583 // TextInputClient is now focused here. 592 // TextInputClient is now focused here.
584 593 native_char = new_char;
585 EXPECT_TRUE(input_method->DispatchKeyEvent(native_char)); 594 input_method->DispatchKeyEvent(&native_char);
595 EXPECT_TRUE(native_char.handled());
586 EXPECT_EQ(L"A", mock_text_input_client.inserted_text()); 596 EXPECT_EQ(L"A", mock_text_input_client.inserted_text());
587 EXPECT_TRUE(delegate_.fabricated_key_events().empty()); 597 EXPECT_TRUE(delegate_.fabricated_key_events().empty());
588 delegate_.Reset(); 598 delegate_.Reset();
589 mock_text_input_client.Reset(); 599 mock_text_input_client.Reset();
590 } 600 }
591 601
592 TEST(RemoteInputMethodWinTest, DispatchKeyEvent_FabricatedKeyDown) { 602 TEST(RemoteInputMethodWinTest, DispatchKeyEvent_FabricatedKeyDown) {
593 // Fabricated non-char event will be delegated to 603 // Fabricated non-char event will be delegated to
594 // InputMethodDelegate::DispatchFabricatedKeyEventPostIME as long as the 604 // InputMethodDelegate::DispatchFabricatedKeyEventPostIME as long as the
595 // delegate is installed. 605 // delegate is installed.
596 606
597 MockInputMethodDelegate delegate_; 607 MockInputMethodDelegate delegate_;
598 MockTextInputClient mock_text_input_client; 608 MockTextInputClient mock_text_input_client;
599 scoped_ptr<InputMethod> input_method(CreateRemoteInputMethodWin(&delegate_)); 609 scoped_ptr<InputMethod> input_method(CreateRemoteInputMethodWin(&delegate_));
600 610
601 ui::KeyEvent fabricated_keydown(ui::ET_KEY_PRESSED, ui::VKEY_A, ui::EF_NONE); 611 ui::KeyEvent new_keydown(ui::ET_KEY_PRESSED, ui::VKEY_A, ui::EF_NONE);
602 fabricated_keydown.set_character(L'A'); 612 new_keydown.set_character(L'A');
613 ui::KeyEvent fabricated_keydown(new_keydown);
603 614
604 // This must not cause a crash. 615 // This must not cause a crash.
605 EXPECT_TRUE(input_method->DispatchKeyEvent(fabricated_keydown)); 616 input_method->DispatchKeyEvent(&fabricated_keydown);
617 EXPECT_TRUE(fabricated_keydown.handled());
606 EXPECT_TRUE(mock_text_input_client.inserted_text().empty()); 618 EXPECT_TRUE(mock_text_input_client.inserted_text().empty());
607 ASSERT_EQ(1, delegate_.fabricated_key_events().size()); 619 ASSERT_EQ(1, delegate_.fabricated_key_events().size());
608 EXPECT_EQ(L'A', delegate_.fabricated_key_events()[0]); 620 EXPECT_EQ(L'A', delegate_.fabricated_key_events()[0]);
609 delegate_.Reset(); 621 delegate_.Reset();
610 mock_text_input_client.Reset(); 622 mock_text_input_client.Reset();
611 623
612 RemoteInputMethodPrivateWin* private_ptr = 624 RemoteInputMethodPrivateWin* private_ptr =
613 RemoteInputMethodPrivateWin::Get(input_method.get()); 625 RemoteInputMethodPrivateWin::Get(input_method.get());
614 ASSERT_TRUE(private_ptr != NULL); 626 ASSERT_TRUE(private_ptr != NULL);
615 MockRemoteInputMethodDelegateWin mock_remote_delegate; 627 MockRemoteInputMethodDelegateWin mock_remote_delegate;
616 private_ptr->SetRemoteDelegate(&mock_remote_delegate); 628 private_ptr->SetRemoteDelegate(&mock_remote_delegate);
617 629
618 // TextInputClient is not focused yet here. 630 // TextInputClient is not focused yet here.
619 631 fabricated_keydown = new_keydown;
620 EXPECT_TRUE(input_method->DispatchKeyEvent(fabricated_keydown)); 632 input_method->DispatchKeyEvent(&fabricated_keydown);
633 EXPECT_TRUE(fabricated_keydown.handled());
621 EXPECT_TRUE(mock_text_input_client.inserted_text().empty()); 634 EXPECT_TRUE(mock_text_input_client.inserted_text().empty());
622 ASSERT_EQ(1, delegate_.fabricated_key_events().size()); 635 ASSERT_EQ(1, delegate_.fabricated_key_events().size());
623 EXPECT_EQ(L'A', delegate_.fabricated_key_events()[0]); 636 EXPECT_EQ(L'A', delegate_.fabricated_key_events()[0]);
624 delegate_.Reset(); 637 delegate_.Reset();
625 mock_text_input_client.Reset(); 638 mock_text_input_client.Reset();
626 639
627 input_method->SetFocusedTextInputClient(&mock_text_input_client); 640 input_method->SetFocusedTextInputClient(&mock_text_input_client);
628 // TextInputClient is now focused here. 641 // TextInputClient is now focused here.
629 642 fabricated_keydown = new_keydown;
630 EXPECT_TRUE(input_method->DispatchKeyEvent(fabricated_keydown)); 643 input_method->DispatchKeyEvent(&fabricated_keydown);
644 EXPECT_TRUE(fabricated_keydown.handled());
631 EXPECT_TRUE(mock_text_input_client.inserted_text().empty()); 645 EXPECT_TRUE(mock_text_input_client.inserted_text().empty());
632 ASSERT_EQ(1, delegate_.fabricated_key_events().size()); 646 ASSERT_EQ(1, delegate_.fabricated_key_events().size());
633 EXPECT_EQ(L'A', delegate_.fabricated_key_events()[0]); 647 EXPECT_EQ(L'A', delegate_.fabricated_key_events()[0]);
634 delegate_.Reset(); 648 delegate_.Reset();
635 mock_text_input_client.Reset(); 649 mock_text_input_client.Reset();
636 650
637 input_method->SetDelegate(NULL); 651 input_method->SetDelegate(NULL);
638 // RemoteInputMethodDelegateWin is no longer set here. 652 // RemoteInputMethodDelegateWin is no longer set here.
639 653 fabricated_keydown = new_keydown;
640 EXPECT_FALSE(input_method->DispatchKeyEvent(fabricated_keydown)); 654 input_method->DispatchKeyEvent(&fabricated_keydown);
655 EXPECT_FALSE(fabricated_keydown.handled());
641 EXPECT_TRUE(mock_text_input_client.inserted_text().empty()); 656 EXPECT_TRUE(mock_text_input_client.inserted_text().empty());
642 } 657 }
643 658
644 TEST(RemoteInputMethodWinTest, DispatchKeyEvent_FabricatedChar) { 659 TEST(RemoteInputMethodWinTest, DispatchKeyEvent_FabricatedChar) {
645 // Note: RemoteInputMethodWin::DispatchKeyEvent should always return true 660 // Note: RemoteInputMethodWin::DispatchKeyEvent should always return true
646 // for fabricated character events. 661 // for fabricated character events.
647 662
648 MockInputMethodDelegate delegate_; 663 MockInputMethodDelegate delegate_;
649 MockTextInputClient mock_text_input_client; 664 MockTextInputClient mock_text_input_client;
650 scoped_ptr<InputMethod> input_method(CreateRemoteInputMethodWin(&delegate_)); 665 scoped_ptr<InputMethod> input_method(CreateRemoteInputMethodWin(&delegate_));
651 666
652 ui::KeyEvent fabricated_char(L'A', ui::VKEY_A, ui::EF_NONE); 667 ui::KeyEvent new_char(L'A', ui::VKEY_A, ui::EF_NONE);
668 ui::KeyEvent fabricated_char(new_char);
653 669
654 // This must not cause a crash. 670 // This must not cause a crash.
655 EXPECT_TRUE(input_method->DispatchKeyEvent(fabricated_char)); 671 input_method->DispatchKeyEvent(&fabricated_char);
672 EXPECT_TRUE(fabricated_char.handled());
656 EXPECT_TRUE(mock_text_input_client.inserted_text().empty()); 673 EXPECT_TRUE(mock_text_input_client.inserted_text().empty());
657 EXPECT_TRUE(delegate_.fabricated_key_events().empty()); 674 EXPECT_TRUE(delegate_.fabricated_key_events().empty());
658 delegate_.Reset(); 675 delegate_.Reset();
659 mock_text_input_client.Reset(); 676 mock_text_input_client.Reset();
660 677
661 RemoteInputMethodPrivateWin* private_ptr = 678 RemoteInputMethodPrivateWin* private_ptr =
662 RemoteInputMethodPrivateWin::Get(input_method.get()); 679 RemoteInputMethodPrivateWin::Get(input_method.get());
663 ASSERT_TRUE(private_ptr != NULL); 680 ASSERT_TRUE(private_ptr != NULL);
664 MockRemoteInputMethodDelegateWin mock_remote_delegate; 681 MockRemoteInputMethodDelegateWin mock_remote_delegate;
665 private_ptr->SetRemoteDelegate(&mock_remote_delegate); 682 private_ptr->SetRemoteDelegate(&mock_remote_delegate);
666 683
667 // TextInputClient is not focused yet here. 684 // TextInputClient is not focused yet here.
668 685 fabricated_char = new_char;
669 EXPECT_TRUE(input_method->DispatchKeyEvent(fabricated_char)); 686 input_method->DispatchKeyEvent(&fabricated_char);
687 EXPECT_TRUE(fabricated_char.handled());
670 EXPECT_TRUE(mock_text_input_client.inserted_text().empty()); 688 EXPECT_TRUE(mock_text_input_client.inserted_text().empty());
671 EXPECT_TRUE(delegate_.fabricated_key_events().empty()); 689 EXPECT_TRUE(delegate_.fabricated_key_events().empty());
672 delegate_.Reset(); 690 delegate_.Reset();
673 mock_text_input_client.Reset(); 691 mock_text_input_client.Reset();
674 692
675 input_method->SetFocusedTextInputClient(&mock_text_input_client); 693 input_method->SetFocusedTextInputClient(&mock_text_input_client);
676 694
677 // TextInputClient is now focused here. 695 // TextInputClient is now focused here.
678 696 fabricated_char = new_char;
679 EXPECT_TRUE(input_method->DispatchKeyEvent(fabricated_char)); 697 input_method->DispatchKeyEvent(&fabricated_char);
698 EXPECT_TRUE(fabricated_char.handled());
680 EXPECT_EQ(L"A", mock_text_input_client.inserted_text()); 699 EXPECT_EQ(L"A", mock_text_input_client.inserted_text());
681 EXPECT_TRUE(delegate_.fabricated_key_events().empty()); 700 EXPECT_TRUE(delegate_.fabricated_key_events().empty());
682 delegate_.Reset(); 701 delegate_.Reset();
683 mock_text_input_client.Reset(); 702 mock_text_input_client.Reset();
684 } 703 }
685 704
686 TEST(RemoteInputMethodWinTest, OnCompositionChanged) { 705 TEST(RemoteInputMethodWinTest, OnCompositionChanged) {
687 MockInputMethodDelegate delegate_; 706 MockInputMethodDelegate delegate_;
688 MockTextInputClient mock_text_input_client; 707 MockTextInputClient mock_text_input_client;
689 scoped_ptr<InputMethod> input_method(CreateRemoteInputMethodWin(&delegate_)); 708 scoped_ptr<InputMethod> input_method(CreateRemoteInputMethodWin(&delegate_));
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
802 scoped_ptr<InputMethod> input_method(CreateRemoteInputMethodWin(&delegate_)); 821 scoped_ptr<InputMethod> input_method(CreateRemoteInputMethodWin(&delegate_));
803 input_method->AddObserver(&input_method_observer); 822 input_method->AddObserver(&input_method_observer);
804 823
805 EXPECT_EQ(0u, input_method_observer.on_input_method_destroyed_changed()); 824 EXPECT_EQ(0u, input_method_observer.on_input_method_destroyed_changed());
806 input_method.reset(); 825 input_method.reset();
807 EXPECT_EQ(1u, input_method_observer.on_input_method_destroyed_changed()); 826 EXPECT_EQ(1u, input_method_observer.on_input_method_destroyed_changed());
808 } 827 }
809 828
810 } // namespace 829 } // namespace
811 } // namespace ui 830 } // namespace ui
OLDNEW
« no previous file with comments | « ui/base/ime/remote_input_method_win.cc ('k') | ui/keyboard/keyboard_util.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698