Index: ui/base/ime/input_method_base_unittest.cc |
diff --git a/ui/base/ime/input_method_base_unittest.cc b/ui/base/ime/input_method_base_unittest.cc |
index e065306f23e5c7dd923a4987e0687ed44248c20c..7bc9575bb4efd54a9cbb386268064d310bd85188 100644 |
--- a/ui/base/ime/input_method_base_unittest.cc |
+++ b/ui/base/ime/input_method_base_unittest.cc |
@@ -4,6 +4,9 @@ |
#include "ui/base/ime/input_method_base.h" |
+#include "base/gtest_prod_util.h" |
+#include "base/message_loop/message_loop.h" |
+#include "base/run_loop.h" |
#include "base/scoped_observer.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "ui/base/ime/dummy_text_input_client.h" |
@@ -110,11 +113,21 @@ class ClientChangeVerifier { |
DISALLOW_COPY_AND_ASSIGN(ClientChangeVerifier); |
}; |
+class InputMethodBaseTest : public testing::Test { |
+ protected: |
+ InputMethodBaseTest() : message_loop_(base::MessageLoop::TYPE_UI) { |
+ } |
+ virtual ~InputMethodBaseTest() { |
+ } |
+ |
+ private: |
+ base::MessageLoop message_loop_; |
+}; |
+ |
class MockInputMethodBase : public InputMethodBase { |
public: |
// Note: this class does not take the ownership of |verifier|. |
- MockInputMethodBase(ClientChangeVerifier* verifier) |
- : verifier_(verifier) { |
+ MockInputMethodBase(ClientChangeVerifier* verifier) : verifier_(verifier) { |
} |
virtual ~MockInputMethodBase() { |
} |
@@ -159,6 +172,8 @@ class MockInputMethodBase : public InputMethodBase { |
} |
ClientChangeVerifier* verifier_; |
+ |
+ FRIEND_TEST_ALL_PREFIXES(InputMethodBaseTest, CandidateWindowEvents); |
DISALLOW_COPY_AND_ASSIGN(MockInputMethodBase); |
}; |
@@ -190,10 +205,38 @@ class MockInputMethodObserver : public InputMethodObserver { |
DISALLOW_COPY_AND_ASSIGN(MockInputMethodObserver); |
}; |
+class MockTextInputClient : public DummyTextInputClient { |
+ public: |
+ MockTextInputClient() |
+ : shown_event_count_(0), updated_event_count_(0), hidden_event_count_(0) { |
+ } |
+ virtual ~MockTextInputClient() { |
+ } |
+ |
+ virtual void OnCandidateWindowShown() OVERRIDE { |
+ ++shown_event_count_; |
+ } |
+ virtual void OnCandidateWindowUpdated() OVERRIDE { |
+ ++updated_event_count_; |
+ } |
+ virtual void OnCandidateWindowHidden() OVERRIDE { |
+ ++hidden_event_count_; |
+ } |
+ |
+ int shown_event_count() const { return shown_event_count_; } |
+ int updated_event_count() const { return updated_event_count_; } |
+ int hidden_event_count() const { return hidden_event_count_; } |
+ |
+ private: |
+ int shown_event_count_; |
+ int updated_event_count_; |
+ int hidden_event_count_; |
+}; |
+ |
typedef ScopedObserver<InputMethod, InputMethodObserver> |
InputMethodScopedObserver; |
-TEST(InputMethodBaseTest, SetFocusedTextInputClient) { |
+TEST_F(InputMethodBaseTest, SetFocusedTextInputClient) { |
DummyTextInputClient text_input_client_1st; |
DummyTextInputClient text_input_client_2nd; |
@@ -252,7 +295,7 @@ TEST(InputMethodBaseTest, SetFocusedTextInputClient) { |
} |
} |
-TEST(InputMethodBaseTest, DetachTextInputClient) { |
+TEST_F(InputMethodBaseTest, DetachTextInputClient) { |
DummyTextInputClient text_input_client; |
DummyTextInputClient text_input_client_the_other; |
@@ -295,5 +338,41 @@ TEST(InputMethodBaseTest, DetachTextInputClient) { |
} |
} |
+TEST_F(InputMethodBaseTest, CandidateWindowEvents) { |
+ MockTextInputClient text_input_client; |
+ |
+ ClientChangeVerifier verifier; |
+ MockInputMethodBase input_method(&verifier); |
+ input_method.OnFocus(); |
+ |
+ verifier.ExpectClientChange(NULL, &text_input_client); |
+ input_method.SetFocusedTextInputClient(&text_input_client); |
+ |
+ EXPECT_EQ(0, text_input_client.shown_event_count()); |
+ EXPECT_EQ(0, text_input_client.updated_event_count()); |
+ EXPECT_EQ(0, text_input_client.hidden_event_count()); |
+ |
+ input_method.OnCandidateWindowShown(); |
+ base::RunLoop().RunUntilIdle(); |
+ |
+ EXPECT_EQ(1, text_input_client.shown_event_count()); |
+ EXPECT_EQ(0, text_input_client.updated_event_count()); |
+ EXPECT_EQ(0, text_input_client.hidden_event_count()); |
+ |
+ input_method.OnCandidateWindowUpdated(); |
+ base::RunLoop().RunUntilIdle(); |
+ |
+ EXPECT_EQ(1, text_input_client.shown_event_count()); |
+ EXPECT_EQ(1, text_input_client.updated_event_count()); |
+ EXPECT_EQ(0, text_input_client.hidden_event_count()); |
+ |
+ input_method.OnCandidateWindowHidden(); |
+ base::RunLoop().RunUntilIdle(); |
+ |
+ EXPECT_EQ(1, text_input_client.shown_event_count()); |
+ EXPECT_EQ(1, text_input_client.updated_event_count()); |
+ EXPECT_EQ(1, text_input_client.hidden_event_count()); |
+} |
+ |
} // namespace |
} // namespace ui |