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

Unified Diff: ui/wm/core/input_method_event_filter_unittest.cc

Issue 298893003: Supports fake key events for setComposition/commitText by on-screen keyboards. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 6 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/wm/core/input_method_event_filter.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/wm/core/input_method_event_filter_unittest.cc
diff --git a/ui/wm/core/input_method_event_filter_unittest.cc b/ui/wm/core/input_method_event_filter_unittest.cc
index c5daa677ff726f319b6c74f616e7c475fb300f10..8e531a3b3c3139294b88e6b786f36f47d1a510d0 100644
--- a/ui/wm/core/input_method_event_filter_unittest.cc
+++ b/ui/wm/core/input_method_event_filter_unittest.cc
@@ -10,6 +10,8 @@
#include "ui/aura/test/event_generator.h"
#include "ui/aura/test/test_windows.h"
#include "ui/aura/window_event_dispatcher.h"
+#include "ui/base/ime/dummy_text_input_client.h"
+#include "ui/base/ime/input_method.h"
#include "ui/events/test/test_event_handler.h"
#include "ui/wm/core/compound_event_filter.h"
#include "ui/wm/core/default_activation_client.h"
@@ -25,70 +27,107 @@ DISABLED_TestInputMethodKeyEventPropagation
namespace wm {
-typedef aura::test::AuraTestBase InputMethodEventFilterTest;
+class TestTextInputClient : public ui::DummyTextInputClient {
+ public:
+ explicit TestTextInputClient(aura::Window* window) : window_(window) {}
+
+ virtual aura::Window* GetAttachedWindow() const OVERRIDE { return window_; }
+
+ private:
+ aura::Window* window_;
+
+ DISALLOW_COPY_AND_ASSIGN(TestTextInputClient);
+};
+
+class InputMethodEventFilterTest : public aura::test::AuraTestBase {
+ public:
+ InputMethodEventFilterTest() {}
+ virtual ~InputMethodEventFilterTest() {}
+
+ // testing::Test overrides:
+ virtual void SetUp() OVERRIDE {
+ aura::test::AuraTestBase::SetUp();
+
+ root_window()->AddPreTargetHandler(&root_filter_);
+ input_method_event_filter_.reset(
+ new InputMethodEventFilter(host()->GetAcceleratedWidget()));
+ input_method_event_filter_->SetInputMethodPropertyInRootWindow(
+ root_window());
+ root_filter_.AddHandler(input_method_event_filter_.get());
+ root_filter_.AddHandler(&test_filter_);
+
+ test_window_.reset(aura::test::CreateTestWindowWithDelegate(
+ &test_window_delegate_, -1, gfx::Rect(), root_window()));
+ test_input_client_.reset(new TestTextInputClient(test_window_.get()));
+
+ input_method_event_filter_->input_method()->SetFocusedTextInputClient(
+ test_input_client_.get());
+ }
+
+ virtual void TearDown() OVERRIDE {
+ test_window_.reset();
+ root_filter_.RemoveHandler(&test_filter_);
+ root_filter_.RemoveHandler(input_method_event_filter_.get());
+ root_window()->RemovePreTargetHandler(&root_filter_);
+
+ input_method_event_filter_.reset();
+ test_input_client_.reset();
+ aura::test::AuraTestBase::TearDown();
+ }
+
+ protected:
+ CompoundEventFilter root_filter_;
+ ui::test::TestEventHandler test_filter_;
+ scoped_ptr<InputMethodEventFilter> input_method_event_filter_;
+ aura::test::TestWindowDelegate test_window_delegate_;
+ scoped_ptr<aura::Window> test_window_;
+ scoped_ptr<TestTextInputClient> test_input_client_;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(InputMethodEventFilterTest);
+};
TEST_F(InputMethodEventFilterTest, TestInputMethodProperty) {
- CompoundEventFilter root_filter;
- root_window()->AddPreTargetHandler(&root_filter);
-
- InputMethodEventFilter input_method_event_filter(
- host()->GetAcceleratedWidget());
- root_filter.AddHandler(&input_method_event_filter);
-
// Tests if InputMethodEventFilter adds a window property on its
// construction.
EXPECT_TRUE(root_window()->GetProperty(
aura::client::kRootWindowInputMethodKey));
-
- root_filter.RemoveHandler(&input_method_event_filter);
- root_window()->RemovePreTargetHandler(&root_filter);
}
// Tests if InputMethodEventFilter dispatches a ui::ET_TRANSLATED_KEY_* event to
// the root window.
TEST_F(InputMethodEventFilterTest, TestInputMethodKeyEventPropagation) {
- new wm::DefaultActivationClient(root_window());
-
- CompoundEventFilter root_filter;
- root_window()->AddPreTargetHandler(&root_filter);
-
- // Add the InputMethodEventFilter before the TestEventFilter.
- InputMethodEventFilter input_method_event_filter(
- host()->GetAcceleratedWidget());
- root_filter.AddHandler(&input_method_event_filter);
-
- // Add TestEventFilter to the RootWindow.
- ui::test::TestEventHandler test_filter;
- root_filter.AddHandler(&test_filter);
-
- // We need an active window. Otherwise, the root window will not forward a key
- // event to event filters.
- aura::test::TestWindowDelegate test_delegate;
- scoped_ptr<aura::Window> window(aura::test::CreateTestWindowWithDelegate(
- &test_delegate,
- -1,
- gfx::Rect(),
- root_window()));
- aura::client::GetActivationClient(root_window())->ActivateWindow(
- window.get());
-
// Send a fake key event to the root window. InputMethodEventFilter, which is
// automatically set up by AshTestBase, consumes it and sends a new
// ui::ET_TRANSLATED_KEY_* event to the root window, which will be consumed by
// the test event filter.
aura::test::EventGenerator generator(root_window());
- EXPECT_EQ(0, test_filter.num_key_events());
+ EXPECT_EQ(0, test_filter_.num_key_events());
generator.PressKey(ui::VKEY_SPACE, 0);
- EXPECT_EQ(1, test_filter.num_key_events());
+ EXPECT_EQ(1, test_filter_.num_key_events());
generator.ReleaseKey(ui::VKEY_SPACE, 0);
- EXPECT_EQ(2, test_filter.num_key_events());
-
- root_filter.RemoveHandler(&input_method_event_filter);
- root_filter.RemoveHandler(&test_filter);
+ EXPECT_EQ(2, test_filter_.num_key_events());
+}
- // Reset window before |test_delegate| gets deleted.
- window.reset();
- root_window()->RemovePreTargetHandler(&root_filter);
+TEST_F(InputMethodEventFilterTest, TestEventDispatching) {
+ ui::KeyEvent evt(ui::ET_KEY_PRESSED,
+ ui::VKEY_PROCESSKEY,
+ ui::EF_IME_FABRICATED_KEY,
+ false);
+ // Calls DispatchKeyEventPostIME() without a focused text input client.
+ input_method_event_filter_->input_method()->SetFocusedTextInputClient(NULL);
+ input_method_event_filter_->input_method()->DispatchKeyEvent(evt);
+ // Verifies 0 key event happened because InputMethodEventFilter::
+ // DispatchKeyEventPostIME() returns false.
+ EXPECT_EQ(0, test_filter_.num_key_events());
+
+ // Calls DispatchKeyEventPostIME() with a focused text input client.
+ input_method_event_filter_->input_method()->SetFocusedTextInputClient(
+ test_input_client_.get());
+ input_method_event_filter_->input_method()->DispatchKeyEvent(evt);
+ // Verifies 1 key event happened because InputMethodEventFilter::
+ // DispatchKeyEventPostIME() returns true.
+ EXPECT_EQ(1, test_filter_.num_key_events());
}
} // namespace wm
« no previous file with comments | « ui/wm/core/input_method_event_filter.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698