| 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
|
|
|