| Index: ui/base/ime/input_method_ibus_unittest.cc
|
| diff --git a/ui/base/ime/input_method_ibus_unittest.cc b/ui/base/ime/input_method_ibus_unittest.cc
|
| index 5de25579ba1a4cbab0e9e899215c91de51b91c7c..471dd616996bb19d6ead58ff515d3ac2e807a46f 100644
|
| --- a/ui/base/ime/input_method_ibus_unittest.cc
|
| +++ b/ui/base/ime/input_method_ibus_unittest.cc
|
| @@ -17,23 +17,19 @@
|
| #include "chromeos/dbus/ibus/ibus_text.h"
|
| #include "chromeos/dbus/ibus/mock_ibus_client.h"
|
| #include "chromeos/ime/ibus_bridge.h"
|
| +#include "chromeos/ime/ibus_keymap.h"
|
| #include "chromeos/ime/mock_ime_candidate_window_handler.h"
|
| #include "chromeos/ime/mock_ime_engine_handler.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "ui/base/ime/input_method_delegate.h"
|
| #include "ui/base/ime/input_method_ibus.h"
|
| #include "ui/base/ime/text_input_client.h"
|
| +#include "ui/events/event.h"
|
| +#include "ui/events/x/events_x_utils.h"
|
| #include "ui/gfx/rect.h"
|
|
|
| namespace ui {
|
| namespace {
|
| -const uint32 kTestIBusKeyVal1 = 97;
|
| -const uint32 kTestIBusKeyVal2 = 30;
|
| -const uint32 kTestIBusKeyCode1 = 98;
|
| -const uint32 kTestIBusKeyCode2 = 48;
|
| -const uint32 kTestIBusState1 = 99;
|
| -const uint32 kTestIBusState2 = 46;
|
| -
|
| typedef chromeos::IBusEngineHandlerInterface::KeyEventDoneCallback
|
| KeyEventCallback;
|
|
|
| @@ -70,45 +66,19 @@ class TestableInputMethodIBus : public InputMethodIBus {
|
| }
|
|
|
| struct ProcessKeyEventPostIMEArgs {
|
| - ProcessKeyEventPostIMEArgs() : handled(false) {
|
| - std::memset(&event, 0, sizeof(XEvent));
|
| - }
|
| - XEvent event;
|
| + ProcessKeyEventPostIMEArgs() : event(NULL), handled(false) {}
|
| + const ui::KeyEvent* event;
|
| bool handled;
|
| };
|
|
|
| - struct IBusKeyEventFromNativeKeyEventResult {
|
| - IBusKeyEventFromNativeKeyEventResult() : keyval(0), keycode(0), state(0) {}
|
| - uint32 keyval;
|
| - uint32 keycode;
|
| - uint32 state;
|
| - };
|
| -
|
| // InputMethodIBus override.
|
| - virtual void ProcessKeyEventPostIME(const base::NativeEvent& native_key_event,
|
| - uint32 ibus_state,
|
| + virtual void ProcessKeyEventPostIME(const ui::KeyEvent& key_event,
|
| bool handled) OVERRIDE {
|
| - process_key_event_post_ime_args_.event = *native_key_event;
|
| + process_key_event_post_ime_args_.event = &key_event;
|
| process_key_event_post_ime_args_.handled = handled;
|
| ++process_key_event_post_ime_call_count_;
|
| }
|
|
|
| - // We can't call X11 related function without display in unit test, so
|
| - // override with mock function.
|
| - virtual void IBusKeyEventFromNativeKeyEvent(
|
| - const base::NativeEvent& native_event,
|
| - uint32* ibus_keyval,
|
| - uint32* ibus_keycode,
|
| - uint32* ibus_state) OVERRIDE {
|
| - EXPECT_TRUE(native_event);
|
| - EXPECT_TRUE(ibus_keyval);
|
| - EXPECT_TRUE(ibus_keycode);
|
| - EXPECT_TRUE(ibus_state);
|
| - *ibus_keyval = ibus_key_event_from_native_key_event_result_.keyval;
|
| - *ibus_keycode = ibus_key_event_from_native_key_event_result_.keycode;
|
| - *ibus_state = ibus_key_event_from_native_key_event_result_.state;
|
| - }
|
| -
|
| void ResetCallCount() {
|
| process_key_event_post_ime_call_count_ = 0;
|
| }
|
| @@ -121,11 +91,6 @@ class TestableInputMethodIBus : public InputMethodIBus {
|
| return process_key_event_post_ime_call_count_;
|
| }
|
|
|
| - IBusKeyEventFromNativeKeyEventResult*
|
| - mutable_ibus_key_event_from_native_key_event_result() {
|
| - return &ibus_key_event_from_native_key_event_result_;
|
| - }
|
| -
|
| // Change access rights for testing.
|
| using InputMethodIBus::ExtractCompositionText;
|
| using InputMethodIBus::ResetContext;
|
| @@ -133,9 +98,6 @@ class TestableInputMethodIBus : public InputMethodIBus {
|
| private:
|
| ProcessKeyEventPostIMEArgs process_key_event_post_ime_args_;
|
| int process_key_event_post_ime_call_count_;
|
| -
|
| - IBusKeyEventFromNativeKeyEventResult
|
| - ibus_key_event_from_native_key_event_result_;
|
| };
|
|
|
| class CreateInputContextSuccessHandler {
|
| @@ -321,9 +283,8 @@ class InputMethodIBusTest : public internal::InputMethodDelegate,
|
| }
|
|
|
| // ui::internal::InputMethodDelegate overrides:
|
| - virtual bool DispatchKeyEventPostIME(
|
| - const base::NativeEvent& native_key_event) OVERRIDE {
|
| - dispatched_native_event_ = native_key_event;
|
| + virtual bool DispatchKeyEventPostIME(const ui::KeyEvent& key_event) OVERRIDE {
|
| + dispatched_native_event_ = key_event.native_event();
|
| return false;
|
| }
|
| virtual bool DispatchFabricatedKeyEventPostIME(ui::EventType type,
|
| @@ -990,31 +951,27 @@ class InputMethodIBusKeyEventTest : public InputMethodIBusTest {
|
| };
|
|
|
| TEST_F(InputMethodIBusKeyEventTest, KeyEventDelayResponseTest) {
|
| - XEvent event = {};
|
| - event.xkey.type = KeyPress;
|
| -
|
| - // Set up IBusKeyEventFromNativeKeyEvent result.
|
| - ime_->mutable_ibus_key_event_from_native_key_event_result()->keyval
|
| - = kTestIBusKeyVal1;
|
| - ime_->mutable_ibus_key_event_from_native_key_event_result()->keycode
|
| - = kTestIBusKeyCode1;
|
| - ime_->mutable_ibus_key_event_from_native_key_event_result()->state
|
| - = kTestIBusState1;
|
| + XEvent xevent;
|
| + ui::InitXKeyEventForTesting(ui::ET_KEY_PRESSED,
|
| + ui::VKEY_A,
|
| + ui::EF_SHIFT_DOWN,
|
| + &xevent);
|
| + const ui::KeyEvent event(&xevent, true);
|
|
|
| // Do key event.
|
| input_type_ = TEXT_INPUT_TYPE_TEXT;
|
| ime_->OnTextInputTypeChanged(this);
|
| - ime_->DispatchKeyEvent(&event);
|
| + ime_->DispatchKeyEvent(event);
|
|
|
| // Check before state.
|
| - EXPECT_EQ(1,
|
| - mock_ime_engine_handler_->process_key_event_call_count());
|
| - EXPECT_EQ(kTestIBusKeyVal1,
|
| - mock_ime_engine_handler_->last_processed_keysym());
|
| - EXPECT_EQ(kTestIBusKeyCode1,
|
| - mock_ime_engine_handler_->last_processed_keycode());
|
| - EXPECT_EQ(kTestIBusState1,
|
| - mock_ime_engine_handler_->last_processed_state());
|
| + EXPECT_EQ(1, mock_ime_engine_handler_->process_key_event_call_count());
|
| + EXPECT_EQ("A", mock_ime_engine_handler_->last_processed_keysym());
|
| + EXPECT_EQ("KeyA", mock_ime_engine_handler_->last_processed_keycode());
|
| + EXPECT_TRUE(mock_ime_engine_handler_->last_processed_is_key_down());
|
| + EXPECT_FALSE(mock_ime_engine_handler_->last_processed_is_alt_down());
|
| + EXPECT_FALSE(mock_ime_engine_handler_->last_processed_is_ctrl_down());
|
| + EXPECT_TRUE(mock_ime_engine_handler_->last_processed_is_shift_down());
|
| + EXPECT_FALSE(mock_ime_engine_handler_->last_processed_is_caps_lock_down());
|
| EXPECT_EQ(0, ime_->process_key_event_post_ime_call_count());
|
|
|
| // Do callback.
|
| @@ -1022,8 +979,10 @@ TEST_F(InputMethodIBusKeyEventTest, KeyEventDelayResponseTest) {
|
|
|
| // Check the results
|
| EXPECT_EQ(1, ime_->process_key_event_post_ime_call_count());
|
| - EXPECT_TRUE(IsEqualXKeyEvent(event,
|
| - ime_->process_key_event_post_ime_args().event));
|
| + const ui::KeyEvent* stored_event =
|
| + ime_->process_key_event_post_ime_args().event;
|
| + EXPECT_TRUE(stored_event->HasNativeEvent());
|
| + EXPECT_TRUE(IsEqualXKeyEvent(xevent, *(stored_event->native_event())));
|
| EXPECT_TRUE(ime_->process_key_event_post_ime_args().handled);
|
| }
|
|
|
| @@ -1032,49 +991,45 @@ TEST_F(InputMethodIBusKeyEventTest, MultiKeyEventDelayResponseTest) {
|
| input_type_ = TEXT_INPUT_TYPE_TEXT;
|
| ime_->OnTextInputTypeChanged(this);
|
|
|
| - XEvent event = {};
|
| - event.xkey.type = KeyPress;
|
| -
|
| - // Set up IBusKeyEventFromNativeKeyEvent result for first key event.
|
| - ime_->mutable_ibus_key_event_from_native_key_event_result()->keyval
|
| - = kTestIBusKeyVal1;
|
| - ime_->mutable_ibus_key_event_from_native_key_event_result()->keycode
|
| - = kTestIBusKeyCode1;
|
| - ime_->mutable_ibus_key_event_from_native_key_event_result()->state
|
| - = kTestIBusState1;
|
| + XEvent xevent;
|
| + ui::InitXKeyEventForTesting(ui::ET_KEY_PRESSED,
|
| + ui::VKEY_B,
|
| + ui::EF_ALT_DOWN,
|
| + &xevent);
|
| + const ui::KeyEvent event(&xevent, true);
|
|
|
| // Do key event.
|
| - ime_->DispatchKeyEvent(&event);
|
| - EXPECT_EQ(kTestIBusKeyVal1,
|
| - mock_ime_engine_handler_->last_processed_keysym());
|
| - EXPECT_EQ(kTestIBusKeyCode1,
|
| - mock_ime_engine_handler_->last_processed_keycode());
|
| - EXPECT_EQ(kTestIBusState1,
|
| - mock_ime_engine_handler_->last_processed_state());
|
| + ime_->DispatchKeyEvent(event);
|
| + EXPECT_EQ("b", mock_ime_engine_handler_->last_processed_keysym());
|
| + EXPECT_EQ("KeyB", mock_ime_engine_handler_->last_processed_keycode());
|
| + EXPECT_TRUE(mock_ime_engine_handler_->last_processed_is_key_down());
|
| + EXPECT_TRUE(mock_ime_engine_handler_->last_processed_is_alt_down());
|
| + EXPECT_FALSE(mock_ime_engine_handler_->last_processed_is_ctrl_down());
|
| + EXPECT_FALSE(mock_ime_engine_handler_->last_processed_is_shift_down());
|
| + EXPECT_FALSE(mock_ime_engine_handler_->last_processed_is_caps_lock_down());
|
|
|
| KeyEventCallback first_callback =
|
| mock_ime_engine_handler_->last_passed_callback();
|
|
|
| - // Set up IBusKeyEventFromNativeKeyEvent result for second key event.
|
| - ime_->mutable_ibus_key_event_from_native_key_event_result()->keyval
|
| - = kTestIBusKeyVal2;
|
| - ime_->mutable_ibus_key_event_from_native_key_event_result()->keycode
|
| - = kTestIBusKeyCode2;
|
| - ime_->mutable_ibus_key_event_from_native_key_event_result()->state
|
| - = kTestIBusState2;
|
| -
|
| // Do key event again.
|
| - ime_->DispatchKeyEvent(&event);
|
| - EXPECT_EQ(kTestIBusKeyVal2,
|
| - mock_ime_engine_handler_->last_processed_keysym());
|
| - EXPECT_EQ(kTestIBusKeyCode2,
|
| - mock_ime_engine_handler_->last_processed_keycode());
|
| - EXPECT_EQ(kTestIBusState2,
|
| - mock_ime_engine_handler_->last_processed_state());
|
| + XEvent xevent2;
|
| + ui::InitXKeyEventForTesting(ui::ET_KEY_RELEASED,
|
| + ui::VKEY_B,
|
| + ui::EF_ALT_DOWN,
|
| + &xevent2);
|
| + const ui::KeyEvent event2(&xevent2, true);
|
| +
|
| + ime_->DispatchKeyEvent(event2);
|
| + EXPECT_EQ("b", mock_ime_engine_handler_->last_processed_keysym());
|
| + EXPECT_EQ("KeyB", mock_ime_engine_handler_->last_processed_keycode());
|
| + EXPECT_FALSE(mock_ime_engine_handler_->last_processed_is_key_down());
|
| + EXPECT_TRUE(mock_ime_engine_handler_->last_processed_is_alt_down());
|
| + EXPECT_FALSE(mock_ime_engine_handler_->last_processed_is_ctrl_down());
|
| + EXPECT_FALSE(mock_ime_engine_handler_->last_processed_is_shift_down());
|
| + EXPECT_FALSE(mock_ime_engine_handler_->last_processed_is_caps_lock_down());
|
|
|
| // Check before state.
|
| - EXPECT_EQ(2,
|
| - mock_ime_engine_handler_->process_key_event_call_count());
|
| + EXPECT_EQ(2, mock_ime_engine_handler_->process_key_event_call_count());
|
| EXPECT_EQ(0, ime_->process_key_event_post_ime_call_count());
|
|
|
| // Do callback for first key event.
|
| @@ -1082,8 +1037,10 @@ TEST_F(InputMethodIBusKeyEventTest, MultiKeyEventDelayResponseTest) {
|
|
|
| // Check the results for first key event.
|
| EXPECT_EQ(1, ime_->process_key_event_post_ime_call_count());
|
| - EXPECT_TRUE(IsEqualXKeyEvent(event,
|
| - ime_->process_key_event_post_ime_args().event));
|
| + const ui::KeyEvent* stored_event =
|
| + ime_->process_key_event_post_ime_args().event;
|
| + EXPECT_TRUE(stored_event->HasNativeEvent());
|
| + EXPECT_TRUE(IsEqualXKeyEvent(xevent, *(stored_event->native_event())));
|
| EXPECT_TRUE(ime_->process_key_event_post_ime_args().handled);
|
|
|
| // Do callback for second key event.
|
| @@ -1091,31 +1048,27 @@ TEST_F(InputMethodIBusKeyEventTest, MultiKeyEventDelayResponseTest) {
|
|
|
| // Check the results for second key event.
|
| EXPECT_EQ(2, ime_->process_key_event_post_ime_call_count());
|
| - EXPECT_TRUE(IsEqualXKeyEvent(event,
|
| - ime_->process_key_event_post_ime_args().event));
|
| + stored_event = ime_->process_key_event_post_ime_args().event;
|
| + EXPECT_TRUE(stored_event->HasNativeEvent());
|
| + EXPECT_TRUE(IsEqualXKeyEvent(xevent2, *(stored_event->native_event())));
|
| EXPECT_FALSE(ime_->process_key_event_post_ime_args().handled);
|
| }
|
|
|
| TEST_F(InputMethodIBusKeyEventTest, KeyEventDelayResponseResetTest) {
|
| - XEvent event = {};
|
| - event.xkey.type = KeyPress;
|
| -
|
| - // Set up IBusKeyEventFromNativeKeyEvent result.
|
| - ime_->mutable_ibus_key_event_from_native_key_event_result()->keyval
|
| - = kTestIBusKeyVal1;
|
| - ime_->mutable_ibus_key_event_from_native_key_event_result()->keycode
|
| - = kTestIBusKeyCode1;
|
| - ime_->mutable_ibus_key_event_from_native_key_event_result()->state
|
| - = kTestIBusState1;
|
| + XEvent xevent;
|
| + ui::InitXKeyEventForTesting(ui::ET_KEY_PRESSED,
|
| + ui::VKEY_A,
|
| + ui::EF_NONE,
|
| + &xevent);
|
| + const ui::KeyEvent event(&xevent, true);
|
|
|
| // Do key event.
|
| input_type_ = TEXT_INPUT_TYPE_TEXT;
|
| ime_->OnTextInputTypeChanged(this);
|
| - ime_->DispatchKeyEvent(&event);
|
| + ime_->DispatchKeyEvent(event);
|
|
|
| // Check before state.
|
| - EXPECT_EQ(1,
|
| - mock_ime_engine_handler_->process_key_event_call_count());
|
| + EXPECT_EQ(1, mock_ime_engine_handler_->process_key_event_call_count());
|
| EXPECT_EQ(0, ime_->process_key_event_post_ime_call_count());
|
|
|
| ime_->ResetContext();
|
| @@ -1125,7 +1078,6 @@ TEST_F(InputMethodIBusKeyEventTest, KeyEventDelayResponseResetTest) {
|
|
|
| EXPECT_EQ(0, ime_->process_key_event_post_ime_call_count());
|
| }
|
| -
|
| // TODO(nona): Introduce ProcessKeyEventPostIME tests(crbug.com/156593).
|
|
|
| } // namespace ui
|
|
|