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

Unified Diff: ui/base/ime/input_method_auralinux_unittest.cc

Issue 1068093002: Refactoring for InputMethodAuraLinux. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fixed interactive_ui_tests failure. Created 5 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/base/ime/input_method_auralinux.cc ('k') | ui/base/ime/linux/fake_input_method_context.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/base/ime/input_method_auralinux_unittest.cc
diff --git a/ui/base/ime/input_method_auralinux_unittest.cc b/ui/base/ime/input_method_auralinux_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..3efc467dfcd74cae7547841624573c10b96ab3ca
--- /dev/null
+++ b/ui/base/ime/input_method_auralinux_unittest.cc
@@ -0,0 +1,722 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/base/ime/input_method_auralinux.h"
+
+#include "base/memory/singleton.h"
+#include "base/strings/string_split.h"
+#include "base/strings/utf_string_conversions.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/base/ime/dummy_text_input_client.h"
+#include "ui/base/ime/input_method_delegate.h"
+#include "ui/base/ime/input_method_initializer.h"
+#include "ui/base/ime/linux/fake_input_method_context.h"
+#include "ui/base/ime/linux/linux_input_method_context_factory.h"
+#include "ui/events/event.h"
+
+namespace ui {
+namespace {
+
+const base::char16 kActionCommit = L'C';
+const base::char16 kActionCompositionStart = L'S';
+const base::char16 kActionCompositionUpdate = L'U';
+const base::char16 kActionCompositionEnd = L'E';
+
+class TestResult {
+ public:
+ static TestResult* GetInstance() { return Singleton<TestResult>::get(); }
+
+ void RecordAction(const base::string16& action) {
+ recorded_actions_.push_back(action);
+ }
+
+ void ExpectAction(const std::string& action) {
+ expected_actions_.push_back(base::ASCIIToUTF16(action));
+ }
+
+ void Verify() {
+ size_t len = recorded_actions_.size();
+ size_t len_exp = expected_actions_.size();
+ EXPECT_EQ(len_exp, len);
+ for (size_t i = 0; i < len; i++)
+ EXPECT_EQ(expected_actions_[i], recorded_actions_[i]);
+ recorded_actions_.clear();
+ expected_actions_.clear();
+ }
+
+ private:
+ std::vector<base::string16> recorded_actions_;
+ std::vector<base::string16> expected_actions_;
+};
+
+class LinuxInputMethodContextForTesting : public LinuxInputMethodContext {
+ public:
+ LinuxInputMethodContextForTesting(LinuxInputMethodContextDelegate* delegate,
+ bool is_simple)
+ : delegate_(delegate),
+ is_simple_(is_simple),
+ is_sync_mode_(false),
+ eat_key_(false),
+ focused_(false) {}
+
+ void SetSyncMode(bool is_sync_mode) { is_sync_mode_ = is_sync_mode; }
+ void SetEatKey(bool eat_key) { eat_key_ = eat_key; }
+
+ void AddCommitAction(const std::string& text) {
+ actions_.push_back(base::ASCIIToUTF16("C:" + text));
+ }
+
+ void AddCompositionUpdateAction(const std::string& text) {
+ actions_.push_back(base::ASCIIToUTF16("U:" + text));
+ }
+
+ void AddCompositionStartAction() {
+ actions_.push_back(base::ASCIIToUTF16("S"));
+ }
+
+ void AddCompositionEndAction() {
+ actions_.push_back(base::ASCIIToUTF16("E"));
+ }
+
+ protected:
+ bool DispatchKeyEvent(const ui::KeyEvent& key_event) override {
+ if (!is_sync_mode_) {
+ actions_.clear();
+ return eat_key_;
+ }
+
+ for (const auto& action : actions_) {
+ std::vector<base::string16> parts;
+ base::SplitString(action, L':', &parts);
+ base::char16 id = parts[0][0];
+ base::string16 param;
+ if (parts.size() > 1)
+ param = parts[1];
+ if (id == kActionCommit) {
+ delegate_->OnCommit(param);
+ } else if (id == kActionCompositionStart) {
+ delegate_->OnPreeditStart();
+ } else if (id == kActionCompositionUpdate) {
+ CompositionText comp;
+ comp.text = param;
+ delegate_->OnPreeditChanged(comp);
+ } else if (id == kActionCompositionEnd) {
+ delegate_->OnPreeditEnd();
+ }
+ }
+
+ actions_.clear();
+ return eat_key_;
+ }
+
+ void Reset() override {}
+
+ void Focus() override { focused_ = true; }
+
+ void Blur() override { focused_ = false; }
+
+ void SetCursorLocation(const gfx::Rect& rect) override {
+ cursor_position_ = rect;
+ }
+
+ private:
+ LinuxInputMethodContextDelegate* delegate_;
+ std::vector<base::string16> actions_;
+ bool is_simple_;
+ bool is_sync_mode_;
+ bool eat_key_;
+ bool focused_;
+ gfx::Rect cursor_position_;
+
+ DISALLOW_COPY_AND_ASSIGN(LinuxInputMethodContextForTesting);
+};
+
+class LinuxInputMethodContextFactoryForTesting
+ : public LinuxInputMethodContextFactory {
+ public:
+ LinuxInputMethodContextFactoryForTesting(){};
+
+ scoped_ptr<LinuxInputMethodContext> CreateInputMethodContext(
+ LinuxInputMethodContextDelegate* delegate,
+ bool is_simple) const override {
+ return scoped_ptr<ui::LinuxInputMethodContext>(
+ new LinuxInputMethodContextForTesting(delegate, is_simple));
+ };
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(LinuxInputMethodContextFactoryForTesting);
+};
+
+class InputMethodDelegateForTesting : public internal::InputMethodDelegate {
+ public:
+ InputMethodDelegateForTesting(){};
+ ~InputMethodDelegateForTesting() override{};
+
+ bool DispatchKeyEventPostIME(const ui::KeyEvent& key_event) override {
+ std::string action;
+ switch (key_event.type()) {
+ case ET_KEY_PRESSED:
+ action = "keydown:";
+ break;
+ case ET_KEY_RELEASED:
+ action = "keyup:";
+ break;
+ default:
+ break;
+ }
+ std::stringstream ss;
+ ss << key_event.key_code();
+ action += std::string(ss.str());
+ TestResult::GetInstance()->RecordAction(base::ASCIIToUTF16(action));
+ return false;
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(InputMethodDelegateForTesting);
+};
+
+class TextInputClientForTesting : public DummyTextInputClient {
+ public:
+ explicit TextInputClientForTesting(TextInputType text_input_type)
+ : DummyTextInputClient(text_input_type){};
+
+ base::string16 composition_text;
+
+ protected:
+ void SetCompositionText(const CompositionText& composition) override {
+ composition_text = composition.text;
+ TestResult::GetInstance()->RecordAction(
+ base::ASCIIToUTF16("compositionstart"));
+ TestResult::GetInstance()->RecordAction(
+ base::ASCIIToUTF16("compositionupdate:") + composition.text);
+ }
+
+ bool HasCompositionText() const override { return !composition_text.empty(); }
+
+ void ConfirmCompositionText() override {
+ TestResult::GetInstance()->RecordAction(
+ base::ASCIIToUTF16("compositionend"));
+ TestResult::GetInstance()->RecordAction(base::ASCIIToUTF16("textinput:") +
+ composition_text);
+ composition_text.clear();
+ }
+
+ void ClearCompositionText() override {
+ TestResult::GetInstance()->RecordAction(
+ base::ASCIIToUTF16("compositionend"));
+ composition_text.clear();
+ }
+
+ void InsertText(const base::string16& text) override {
+ if (HasCompositionText()) {
+ TestResult::GetInstance()->RecordAction(
+ base::ASCIIToUTF16("compositionend"));
+ }
+ TestResult::GetInstance()->RecordAction(base::ASCIIToUTF16("textinput:") +
+ text);
+ composition_text.clear();
+ }
+
+ void InsertChar(base::char16 ch, int flags) override {
+ std::stringstream ss;
+ ss << ch;
+ TestResult::GetInstance()->RecordAction(base::ASCIIToUTF16("keypress:") +
+ base::ASCIIToUTF16(ss.str()));
+ }
+};
+
+class InputMethodAuraLinuxTest : public testing::Test {
+ protected:
+ InputMethodAuraLinuxTest()
+ : factory_(NULL),
+ input_method_auralinux_(NULL),
+ delegate_(NULL),
+ context_(NULL),
+ context_simple_(NULL) {
+ factory_ = new LinuxInputMethodContextFactoryForTesting();
+ LinuxInputMethodContextFactory::SetInstance(factory_);
+ test_result_ = TestResult::GetInstance();
+ }
+ ~InputMethodAuraLinuxTest() override {
+ delete factory_;
+ factory_ = NULL;
+ test_result_ = NULL;
+ }
+
+ void SetUp() override {
+ delegate_ = new InputMethodDelegateForTesting();
+ input_method_auralinux_ = new InputMethodAuraLinux(delegate_);
+ input_method_auralinux_->OnFocus();
+ context_ = static_cast<LinuxInputMethodContextForTesting*>(
+ input_method_auralinux_->GetContextForTesting(false));
+ context_simple_ = static_cast<LinuxInputMethodContextForTesting*>(
+ input_method_auralinux_->GetContextForTesting(true));
+ }
+
+ void TearDown() override {
+ context_->SetSyncMode(false);
+ context_->SetEatKey(false);
+
+ context_simple_->SetSyncMode(false);
+ context_simple_->SetEatKey(false);
+
+ context_ = NULL;
+ context_simple_ = NULL;
+
+ delete input_method_auralinux_;
+ input_method_auralinux_ = NULL;
+ delete delegate_;
+ delegate_ = NULL;
+ }
+
+ LinuxInputMethodContextFactoryForTesting* factory_;
+ InputMethodAuraLinux* input_method_auralinux_;
+ InputMethodDelegateForTesting* delegate_;
+ LinuxInputMethodContextForTesting* context_;
+ LinuxInputMethodContextForTesting* context_simple_;
+ TestResult* test_result_;
+
+ DISALLOW_COPY_AND_ASSIGN(InputMethodAuraLinuxTest);
+};
+
+TEST_F(InputMethodAuraLinuxTest, BasicSyncModeTest) {
+ context_->SetSyncMode(true);
+ context_->SetEatKey(true);
+ context_->AddCommitAction("a");
+
+ scoped_ptr<TextInputClientForTesting> client(
+ new TextInputClientForTesting(TEXT_INPUT_TYPE_TEXT));
+ input_method_auralinux_->SetFocusedTextInputClient(client.get());
+ input_method_auralinux_->OnTextInputTypeChanged(client.get());
+
+ KeyEvent key(ET_KEY_PRESSED, VKEY_A, 0);
+ key.set_character(L'a');
+ input_method_auralinux_->DispatchKeyEvent(key);
+
+ test_result_->ExpectAction("keydown:65");
+ test_result_->ExpectAction("keypress:97");
+ test_result_->Verify();
+
+ input_method_auralinux_->DetachTextInputClient(client.get());
+ client.reset(new TextInputClientForTesting(TEXT_INPUT_TYPE_PASSWORD));
+ context_simple_->SetSyncMode(true);
+ context_simple_->SetEatKey(false);
+
+ input_method_auralinux_->SetFocusedTextInputClient(client.get());
+ input_method_auralinux_->OnTextInputTypeChanged(client.get());
+ input_method_auralinux_->DispatchKeyEvent(key);
+
+ test_result_->ExpectAction("keydown:65");
+ test_result_->ExpectAction("keypress:97");
+ test_result_->Verify();
+}
+
+TEST_F(InputMethodAuraLinuxTest, BasicAsyncModeTest) {
+ context_->SetSyncMode(false);
+ context_->SetEatKey(true);
+
+ scoped_ptr<TextInputClientForTesting> client(
+ new TextInputClientForTesting(TEXT_INPUT_TYPE_TEXT));
+ input_method_auralinux_->SetFocusedTextInputClient(client.get());
+ input_method_auralinux_->OnTextInputTypeChanged(client.get());
+ KeyEvent key(ET_KEY_PRESSED, VKEY_A, 0);
+ key.set_character(L'a');
+ input_method_auralinux_->DispatchKeyEvent(key);
+ input_method_auralinux_->OnCommit(base::ASCIIToUTF16("a"));
+
+ test_result_->ExpectAction("keydown:229");
+ test_result_->ExpectAction("textinput:a");
+ test_result_->Verify();
+
+ input_method_auralinux_->DetachTextInputClient(client.get());
+ client.reset(new TextInputClientForTesting(TEXT_INPUT_TYPE_PASSWORD));
+ context_simple_->SetSyncMode(false);
+ context_simple_->SetEatKey(false);
+
+ input_method_auralinux_->SetFocusedTextInputClient(client.get());
+ input_method_auralinux_->OnTextInputTypeChanged(client.get());
+ input_method_auralinux_->DispatchKeyEvent(key);
+
+ test_result_->ExpectAction("keydown:65");
+ test_result_->ExpectAction("keypress:97");
+ test_result_->Verify();
+}
+
+TEST_F(InputMethodAuraLinuxTest, IBusUSTest) {
+ context_->SetSyncMode(false);
+ context_->SetEatKey(true);
+
+ scoped_ptr<TextInputClientForTesting> client(
+ new TextInputClientForTesting(TEXT_INPUT_TYPE_TEXT));
+ input_method_auralinux_->SetFocusedTextInputClient(client.get());
+ input_method_auralinux_->OnTextInputTypeChanged(client.get());
+ KeyEvent key(ET_KEY_PRESSED, VKEY_A, 0);
+ key.set_character(L'a');
+ input_method_auralinux_->DispatchKeyEvent(key);
+
+ // IBus mutes the key down.
+ test_result_->Verify();
+
+ // IBus simulates a faked key down and handle it in sync mode.
+ context_->SetSyncMode(true);
+ context_->AddCommitAction("a");
+ input_method_auralinux_->DispatchKeyEvent(key);
+
+ test_result_->ExpectAction("keydown:65");
+ test_result_->ExpectAction("keypress:97");
+ test_result_->Verify();
+
+ // IBus does NOT handle the key up.
+ context_->SetEatKey(false);
+ input_method_auralinux_->DispatchKeyEvent(
+ KeyEvent(ET_KEY_RELEASED, VKEY_A, 0));
+
+ test_result_->ExpectAction("keyup:65");
+ test_result_->Verify();
+}
+
+TEST_F(InputMethodAuraLinuxTest, IBusPinyinTest) {
+ context_->SetSyncMode(false);
+ context_->SetEatKey(true);
+
+ scoped_ptr<TextInputClientForTesting> client(
+ new TextInputClientForTesting(TEXT_INPUT_TYPE_TEXT));
+ input_method_auralinux_->SetFocusedTextInputClient(client.get());
+ input_method_auralinux_->OnTextInputTypeChanged(client.get());
+ KeyEvent key(ET_KEY_PRESSED, VKEY_A, 0);
+ key.set_character(L'a');
+ input_method_auralinux_->DispatchKeyEvent(key);
+
+ // IBus issues a standalone set_composition action.
+ input_method_auralinux_->OnPreeditStart();
+ CompositionText comp;
+ comp.text = base::ASCIIToUTF16("a");
+ input_method_auralinux_->OnPreeditChanged(comp);
+
+ test_result_->ExpectAction("keydown:229");
+ test_result_->ExpectAction("compositionstart");
+ test_result_->ExpectAction("compositionupdate:a");
+ test_result_->Verify();
+
+ // IBus issues a commit text with composition after muting the space key down.
+ input_method_auralinux_->DispatchKeyEvent(
+ KeyEvent(ET_KEY_PRESSED, VKEY_SPACE, 0));
+
+ input_method_auralinux_->OnPreeditEnd();
+ input_method_auralinux_->OnCommit(base::ASCIIToUTF16("A"));
+
+ test_result_->ExpectAction("keydown:229");
+ test_result_->ExpectAction("compositionend");
+ test_result_->ExpectAction("keydown:229");
+ test_result_->ExpectAction("textinput:A");
+ test_result_->Verify();
+}
+
+// crbug.com/463491
+TEST_F(InputMethodAuraLinuxTest, DeadKeyTest) {
+ context_simple_->SetSyncMode(true);
+ context_simple_->SetEatKey(true);
+
+ scoped_ptr<TextInputClientForTesting> client(
+ new TextInputClientForTesting(TEXT_INPUT_TYPE_NONE));
+ input_method_auralinux_->SetFocusedTextInputClient(client.get());
+ input_method_auralinux_->OnTextInputTypeChanged(client.get());
+
+ KeyEvent dead_key(ET_KEY_PRESSED, VKEY_OEM_7, 0);
+ dead_key.set_character(L'\'');
+ input_method_auralinux_->DispatchKeyEvent(dead_key);
+
+ // The single quote key is muted.
+ test_result_->ExpectAction("keydown:222");
+ test_result_->Verify();
+
+ context_simple_->AddCommitAction("X");
+ KeyEvent key(ET_KEY_PRESSED, VKEY_A, 0);
+ key.set_character(L'a');
+ input_method_auralinux_->DispatchKeyEvent(key);
+
+ // The following A key generates the accent key: รก.
+ test_result_->ExpectAction("keydown:65");
+ test_result_->ExpectAction("keypress:88");
+ test_result_->Verify();
+}
+
+TEST_F(InputMethodAuraLinuxTest, MultiCommitsTest) {
+ context_->SetSyncMode(true);
+ context_->SetEatKey(true);
+ context_->AddCommitAction("a");
+ context_->AddCommitAction("b");
+ context_->AddCommitAction("c");
+
+ scoped_ptr<TextInputClientForTesting> client(
+ new TextInputClientForTesting(TEXT_INPUT_TYPE_TEXT));
+ input_method_auralinux_->SetFocusedTextInputClient(client.get());
+ input_method_auralinux_->OnTextInputTypeChanged(client.get());
+
+ KeyEvent key(ET_KEY_PRESSED, VKEY_A, 0);
+ key.set_character(L'a');
+ input_method_auralinux_->DispatchKeyEvent(key);
+
+ test_result_->ExpectAction("keydown:229");
+ test_result_->ExpectAction("textinput:abc");
+ test_result_->Verify();
+}
+
+TEST_F(InputMethodAuraLinuxTest, MixedCompositionAndCommitTest) {
+ context_->SetSyncMode(true);
+ context_->SetEatKey(true);
+ context_->AddCommitAction("a");
+ context_->AddCompositionStartAction();
+ context_->AddCompositionUpdateAction("b");
+ context_->AddCommitAction("c");
+ context_->AddCompositionUpdateAction("d");
+
+ scoped_ptr<TextInputClientForTesting> client(
+ new TextInputClientForTesting(TEXT_INPUT_TYPE_TEXT));
+ input_method_auralinux_->SetFocusedTextInputClient(client.get());
+ input_method_auralinux_->OnTextInputTypeChanged(client.get());
+
+ KeyEvent key(ET_KEY_PRESSED, VKEY_A, 0);
+ key.set_character(L'a');
+ input_method_auralinux_->DispatchKeyEvent(key);
+
+ test_result_->ExpectAction("keydown:229");
+ test_result_->ExpectAction("textinput:ac");
+ test_result_->ExpectAction("compositionstart");
+ test_result_->ExpectAction("compositionupdate:d");
+ test_result_->Verify();
+
+ context_->AddCommitAction("e");
+ input_method_auralinux_->DispatchKeyEvent(key);
+
+ test_result_->ExpectAction("keydown:229");
+ test_result_->ExpectAction("compositionend");
+ test_result_->ExpectAction("textinput:e");
+ test_result_->Verify();
+}
+
+TEST_F(InputMethodAuraLinuxTest, CompositionEndWithoutCommitTest) {
+ context_->SetSyncMode(true);
+ context_->SetEatKey(true);
+ context_->AddCompositionStartAction();
+ context_->AddCompositionUpdateAction("a");
+
+ scoped_ptr<TextInputClientForTesting> client(
+ new TextInputClientForTesting(TEXT_INPUT_TYPE_TEXT));
+ input_method_auralinux_->SetFocusedTextInputClient(client.get());
+ input_method_auralinux_->OnTextInputTypeChanged(client.get());
+
+ KeyEvent key(ET_KEY_PRESSED, VKEY_A, 0);
+ key.set_character(L'a');
+ input_method_auralinux_->DispatchKeyEvent(key);
+
+ test_result_->ExpectAction("keydown:229");
+ test_result_->ExpectAction("compositionstart");
+ test_result_->ExpectAction("compositionupdate:a");
+ test_result_->Verify();
+
+ context_->AddCompositionEndAction();
+ input_method_auralinux_->DispatchKeyEvent(key);
+
+ test_result_->ExpectAction("keydown:229");
+ test_result_->ExpectAction("compositionend");
+ test_result_->Verify();
+}
+
+TEST_F(InputMethodAuraLinuxTest, CompositionEndWithEmptyCommitTest) {
+ context_->SetSyncMode(true);
+ context_->SetEatKey(true);
+ context_->AddCompositionStartAction();
+ context_->AddCompositionUpdateAction("a");
+
+ scoped_ptr<TextInputClientForTesting> client(
+ new TextInputClientForTesting(TEXT_INPUT_TYPE_TEXT));
+ input_method_auralinux_->SetFocusedTextInputClient(client.get());
+ input_method_auralinux_->OnTextInputTypeChanged(client.get());
+
+ KeyEvent key(ET_KEY_PRESSED, VKEY_A, 0);
+ key.set_character(L'a');
+ input_method_auralinux_->DispatchKeyEvent(key);
+
+ test_result_->ExpectAction("keydown:229");
+ test_result_->ExpectAction("compositionstart");
+ test_result_->ExpectAction("compositionupdate:a");
+ test_result_->Verify();
+
+ context_->AddCompositionEndAction();
+ context_->AddCommitAction("");
+ input_method_auralinux_->DispatchKeyEvent(key);
+
+ test_result_->ExpectAction("keydown:229");
+ test_result_->ExpectAction("compositionend");
+ test_result_->Verify();
+}
+
+TEST_F(InputMethodAuraLinuxTest, CompositionEndWithCommitTest) {
+ context_->SetSyncMode(true);
+ context_->SetEatKey(true);
+ context_->AddCompositionStartAction();
+ context_->AddCompositionUpdateAction("a");
+
+ scoped_ptr<TextInputClientForTesting> client(
+ new TextInputClientForTesting(TEXT_INPUT_TYPE_TEXT));
+ input_method_auralinux_->SetFocusedTextInputClient(client.get());
+ input_method_auralinux_->OnTextInputTypeChanged(client.get());
+
+ KeyEvent key(ET_KEY_PRESSED, VKEY_A, 0);
+ key.set_character(L'a');
+ input_method_auralinux_->DispatchKeyEvent(key);
+
+ test_result_->ExpectAction("keydown:229");
+ test_result_->ExpectAction("compositionstart");
+ test_result_->ExpectAction("compositionupdate:a");
+ test_result_->Verify();
+
+ context_->AddCompositionEndAction();
+ context_->AddCommitAction("b");
+ input_method_auralinux_->DispatchKeyEvent(key);
+
+ // Verifies single char commit under composition mode will call InsertText
+ // intead of InsertChar.
+ test_result_->ExpectAction("keydown:229");
+ test_result_->ExpectAction("compositionend");
+ test_result_->ExpectAction("textinput:b");
+ test_result_->Verify();
+}
+
+TEST_F(InputMethodAuraLinuxTest, CompositionUpdateWithCommitTest) {
+ context_->SetSyncMode(true);
+ context_->SetEatKey(true);
+ context_->AddCompositionStartAction();
+ context_->AddCompositionUpdateAction("a");
+ context_->AddCommitAction("b");
+
+ scoped_ptr<TextInputClientForTesting> client(
+ new TextInputClientForTesting(TEXT_INPUT_TYPE_TEXT));
+ input_method_auralinux_->SetFocusedTextInputClient(client.get());
+ input_method_auralinux_->OnTextInputTypeChanged(client.get());
+
+ KeyEvent key(ET_KEY_PRESSED, VKEY_A, 0);
+ key.set_character(L'a');
+ input_method_auralinux_->DispatchKeyEvent(key);
+
+ test_result_->ExpectAction("keydown:229");
+ test_result_->ExpectAction("textinput:b");
+ test_result_->ExpectAction("compositionstart");
+ test_result_->ExpectAction("compositionupdate:a");
+ test_result_->Verify();
+}
+
+TEST_F(InputMethodAuraLinuxTest, MixedAsyncAndSyncTest) {
+ context_->SetSyncMode(false);
+ context_->SetEatKey(true);
+
+ scoped_ptr<TextInputClientForTesting> client(
+ new TextInputClientForTesting(TEXT_INPUT_TYPE_TEXT));
+ input_method_auralinux_->SetFocusedTextInputClient(client.get());
+ input_method_auralinux_->OnTextInputTypeChanged(client.get());
+
+ KeyEvent key(ET_KEY_PRESSED, VKEY_A, 0);
+ key.set_character(L'a');
+ input_method_auralinux_->DispatchKeyEvent(key);
+ CompositionText comp;
+ comp.text = base::ASCIIToUTF16("a");
+ input_method_auralinux_->OnPreeditChanged(comp);
+
+ test_result_->ExpectAction("keydown:229");
+ test_result_->ExpectAction("compositionstart");
+ test_result_->ExpectAction("compositionupdate:a");
+ test_result_->Verify();
+
+ context_->SetSyncMode(true);
+ context_->AddCompositionEndAction();
+ context_->AddCommitAction("b");
+
+ input_method_auralinux_->DispatchKeyEvent(key);
+
+ test_result_->ExpectAction("keydown:229");
+ test_result_->ExpectAction("compositionend");
+ test_result_->ExpectAction("textinput:b");
+ test_result_->Verify();
+}
+
+TEST_F(InputMethodAuraLinuxTest, MixedSyncAndAsyncTest) {
+ context_->SetSyncMode(true);
+ context_->SetEatKey(true);
+ context_->AddCompositionStartAction();
+ context_->AddCompositionUpdateAction("a");
+
+ scoped_ptr<TextInputClientForTesting> client(
+ new TextInputClientForTesting(TEXT_INPUT_TYPE_TEXT));
+ input_method_auralinux_->SetFocusedTextInputClient(client.get());
+ input_method_auralinux_->OnTextInputTypeChanged(client.get());
+
+ KeyEvent key(ET_KEY_PRESSED, VKEY_A, 0);
+ key.set_character(L'a');
+ input_method_auralinux_->DispatchKeyEvent(key);
+
+ test_result_->ExpectAction("keydown:229");
+ test_result_->ExpectAction("compositionstart");
+ test_result_->ExpectAction("compositionupdate:a");
+ test_result_->Verify();
+
+ context_->SetSyncMode(false);
+
+ input_method_auralinux_->DispatchKeyEvent(key);
+ input_method_auralinux_->OnCommit(base::ASCIIToUTF16("b"));
+
+ test_result_->ExpectAction("keydown:229");
+ test_result_->ExpectAction("compositionend");
+ test_result_->ExpectAction("textinput:b");
+ test_result_->Verify();
+
+ context_->SetSyncMode(true);
+ context_->AddCommitAction("c");
+ input_method_auralinux_->DispatchKeyEvent(key);
+
+ test_result_->ExpectAction("keydown:65");
+ test_result_->ExpectAction("keypress:99");
+ test_result_->Verify();
+}
+
+TEST_F(InputMethodAuraLinuxTest, ReleaseKeyTest) {
+ context_->SetSyncMode(true);
+ context_->SetEatKey(true);
+ context_->AddCompositionUpdateAction("a");
+
+ scoped_ptr<TextInputClientForTesting> client(
+ new TextInputClientForTesting(TEXT_INPUT_TYPE_TEXT));
+ input_method_auralinux_->SetFocusedTextInputClient(client.get());
+ input_method_auralinux_->OnTextInputTypeChanged(client.get());
+
+ KeyEvent key(ET_KEY_PRESSED, VKEY_A, 0);
+ key.set_character(L'A');
+ input_method_auralinux_->DispatchKeyEvent(key);
+
+ test_result_->ExpectAction("keydown:229");
+ test_result_->ExpectAction("compositionstart");
+ test_result_->ExpectAction("compositionupdate:a");
+ test_result_->Verify();
+
+ context_->SetEatKey(false);
+ context_->AddCommitAction("b");
+ input_method_auralinux_->DispatchKeyEvent(key);
+
+ test_result_->ExpectAction("compositionend");
+ test_result_->ExpectAction("textinput:b");
+ test_result_->ExpectAction("keydown:65");
+ test_result_->ExpectAction("keypress:65");
+ test_result_->Verify();
+
+ context_->AddCommitAction("c");
+ input_method_auralinux_->DispatchKeyEvent(key);
+
+ test_result_->ExpectAction("textinput:c");
+ test_result_->ExpectAction("keydown:65");
+ test_result_->ExpectAction("keypress:65");
+ test_result_->Verify();
+}
+
+} // namespace
+} // namespace ui
« no previous file with comments | « ui/base/ime/input_method_auralinux.cc ('k') | ui/base/ime/linux/fake_input_method_context.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698