OLD | NEW |
1 // Copyright (c) 2012 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 <X11/Xlib.h> | 5 #include <X11/Xlib.h> |
6 #undef Bool | 6 #undef Bool |
7 #undef FocusIn | 7 #undef FocusIn |
8 #undef FocusOut | 8 #undef FocusOut |
9 #undef None | 9 #undef None |
10 | 10 |
11 #include <cstring> | 11 #include <cstring> |
12 | 12 |
13 #include "base/i18n/char_iterator.h" | 13 #include "base/i18n/char_iterator.h" |
14 #include "base/memory/scoped_ptr.h" | 14 #include "base/memory/scoped_ptr.h" |
15 #include "base/strings/utf_string_conversions.h" | 15 #include "base/strings/utf_string_conversions.h" |
16 #include "chromeos/dbus/dbus_thread_manager.h" | 16 #include "chromeos/dbus/dbus_thread_manager.h" |
17 #include "chromeos/dbus/ibus/ibus_text.h" | 17 #include "chromeos/dbus/ibus/ibus_text.h" |
18 #include "chromeos/dbus/ibus/mock_ibus_client.h" | 18 #include "chromeos/dbus/ibus/mock_ibus_client.h" |
19 #include "chromeos/ime/ibus_bridge.h" | 19 #include "chromeos/ime/ibus_bridge.h" |
| 20 #include "chromeos/ime/ibus_keymap.h" |
20 #include "chromeos/ime/mock_ime_candidate_window_handler.h" | 21 #include "chromeos/ime/mock_ime_candidate_window_handler.h" |
21 #include "chromeos/ime/mock_ime_engine_handler.h" | 22 #include "chromeos/ime/mock_ime_engine_handler.h" |
22 #include "testing/gtest/include/gtest/gtest.h" | 23 #include "testing/gtest/include/gtest/gtest.h" |
23 #include "ui/base/ime/input_method_delegate.h" | 24 #include "ui/base/ime/input_method_delegate.h" |
24 #include "ui/base/ime/input_method_ibus.h" | 25 #include "ui/base/ime/input_method_ibus.h" |
25 #include "ui/base/ime/text_input_client.h" | 26 #include "ui/base/ime/text_input_client.h" |
| 27 #include "ui/events/event.h" |
| 28 #include "ui/events/x/events_x_utils.h" |
26 #include "ui/gfx/rect.h" | 29 #include "ui/gfx/rect.h" |
27 | 30 |
28 namespace ui { | 31 namespace ui { |
29 namespace { | 32 namespace { |
30 const uint32 kTestIBusKeyVal1 = 97; | |
31 const uint32 kTestIBusKeyVal2 = 30; | |
32 const uint32 kTestIBusKeyCode1 = 98; | |
33 const uint32 kTestIBusKeyCode2 = 48; | |
34 const uint32 kTestIBusState1 = 99; | |
35 const uint32 kTestIBusState2 = 46; | |
36 | |
37 typedef chromeos::IBusEngineHandlerInterface::KeyEventDoneCallback | 33 typedef chromeos::IBusEngineHandlerInterface::KeyEventDoneCallback |
38 KeyEventCallback; | 34 KeyEventCallback; |
39 | 35 |
40 uint32 GetOffsetInUTF16(const std::string& utf8_string, uint32 utf8_offset) { | 36 uint32 GetOffsetInUTF16(const std::string& utf8_string, uint32 utf8_offset) { |
41 string16 utf16_string = UTF8ToUTF16(utf8_string); | 37 string16 utf16_string = UTF8ToUTF16(utf8_string); |
42 DCHECK_LT(utf8_offset, utf16_string.size()); | 38 DCHECK_LT(utf8_offset, utf16_string.size()); |
43 base::i18n::UTF16CharIterator char_iterator(&utf16_string); | 39 base::i18n::UTF16CharIterator char_iterator(&utf16_string); |
44 for (size_t i = 0; i < utf8_offset; ++i) | 40 for (size_t i = 0; i < utf8_offset; ++i) |
45 char_iterator.Advance(); | 41 char_iterator.Advance(); |
46 return char_iterator.array_pos(); | 42 return char_iterator.array_pos(); |
(...skipping 16 matching lines...) Expand all Loading... |
63 | 59 |
64 | 60 |
65 class TestableInputMethodIBus : public InputMethodIBus { | 61 class TestableInputMethodIBus : public InputMethodIBus { |
66 public: | 62 public: |
67 explicit TestableInputMethodIBus(internal::InputMethodDelegate* delegate) | 63 explicit TestableInputMethodIBus(internal::InputMethodDelegate* delegate) |
68 : InputMethodIBus(delegate), | 64 : InputMethodIBus(delegate), |
69 process_key_event_post_ime_call_count_(0) { | 65 process_key_event_post_ime_call_count_(0) { |
70 } | 66 } |
71 | 67 |
72 struct ProcessKeyEventPostIMEArgs { | 68 struct ProcessKeyEventPostIMEArgs { |
73 ProcessKeyEventPostIMEArgs() : handled(false) { | 69 ProcessKeyEventPostIMEArgs() : event(NULL), handled(false) {} |
74 std::memset(&event, 0, sizeof(XEvent)); | 70 const ui::KeyEvent* event; |
75 } | |
76 XEvent event; | |
77 bool handled; | 71 bool handled; |
78 }; | 72 }; |
79 | 73 |
80 struct IBusKeyEventFromNativeKeyEventResult { | |
81 IBusKeyEventFromNativeKeyEventResult() : keyval(0), keycode(0), state(0) {} | |
82 uint32 keyval; | |
83 uint32 keycode; | |
84 uint32 state; | |
85 }; | |
86 | |
87 // InputMethodIBus override. | 74 // InputMethodIBus override. |
88 virtual void ProcessKeyEventPostIME(const base::NativeEvent& native_key_event, | 75 virtual void ProcessKeyEventPostIME(const ui::KeyEvent& key_event, |
89 uint32 ibus_state, | |
90 bool handled) OVERRIDE { | 76 bool handled) OVERRIDE { |
91 process_key_event_post_ime_args_.event = *native_key_event; | 77 process_key_event_post_ime_args_.event = &key_event; |
92 process_key_event_post_ime_args_.handled = handled; | 78 process_key_event_post_ime_args_.handled = handled; |
93 ++process_key_event_post_ime_call_count_; | 79 ++process_key_event_post_ime_call_count_; |
94 } | 80 } |
95 | 81 |
96 // We can't call X11 related function without display in unit test, so | |
97 // override with mock function. | |
98 virtual void IBusKeyEventFromNativeKeyEvent( | |
99 const base::NativeEvent& native_event, | |
100 uint32* ibus_keyval, | |
101 uint32* ibus_keycode, | |
102 uint32* ibus_state) OVERRIDE { | |
103 EXPECT_TRUE(native_event); | |
104 EXPECT_TRUE(ibus_keyval); | |
105 EXPECT_TRUE(ibus_keycode); | |
106 EXPECT_TRUE(ibus_state); | |
107 *ibus_keyval = ibus_key_event_from_native_key_event_result_.keyval; | |
108 *ibus_keycode = ibus_key_event_from_native_key_event_result_.keycode; | |
109 *ibus_state = ibus_key_event_from_native_key_event_result_.state; | |
110 } | |
111 | |
112 void ResetCallCount() { | 82 void ResetCallCount() { |
113 process_key_event_post_ime_call_count_ = 0; | 83 process_key_event_post_ime_call_count_ = 0; |
114 } | 84 } |
115 | 85 |
116 const ProcessKeyEventPostIMEArgs& process_key_event_post_ime_args() const { | 86 const ProcessKeyEventPostIMEArgs& process_key_event_post_ime_args() const { |
117 return process_key_event_post_ime_args_; | 87 return process_key_event_post_ime_args_; |
118 } | 88 } |
119 | 89 |
120 int process_key_event_post_ime_call_count() const { | 90 int process_key_event_post_ime_call_count() const { |
121 return process_key_event_post_ime_call_count_; | 91 return process_key_event_post_ime_call_count_; |
122 } | 92 } |
123 | 93 |
124 IBusKeyEventFromNativeKeyEventResult* | |
125 mutable_ibus_key_event_from_native_key_event_result() { | |
126 return &ibus_key_event_from_native_key_event_result_; | |
127 } | |
128 | |
129 // Change access rights for testing. | 94 // Change access rights for testing. |
130 using InputMethodIBus::ExtractCompositionText; | 95 using InputMethodIBus::ExtractCompositionText; |
131 using InputMethodIBus::ResetContext; | 96 using InputMethodIBus::ResetContext; |
132 | 97 |
133 private: | 98 private: |
134 ProcessKeyEventPostIMEArgs process_key_event_post_ime_args_; | 99 ProcessKeyEventPostIMEArgs process_key_event_post_ime_args_; |
135 int process_key_event_post_ime_call_count_; | 100 int process_key_event_post_ime_call_count_; |
136 | |
137 IBusKeyEventFromNativeKeyEventResult | |
138 ibus_key_event_from_native_key_event_result_; | |
139 }; | 101 }; |
140 | 102 |
141 class CreateInputContextSuccessHandler { | 103 class CreateInputContextSuccessHandler { |
142 public: | 104 public: |
143 explicit CreateInputContextSuccessHandler(const dbus::ObjectPath& object_path) | 105 explicit CreateInputContextSuccessHandler(const dbus::ObjectPath& object_path) |
144 : object_path_(object_path) { | 106 : object_path_(object_path) { |
145 } | 107 } |
146 | 108 |
147 void Run(const std::string& client_name, | 109 void Run(const std::string& client_name, |
148 const chromeos::IBusClient::CreateInputContextCallback& callback) { | 110 const chromeos::IBusClient::CreateInputContextCallback& callback) { |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
314 ime_->SetFocusedTextInputClient(NULL); | 276 ime_->SetFocusedTextInputClient(NULL); |
315 ime_.reset(); | 277 ime_.reset(); |
316 chromeos::IBusBridge::Get()->SetEngineHandler(NULL); | 278 chromeos::IBusBridge::Get()->SetEngineHandler(NULL); |
317 chromeos::IBusBridge::Get()->SetCandidateWindowHandler(NULL); | 279 chromeos::IBusBridge::Get()->SetCandidateWindowHandler(NULL); |
318 mock_ime_engine_handler_.reset(); | 280 mock_ime_engine_handler_.reset(); |
319 mock_ime_candidate_window_handler_.reset(); | 281 mock_ime_candidate_window_handler_.reset(); |
320 chromeos::IBusBridge::Shutdown(); | 282 chromeos::IBusBridge::Shutdown(); |
321 } | 283 } |
322 | 284 |
323 // ui::internal::InputMethodDelegate overrides: | 285 // ui::internal::InputMethodDelegate overrides: |
324 virtual bool DispatchKeyEventPostIME( | 286 virtual bool DispatchKeyEventPostIME(const ui::KeyEvent& key_event) OVERRIDE { |
325 const base::NativeEvent& native_key_event) OVERRIDE { | 287 dispatched_native_event_ = key_event.native_event(); |
326 dispatched_native_event_ = native_key_event; | |
327 return false; | 288 return false; |
328 } | 289 } |
329 virtual bool DispatchFabricatedKeyEventPostIME(ui::EventType type, | 290 virtual bool DispatchFabricatedKeyEventPostIME(ui::EventType type, |
330 ui::KeyboardCode key_code, | 291 ui::KeyboardCode key_code, |
331 int flags) OVERRIDE { | 292 int flags) OVERRIDE { |
332 dispatched_fabricated_event_type_ = type; | 293 dispatched_fabricated_event_type_ = type; |
333 dispatched_fabricated_event_key_code_ = key_code; | 294 dispatched_fabricated_event_key_code_ = key_code; |
334 dispatched_fabricated_event_flags_ = flags; | 295 dispatched_fabricated_event_flags_ = flags; |
335 return false; | 296 return false; |
336 } | 297 } |
(...skipping 646 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
983 | 944 |
984 virtual void SetUp() OVERRIDE { | 945 virtual void SetUp() OVERRIDE { |
985 InputMethodIBusTest::SetUp(); | 946 InputMethodIBusTest::SetUp(); |
986 ime_->Init(true); | 947 ime_->Init(true); |
987 } | 948 } |
988 | 949 |
989 DISALLOW_COPY_AND_ASSIGN(InputMethodIBusKeyEventTest); | 950 DISALLOW_COPY_AND_ASSIGN(InputMethodIBusKeyEventTest); |
990 }; | 951 }; |
991 | 952 |
992 TEST_F(InputMethodIBusKeyEventTest, KeyEventDelayResponseTest) { | 953 TEST_F(InputMethodIBusKeyEventTest, KeyEventDelayResponseTest) { |
993 XEvent event = {}; | 954 XEvent xevent; |
994 event.xkey.type = KeyPress; | 955 ui::InitXKeyEventForTesting(ui::ET_KEY_PRESSED, |
995 | 956 ui::VKEY_A, |
996 // Set up IBusKeyEventFromNativeKeyEvent result. | 957 ui::EF_SHIFT_DOWN, |
997 ime_->mutable_ibus_key_event_from_native_key_event_result()->keyval | 958 &xevent); |
998 = kTestIBusKeyVal1; | 959 const ui::KeyEvent event(&xevent, true); |
999 ime_->mutable_ibus_key_event_from_native_key_event_result()->keycode | |
1000 = kTestIBusKeyCode1; | |
1001 ime_->mutable_ibus_key_event_from_native_key_event_result()->state | |
1002 = kTestIBusState1; | |
1003 | 960 |
1004 // Do key event. | 961 // Do key event. |
1005 input_type_ = TEXT_INPUT_TYPE_TEXT; | 962 input_type_ = TEXT_INPUT_TYPE_TEXT; |
1006 ime_->OnTextInputTypeChanged(this); | 963 ime_->OnTextInputTypeChanged(this); |
1007 ime_->DispatchKeyEvent(&event); | 964 ime_->DispatchKeyEvent(event); |
1008 | 965 |
1009 // Check before state. | 966 // Check before state. |
1010 EXPECT_EQ(1, | 967 EXPECT_EQ(1, mock_ime_engine_handler_->process_key_event_call_count()); |
1011 mock_ime_engine_handler_->process_key_event_call_count()); | 968 EXPECT_EQ("A", mock_ime_engine_handler_->last_processed_keysym()); |
1012 EXPECT_EQ(kTestIBusKeyVal1, | 969 EXPECT_EQ("KeyA", mock_ime_engine_handler_->last_processed_keycode()); |
1013 mock_ime_engine_handler_->last_processed_keysym()); | 970 EXPECT_TRUE(mock_ime_engine_handler_->last_processed_is_key_down()); |
1014 EXPECT_EQ(kTestIBusKeyCode1, | 971 EXPECT_FALSE(mock_ime_engine_handler_->last_processed_is_alt_down()); |
1015 mock_ime_engine_handler_->last_processed_keycode()); | 972 EXPECT_FALSE(mock_ime_engine_handler_->last_processed_is_ctrl_down()); |
1016 EXPECT_EQ(kTestIBusState1, | 973 EXPECT_TRUE(mock_ime_engine_handler_->last_processed_is_shift_down()); |
1017 mock_ime_engine_handler_->last_processed_state()); | 974 EXPECT_FALSE(mock_ime_engine_handler_->last_processed_is_caps_lock_down()); |
1018 EXPECT_EQ(0, ime_->process_key_event_post_ime_call_count()); | 975 EXPECT_EQ(0, ime_->process_key_event_post_ime_call_count()); |
1019 | 976 |
1020 // Do callback. | 977 // Do callback. |
1021 mock_ime_engine_handler_->last_passed_callback().Run(true); | 978 mock_ime_engine_handler_->last_passed_callback().Run(true); |
1022 | 979 |
1023 // Check the results | 980 // Check the results |
1024 EXPECT_EQ(1, ime_->process_key_event_post_ime_call_count()); | 981 EXPECT_EQ(1, ime_->process_key_event_post_ime_call_count()); |
1025 EXPECT_TRUE(IsEqualXKeyEvent(event, | 982 const ui::KeyEvent* stored_event = |
1026 ime_->process_key_event_post_ime_args().event)); | 983 ime_->process_key_event_post_ime_args().event; |
| 984 EXPECT_TRUE(stored_event->HasNativeEvent()); |
| 985 EXPECT_TRUE(IsEqualXKeyEvent(xevent, *(stored_event->native_event()))); |
1027 EXPECT_TRUE(ime_->process_key_event_post_ime_args().handled); | 986 EXPECT_TRUE(ime_->process_key_event_post_ime_args().handled); |
1028 } | 987 } |
1029 | 988 |
1030 TEST_F(InputMethodIBusKeyEventTest, MultiKeyEventDelayResponseTest) { | 989 TEST_F(InputMethodIBusKeyEventTest, MultiKeyEventDelayResponseTest) { |
1031 // Preparation | 990 // Preparation |
1032 input_type_ = TEXT_INPUT_TYPE_TEXT; | 991 input_type_ = TEXT_INPUT_TYPE_TEXT; |
1033 ime_->OnTextInputTypeChanged(this); | 992 ime_->OnTextInputTypeChanged(this); |
1034 | 993 |
1035 XEvent event = {}; | 994 XEvent xevent; |
1036 event.xkey.type = KeyPress; | 995 ui::InitXKeyEventForTesting(ui::ET_KEY_PRESSED, |
1037 | 996 ui::VKEY_B, |
1038 // Set up IBusKeyEventFromNativeKeyEvent result for first key event. | 997 ui::EF_ALT_DOWN, |
1039 ime_->mutable_ibus_key_event_from_native_key_event_result()->keyval | 998 &xevent); |
1040 = kTestIBusKeyVal1; | 999 const ui::KeyEvent event(&xevent, true); |
1041 ime_->mutable_ibus_key_event_from_native_key_event_result()->keycode | |
1042 = kTestIBusKeyCode1; | |
1043 ime_->mutable_ibus_key_event_from_native_key_event_result()->state | |
1044 = kTestIBusState1; | |
1045 | 1000 |
1046 // Do key event. | 1001 // Do key event. |
1047 ime_->DispatchKeyEvent(&event); | 1002 ime_->DispatchKeyEvent(event); |
1048 EXPECT_EQ(kTestIBusKeyVal1, | 1003 EXPECT_EQ("b", mock_ime_engine_handler_->last_processed_keysym()); |
1049 mock_ime_engine_handler_->last_processed_keysym()); | 1004 EXPECT_EQ("KeyB", mock_ime_engine_handler_->last_processed_keycode()); |
1050 EXPECT_EQ(kTestIBusKeyCode1, | 1005 EXPECT_TRUE(mock_ime_engine_handler_->last_processed_is_key_down()); |
1051 mock_ime_engine_handler_->last_processed_keycode()); | 1006 EXPECT_TRUE(mock_ime_engine_handler_->last_processed_is_alt_down()); |
1052 EXPECT_EQ(kTestIBusState1, | 1007 EXPECT_FALSE(mock_ime_engine_handler_->last_processed_is_ctrl_down()); |
1053 mock_ime_engine_handler_->last_processed_state()); | 1008 EXPECT_FALSE(mock_ime_engine_handler_->last_processed_is_shift_down()); |
| 1009 EXPECT_FALSE(mock_ime_engine_handler_->last_processed_is_caps_lock_down()); |
1054 | 1010 |
1055 KeyEventCallback first_callback = | 1011 KeyEventCallback first_callback = |
1056 mock_ime_engine_handler_->last_passed_callback(); | 1012 mock_ime_engine_handler_->last_passed_callback(); |
1057 | 1013 |
1058 // Set up IBusKeyEventFromNativeKeyEvent result for second key event. | 1014 // Do key event again. |
1059 ime_->mutable_ibus_key_event_from_native_key_event_result()->keyval | 1015 XEvent xevent2; |
1060 = kTestIBusKeyVal2; | 1016 ui::InitXKeyEventForTesting(ui::ET_KEY_RELEASED, |
1061 ime_->mutable_ibus_key_event_from_native_key_event_result()->keycode | 1017 ui::VKEY_B, |
1062 = kTestIBusKeyCode2; | 1018 ui::EF_ALT_DOWN, |
1063 ime_->mutable_ibus_key_event_from_native_key_event_result()->state | 1019 &xevent2); |
1064 = kTestIBusState2; | 1020 const ui::KeyEvent event2(&xevent2, true); |
1065 | 1021 |
1066 // Do key event again. | 1022 ime_->DispatchKeyEvent(event2); |
1067 ime_->DispatchKeyEvent(&event); | 1023 EXPECT_EQ("b", mock_ime_engine_handler_->last_processed_keysym()); |
1068 EXPECT_EQ(kTestIBusKeyVal2, | 1024 EXPECT_EQ("KeyB", mock_ime_engine_handler_->last_processed_keycode()); |
1069 mock_ime_engine_handler_->last_processed_keysym()); | 1025 EXPECT_FALSE(mock_ime_engine_handler_->last_processed_is_key_down()); |
1070 EXPECT_EQ(kTestIBusKeyCode2, | 1026 EXPECT_TRUE(mock_ime_engine_handler_->last_processed_is_alt_down()); |
1071 mock_ime_engine_handler_->last_processed_keycode()); | 1027 EXPECT_FALSE(mock_ime_engine_handler_->last_processed_is_ctrl_down()); |
1072 EXPECT_EQ(kTestIBusState2, | 1028 EXPECT_FALSE(mock_ime_engine_handler_->last_processed_is_shift_down()); |
1073 mock_ime_engine_handler_->last_processed_state()); | 1029 EXPECT_FALSE(mock_ime_engine_handler_->last_processed_is_caps_lock_down()); |
1074 | 1030 |
1075 // Check before state. | 1031 // Check before state. |
1076 EXPECT_EQ(2, | 1032 EXPECT_EQ(2, mock_ime_engine_handler_->process_key_event_call_count()); |
1077 mock_ime_engine_handler_->process_key_event_call_count()); | |
1078 EXPECT_EQ(0, ime_->process_key_event_post_ime_call_count()); | 1033 EXPECT_EQ(0, ime_->process_key_event_post_ime_call_count()); |
1079 | 1034 |
1080 // Do callback for first key event. | 1035 // Do callback for first key event. |
1081 first_callback.Run(true); | 1036 first_callback.Run(true); |
1082 | 1037 |
1083 // Check the results for first key event. | 1038 // Check the results for first key event. |
1084 EXPECT_EQ(1, ime_->process_key_event_post_ime_call_count()); | 1039 EXPECT_EQ(1, ime_->process_key_event_post_ime_call_count()); |
1085 EXPECT_TRUE(IsEqualXKeyEvent(event, | 1040 const ui::KeyEvent* stored_event = |
1086 ime_->process_key_event_post_ime_args().event)); | 1041 ime_->process_key_event_post_ime_args().event; |
| 1042 EXPECT_TRUE(stored_event->HasNativeEvent()); |
| 1043 EXPECT_TRUE(IsEqualXKeyEvent(xevent, *(stored_event->native_event()))); |
1087 EXPECT_TRUE(ime_->process_key_event_post_ime_args().handled); | 1044 EXPECT_TRUE(ime_->process_key_event_post_ime_args().handled); |
1088 | 1045 |
1089 // Do callback for second key event. | 1046 // Do callback for second key event. |
1090 mock_ime_engine_handler_->last_passed_callback().Run(false); | 1047 mock_ime_engine_handler_->last_passed_callback().Run(false); |
1091 | 1048 |
1092 // Check the results for second key event. | 1049 // Check the results for second key event. |
1093 EXPECT_EQ(2, ime_->process_key_event_post_ime_call_count()); | 1050 EXPECT_EQ(2, ime_->process_key_event_post_ime_call_count()); |
1094 EXPECT_TRUE(IsEqualXKeyEvent(event, | 1051 stored_event = ime_->process_key_event_post_ime_args().event; |
1095 ime_->process_key_event_post_ime_args().event)); | 1052 EXPECT_TRUE(stored_event->HasNativeEvent()); |
| 1053 EXPECT_TRUE(IsEqualXKeyEvent(xevent2, *(stored_event->native_event()))); |
1096 EXPECT_FALSE(ime_->process_key_event_post_ime_args().handled); | 1054 EXPECT_FALSE(ime_->process_key_event_post_ime_args().handled); |
1097 } | 1055 } |
1098 | 1056 |
1099 TEST_F(InputMethodIBusKeyEventTest, KeyEventDelayResponseResetTest) { | 1057 TEST_F(InputMethodIBusKeyEventTest, KeyEventDelayResponseResetTest) { |
1100 XEvent event = {}; | 1058 XEvent xevent; |
1101 event.xkey.type = KeyPress; | 1059 ui::InitXKeyEventForTesting(ui::ET_KEY_PRESSED, |
1102 | 1060 ui::VKEY_A, |
1103 // Set up IBusKeyEventFromNativeKeyEvent result. | 1061 ui::EF_NONE, |
1104 ime_->mutable_ibus_key_event_from_native_key_event_result()->keyval | 1062 &xevent); |
1105 = kTestIBusKeyVal1; | 1063 const ui::KeyEvent event(&xevent, true); |
1106 ime_->mutable_ibus_key_event_from_native_key_event_result()->keycode | |
1107 = kTestIBusKeyCode1; | |
1108 ime_->mutable_ibus_key_event_from_native_key_event_result()->state | |
1109 = kTestIBusState1; | |
1110 | 1064 |
1111 // Do key event. | 1065 // Do key event. |
1112 input_type_ = TEXT_INPUT_TYPE_TEXT; | 1066 input_type_ = TEXT_INPUT_TYPE_TEXT; |
1113 ime_->OnTextInputTypeChanged(this); | 1067 ime_->OnTextInputTypeChanged(this); |
1114 ime_->DispatchKeyEvent(&event); | 1068 ime_->DispatchKeyEvent(event); |
1115 | 1069 |
1116 // Check before state. | 1070 // Check before state. |
1117 EXPECT_EQ(1, | 1071 EXPECT_EQ(1, mock_ime_engine_handler_->process_key_event_call_count()); |
1118 mock_ime_engine_handler_->process_key_event_call_count()); | |
1119 EXPECT_EQ(0, ime_->process_key_event_post_ime_call_count()); | 1072 EXPECT_EQ(0, ime_->process_key_event_post_ime_call_count()); |
1120 | 1073 |
1121 ime_->ResetContext(); | 1074 ime_->ResetContext(); |
1122 | 1075 |
1123 // Do callback. | 1076 // Do callback. |
1124 mock_ime_engine_handler_->last_passed_callback().Run(true); | 1077 mock_ime_engine_handler_->last_passed_callback().Run(true); |
1125 | 1078 |
1126 EXPECT_EQ(0, ime_->process_key_event_post_ime_call_count()); | 1079 EXPECT_EQ(0, ime_->process_key_event_post_ime_call_count()); |
1127 } | 1080 } |
1128 | |
1129 // TODO(nona): Introduce ProcessKeyEventPostIME tests(crbug.com/156593). | 1081 // TODO(nona): Introduce ProcessKeyEventPostIME tests(crbug.com/156593). |
1130 | 1082 |
1131 } // namespace ui | 1083 } // namespace ui |
OLD | NEW |