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

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

Issue 78633002: Support InputMethodObserver in RemoteInputMethodWin (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 1 month 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/remote_input_method_win.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/base/ime/remote_input_method_win_unittest.cc
diff --git a/ui/base/ime/remote_input_method_win_unittest.cc b/ui/base/ime/remote_input_method_win_unittest.cc
index bc171df3005012d5bf6bcc3e8cd61f64c0bcc328..39490b9a246928efd4356f4c546d8172ea9cc4ad 100644
--- a/ui/base/ime/remote_input_method_win_unittest.cc
+++ b/ui/base/ime/remote_input_method_win_unittest.cc
@@ -9,11 +9,13 @@
#include <vector>
#include "base/memory/scoped_ptr.h"
+#include "base/scoped_observer.h"
#include "base/strings/string16.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/base/ime/dummy_text_input_client.h"
#include "ui/base/ime/input_method.h"
#include "ui/base/ime/input_method_delegate.h"
+#include "ui/base/ime/input_method_observer.h"
#include "ui/base/ime/remote_input_method_delegate_win.h"
#include "ui/events/event.h"
@@ -161,6 +163,76 @@ class MockRemoteInputMethodDelegateWin
DISALLOW_COPY_AND_ASSIGN(MockRemoteInputMethodDelegateWin);
};
+class MockInputMethodObserver : public InputMethodObserver {
+ public:
+ MockInputMethodObserver()
+ : on_text_input_type_changed_(0),
+ on_caret_bounds_changed_(0),
+ on_input_locale_changed_(0),
+ on_text_input_state_changed_(0),
+ on_input_method_destroyed_changed_(0) {
+ }
+ virtual ~MockInputMethodObserver() {
+ }
+ void Reset() {
+ on_text_input_type_changed_ = 0;
+ on_caret_bounds_changed_ = 0;
+ on_input_locale_changed_ = 0;
+ on_text_input_state_changed_ = 0;
+ on_input_method_destroyed_changed_ = 0;
+ }
+ size_t on_text_input_type_changed() const {
+ return on_text_input_type_changed_;
+ }
+ size_t on_caret_bounds_changed() const {
+ return on_caret_bounds_changed_;
+ }
+ size_t on_input_locale_changed() const {
+ return on_input_locale_changed_;
+ }
+ size_t on_text_input_state_changed() const {
+ return on_text_input_state_changed_;
+ }
+ size_t on_input_method_destroyed_changed() const {
+ return on_input_method_destroyed_changed_;
+ }
+
+ private:
+ // Overriden from InputMethodObserver.
+ virtual void OnTextInputTypeChanged(const TextInputClient* client) OVERRIDE {
+ ++on_text_input_type_changed_;
+ }
+ virtual void OnFocus() OVERRIDE {
+ }
+ virtual void OnBlur() OVERRIDE {
+ }
+ virtual void OnUntranslatedIMEMessage(
+ const base::NativeEvent& event) OVERRIDE {
+ }
+ virtual void OnCaretBoundsChanged(const TextInputClient* client) OVERRIDE {
+ ++on_caret_bounds_changed_;
+ }
+ virtual void OnInputLocaleChanged() OVERRIDE {
+ ++on_input_locale_changed_;
+ }
+ virtual void OnTextInputStateChanged(const TextInputClient* client) OVERRIDE {
+ ++on_text_input_state_changed_;
+ }
+ virtual void OnInputMethodDestroyed(const InputMethod* client) OVERRIDE {
+ ++on_input_method_destroyed_changed_;
+ }
+
+ size_t on_text_input_type_changed_;
+ size_t on_caret_bounds_changed_;
+ size_t on_input_locale_changed_;
+ size_t on_text_input_state_changed_;
+ size_t on_input_method_destroyed_changed_;
+ DISALLOW_COPY_AND_ASSIGN(MockInputMethodObserver);
+};
+
+typedef ScopedObserver<InputMethod, InputMethodObserver>
+ InputMethodScopedObserver;
+
TEST(RemoteInputMethodWinTest, RemoteInputMethodPrivateWin) {
InputMethod* other_ptr = static_cast<InputMethod*>(NULL) + 1;
@@ -298,6 +370,7 @@ TEST(RemoteInputMethodWinTest, DetachTextInputClient) {
EXPECT_TRUE(mock_remote_delegate.composition_character_bounds().empty());
EXPECT_TRUE(mock_remote_delegate.input_scopes().empty());
}
+
TEST(RemoteInputMethodWinTest, OnCaretBoundsChanged) {
MockInputMethodDelegate delegate_;
MockTextInputClient mock_text_input_client;
@@ -572,5 +645,124 @@ TEST(RemoteInputMethodWinTest, DispatchKeyEvent_FabricatedChar) {
mock_text_input_client.Reset();
}
+TEST(RemoteInputMethodWinTest, OnTextInputStateChanged_Observer) {
+ DummyTextInputClient text_input_client;
+ DummyTextInputClient text_input_client_the_other;
+
+ MockInputMethodObserver input_method_observer;
+ MockInputMethodDelegate delegate_;
+ scoped_ptr<InputMethod> input_method(CreateRemoteInputMethodWin(&delegate_));
+ InputMethodScopedObserver scoped_observer(&input_method_observer);
+ scoped_observer.Add(input_method.get());
+
+ input_method->SetFocusedTextInputClient(&text_input_client);
+ ASSERT_EQ(&text_input_client, input_method->GetTextInputClient());
+ EXPECT_EQ(1u, input_method_observer.on_text_input_state_changed());
+ input_method_observer.Reset();
+
+ input_method->SetFocusedTextInputClient(&text_input_client);
+ ASSERT_EQ(&text_input_client, input_method->GetTextInputClient());
+ EXPECT_EQ(0u, input_method_observer.on_text_input_state_changed());
+ input_method_observer.Reset();
+
+ input_method->SetFocusedTextInputClient(&text_input_client_the_other);
+ ASSERT_EQ(&text_input_client_the_other, input_method->GetTextInputClient());
+ EXPECT_EQ(1u, input_method_observer.on_text_input_state_changed());
+ input_method_observer.Reset();
+
+ input_method->DetachTextInputClient(&text_input_client_the_other);
+ ASSERT_TRUE(input_method->GetTextInputClient() == NULL);
+ EXPECT_EQ(1u, input_method_observer.on_text_input_state_changed());
+ input_method_observer.Reset();
+}
+
+TEST(RemoteInputMethodWinTest, OnCaretBoundsChanged_Observer) {
+ DummyTextInputClient text_input_client;
+ DummyTextInputClient text_input_client_the_other;
+
+ MockInputMethodObserver input_method_observer;
+ MockInputMethodDelegate delegate_;
+ scoped_ptr<InputMethod> input_method(CreateRemoteInputMethodWin(&delegate_));
+ InputMethodScopedObserver scoped_observer(&input_method_observer);
+ scoped_observer.Add(input_method.get());
+
+ {
+ SCOPED_TRACE("OnCaretBoundsChanged callback must not be fired when no text "
+ "input client is focused");
+ ASSERT_EQ(NULL, input_method->GetTextInputClient());
+
+ input_method_observer.Reset();
+ input_method->OnCaretBoundsChanged(&text_input_client);
+ EXPECT_EQ(0u, input_method_observer.on_caret_bounds_changed());
+ input_method->OnCaretBoundsChanged(NULL);
+ EXPECT_EQ(0u, input_method_observer.on_caret_bounds_changed());
+ }
+
+ {
+ SCOPED_TRACE("OnCaretBoundsChanged callback must be fired when and only "
+ "the event is notified from the focused text input client");
+
+ input_method->SetFocusedTextInputClient(&text_input_client);
+ ASSERT_EQ(&text_input_client, input_method->GetTextInputClient());
+
+ // Must fire the event
+ input_method_observer.Reset();
+ input_method->OnCaretBoundsChanged(&text_input_client);
+ EXPECT_EQ(1u, input_method_observer.on_caret_bounds_changed());
+
+ // Must not fire the event
+ input_method_observer.Reset();
+ input_method->OnCaretBoundsChanged(NULL);
+ EXPECT_EQ(0u, input_method_observer.on_caret_bounds_changed());
+
+ // Must not fire the event
+ input_method_observer.Reset();
+ input_method->OnCaretBoundsChanged(&text_input_client_the_other);
+ EXPECT_EQ(0u, input_method_observer.on_caret_bounds_changed());
+ }
+}
+
+TEST(RemoteInputMethodWinTest, OnInputLocaleChanged_Observer) {
+ DummyTextInputClient text_input_client;
+
+ MockInputMethodObserver input_method_observer;
+
+ MockInputMethodDelegate delegate_;
+ scoped_ptr<InputMethod> input_method(CreateRemoteInputMethodWin(&delegate_));
+ InputMethodScopedObserver scoped_observer(&input_method_observer);
+ scoped_observer.Add(input_method.get());
+
+ {
+ SCOPED_TRACE("OnInputLocaleChanged callback can be fired even when no text "
+ "input client is focused");
+ ASSERT_EQ(NULL, input_method->GetTextInputClient());
+
+ input_method_observer.Reset();
+ input_method->OnInputLocaleChanged();
+ EXPECT_EQ(1u, input_method_observer.on_input_locale_changed());
+
+ input_method->SetFocusedTextInputClient(&text_input_client);
+ input_method_observer.Reset();
+ input_method->OnInputLocaleChanged();
+ EXPECT_EQ(1u, input_method_observer.on_input_locale_changed());
+ }
+}
+
+TEST(RemoteInputMethodWinTest, OnInputMethodDestroyed_Observer) {
+ DummyTextInputClient text_input_client;
+ DummyTextInputClient text_input_client_the_other;
+
+ MockInputMethodObserver input_method_observer;
+ InputMethodScopedObserver scoped_observer(&input_method_observer);
+
+ MockInputMethodDelegate delegate_;
+ scoped_ptr<InputMethod> input_method(CreateRemoteInputMethodWin(&delegate_));
+ input_method->AddObserver(&input_method_observer);
+
+ EXPECT_EQ(0u, input_method_observer.on_input_method_destroyed_changed());
+ input_method.reset();
+ EXPECT_EQ(1u, input_method_observer.on_input_method_destroyed_changed());
+}
+
} // namespace
} // namespace ui
« no previous file with comments | « ui/base/ime/remote_input_method_win.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698