diff options
-rw-r--r-- | chromeos/dbus/ibus/ibus_input_context_client.cc | 4 | ||||
-rw-r--r-- | chromeos/dbus/ibus/ibus_input_context_client.h | 6 | ||||
-rw-r--r-- | chromeos/dbus/ibus/ibus_input_context_client_unittest.cc | 4 | ||||
-rw-r--r-- | chromeos/dbus/ibus/mock_ibus_client.cc | 7 | ||||
-rw-r--r-- | chromeos/dbus/ibus/mock_ibus_client.h | 24 | ||||
-rw-r--r-- | chromeos/dbus/ibus/mock_ibus_input_context_client.cc | 27 | ||||
-rw-r--r-- | chromeos/dbus/ibus/mock_ibus_input_context_client.h | 48 | ||||
-rw-r--r-- | chromeos/dbus/mock_dbus_thread_manager_without_gmock.cc | 7 | ||||
-rw-r--r-- | chromeos/dbus/mock_dbus_thread_manager_without_gmock.h | 6 | ||||
-rw-r--r-- | ui/base/ime/ibus_client_impl.cc | 4 | ||||
-rw-r--r-- | ui/base/ime/input_method_ibus.cc | 5 | ||||
-rw-r--r-- | ui/base/ime/input_method_ibus_unittest.cc | 260 |
12 files changed, 101 insertions, 301 deletions
diff --git a/chromeos/dbus/ibus/ibus_input_context_client.cc b/chromeos/dbus/ibus/ibus_input_context_client.cc index 8083f8c..10e7d6f 100644 --- a/chromeos/dbus/ibus/ibus_input_context_client.cc +++ b/chromeos/dbus/ibus/ibus_input_context_client.cc @@ -67,7 +67,7 @@ class IBusInputContextClientImpl : public IBusInputContextClient { } // IBusInputContextClient override. - virtual bool IsObjectProxyReady() const OVERRIDE { + virtual bool IsConnected() const OVERRIDE { return proxy_ != NULL; } @@ -374,7 +374,7 @@ class IBusInputContextClientStubImpl : public IBusInputContextClient { // IBusInputContextClient override. virtual void ResetObjectProxy() OVERRIDE {} // IBusInputContextClient override. - virtual bool IsObjectProxyReady() const OVERRIDE { + virtual bool IsConnected() const OVERRIDE { return true; } // IBusInputContextClient overrides. diff --git a/chromeos/dbus/ibus/ibus_input_context_client.h b/chromeos/dbus/ibus/ibus_input_context_client.h index 7edc577..3b543f2 100644 --- a/chromeos/dbus/ibus/ibus_input_context_client.h +++ b/chromeos/dbus/ibus/ibus_input_context_client.h @@ -52,9 +52,9 @@ class CHROMEOS_EXPORT IBusInputContextClient { // Initialize function again. virtual void ResetObjectProxy() = 0; - // Returns true if the object proxy is ready to communicate with ibus-daemon, - // otherwise return false. - virtual bool IsObjectProxyReady() const = 0; + // Returns true if connected to target input context path, otherwise return + // false. + virtual bool IsConnected() const = 0; // Signal handler accessors. Setting function can be called multiple times. If // you call setting function multiple times, previous callback will be diff --git a/chromeos/dbus/ibus/ibus_input_context_client_unittest.cc b/chromeos/dbus/ibus/ibus_input_context_client_unittest.cc index d01b3a5..c4429b1 100644 --- a/chromeos/dbus/ibus/ibus_input_context_client_unittest.cc +++ b/chromeos/dbus/ibus/ibus_input_context_client_unittest.cc @@ -147,9 +147,9 @@ class IBusInputContextClientTest : public testing::Test { } virtual void TearDown() OVERRIDE { - EXPECT_TRUE(client_->IsObjectProxyReady()); + EXPECT_TRUE(client_->IsConnected()); client_->ResetObjectProxy(); - EXPECT_FALSE(client_->IsObjectProxyReady()); + EXPECT_FALSE(client_->IsConnected()); } // Handles FocusIn method call. diff --git a/chromeos/dbus/ibus/mock_ibus_client.cc b/chromeos/dbus/ibus/mock_ibus_client.cc index d185f5f..bf97086 100644 --- a/chromeos/dbus/ibus/mock_ibus_client.cc +++ b/chromeos/dbus/ibus/mock_ibus_client.cc @@ -6,9 +6,7 @@ namespace chromeos { -MockIBusClient::MockIBusClient() - : create_input_context_call_count_(0) { -} +MockIBusClient::MockIBusClient() {} MockIBusClient::~MockIBusClient() {} @@ -16,9 +14,6 @@ void MockIBusClient::CreateInputContext( const std::string& client_name, const CreateInputContextCallback& callback, const ErrorCallback& error_callback) { - create_input_context_call_count_ ++; - if (!create_input_context_handler_.is_null()) - create_input_context_handler_.Run(client_name, callback, error_callback); } } // namespace chromeos diff --git a/chromeos/dbus/ibus/mock_ibus_client.h b/chromeos/dbus/ibus/mock_ibus_client.h index b14c7c4..756fe22a 100644 --- a/chromeos/dbus/ibus/mock_ibus_client.h +++ b/chromeos/dbus/ibus/mock_ibus_client.h @@ -7,7 +7,6 @@ #pragma once #include <string> -#include "base/callback.h" #include "chromeos/dbus/ibus/ibus_client.h" namespace chromeos { @@ -17,32 +16,9 @@ class MockIBusClient : public IBusClient { MockIBusClient(); virtual ~MockIBusClient(); - typedef base::Callback<void(const std::string& client_name, - const CreateInputContextCallback& callback, - const ErrorCallback& error_callback)> - CreateInputContextHandler; - virtual void CreateInputContext(const std::string& client_name, const CreateInputContextCallback& callback, const ErrorCallback& error_callback) OVERRIDE; - - // Function handler for CreateInputContext. The CreateInputContext function - // invokes |create_input_context_handler_| unless it's not null. - void set_create_input_context_handler( - const CreateInputContextHandler& handler) { - create_input_context_handler_ = handler; - } - - // Represents call count of CreateInputContext. - int create_input_context_call_count() const { - return create_input_context_call_count_; - } - - private: - CreateInputContextHandler create_input_context_handler_; - int create_input_context_call_count_; - - DISALLOW_COPY_AND_ASSIGN(MockIBusClient); }; } // namespace chromeos diff --git a/chromeos/dbus/ibus/mock_ibus_input_context_client.cc b/chromeos/dbus/ibus/mock_ibus_input_context_client.cc index edfa702..53b9ea4 100644 --- a/chromeos/dbus/ibus/mock_ibus_input_context_client.cc +++ b/chromeos/dbus/ibus/mock_ibus_input_context_client.cc @@ -6,36 +6,19 @@ namespace chromeos { -MockIBusInputContextClient::MockIBusInputContextClient() - : initialize_call_count_(0), - is_initialized_(false), - reset_object_proxy_call_caount_(0), - set_capabilities_call_count_(0), - focus_in_call_count_(0), - focus_out_call_count_(0), - reset_call_count_(0), - set_cursor_location_call_count_(0), - process_key_event_call_count_(0) { -} +MockIBusInputContextClient::MockIBusInputContextClient() {} MockIBusInputContextClient::~MockIBusInputContextClient() {} void MockIBusInputContextClient::Initialize( dbus::Bus* bus, const dbus::ObjectPath& object_path) { - initialize_call_count_++; - is_initialized_ = true; } void MockIBusInputContextClient::ResetObjectProxy() { - reset_object_proxy_call_caount_++; - is_initialized_ = false; } -bool MockIBusInputContextClient::IsObjectProxyReady() const { - if (is_initialized_) +bool MockIBusInputContextClient::IsConnected() const { return true; - else - return false; } void MockIBusInputContextClient::SetCommitTextHandler( @@ -74,24 +57,19 @@ void MockIBusInputContextClient::UnsetHidePreeditTextHandler() { } void MockIBusInputContextClient::SetCapabilities(uint32 capabilities) { - set_capabilities_call_count_++; } void MockIBusInputContextClient::FocusIn() { - focus_in_call_count_++; } void MockIBusInputContextClient::FocusOut() { - focus_out_call_count_++; } void MockIBusInputContextClient::Reset() { - reset_call_count_++; } void MockIBusInputContextClient::SetCursorLocation( int32 x, int32 y, int32 w, int32 h) { - set_cursor_location_call_count_++; } void MockIBusInputContextClient::ProcessKeyEvent( @@ -99,7 +77,6 @@ void MockIBusInputContextClient::ProcessKeyEvent( uint32 keycode, uint32 state, const ProcessKeyEventCallback& callback) { - process_key_event_call_count_++; } } // namespace chromeos diff --git a/chromeos/dbus/ibus/mock_ibus_input_context_client.h b/chromeos/dbus/ibus/mock_ibus_input_context_client.h index 38944f1..1e2a58c 100644 --- a/chromeos/dbus/ibus/mock_ibus_input_context_client.h +++ b/chromeos/dbus/ibus/mock_ibus_input_context_client.h @@ -5,7 +5,6 @@ #ifndef CHROMEOS_DBUS_IBUS_MOCK_IBUS_INPUT_CONTEXT_CLIENT_H_ #define CHROMEOS_DBUS_IBUS_MOCK_IBUS_INPUT_CONTEXT_CLIENT_H_ -#include "base/basictypes.h" #include "chromeos/dbus/ibus/ibus_input_context_client.h" namespace chromeos { @@ -17,7 +16,7 @@ class MockIBusInputContextClient : public IBusInputContextClient { virtual void Initialize(dbus::Bus* bus, const dbus::ObjectPath& object_path) OVERRIDE; virtual void ResetObjectProxy() OVERRIDE; - virtual bool IsObjectProxyReady() const OVERRIDE; + virtual bool IsConnected() const OVERRIDE; virtual void SetCommitTextHandler( const CommitTextHandler& commit_text_handler) OVERRIDE; virtual void SetForwardKeyEventHandler( @@ -40,51 +39,6 @@ class MockIBusInputContextClient : public IBusInputContextClient { virtual void SetCursorLocation(int32 x, int32 y, int32 w, int32 h) OVERRIDE; virtual void ProcessKeyEvent(uint32 keyval, uint32 keycode, uint32 state, const ProcessKeyEventCallback& callback) OVERRIDE; - - // Call count of Initialize(). - int initialize_call_count() const { return initialize_call_count_; } - - // Call count of ResetObjectProxy(). - int reset_object_proxy_call_caount() const { - return reset_object_proxy_call_caount_; - } - - // Call count of SetCapabilities(). - int set_capabilities_call_count() const { - return set_capabilities_call_count_; - } - - // Call count of FocusIn(). - int focus_in_call_count() const { return focus_in_call_count_; } - - // Call count of FocusOut(). - int focus_out_call_count() const { return focus_out_call_count_; } - - // Call count of Reset(). - int reset_call_count() const { return reset_call_count_; } - - // Call count of SetCursorLocation(). - int set_cursor_location_call_count() const { - return set_cursor_location_call_count_; - } - - // Call count of ProcessKeyEvent(). - int process_key_event_call_count() const { - return process_key_event_call_count_; - } - - private: - int initialize_call_count_; - bool is_initialized_; - int reset_object_proxy_call_caount_; - int set_capabilities_call_count_; - int focus_in_call_count_; - int focus_out_call_count_; - int reset_call_count_; - int set_cursor_location_call_count_; - int process_key_event_call_count_; - - DISALLOW_COPY_AND_ASSIGN(MockIBusInputContextClient); }; } // namespace chromeos diff --git a/chromeos/dbus/mock_dbus_thread_manager_without_gmock.cc b/chromeos/dbus/mock_dbus_thread_manager_without_gmock.cc index ab6dad2..4d5c327 100644 --- a/chromeos/dbus/mock_dbus_thread_manager_without_gmock.cc +++ b/chromeos/dbus/mock_dbus_thread_manager_without_gmock.cc @@ -11,16 +11,13 @@ namespace chromeos { MockDBusThreadManagerWithoutGMock::MockDBusThreadManagerWithoutGMock() : mock_ibus_client_(new MockIBusClient), - mock_ibus_input_context_client_(new MockIBusInputContextClient), - ibus_bus_(NULL) { + mock_ibus_input_context_client_(new MockIBusInputContextClient) { } MockDBusThreadManagerWithoutGMock::~MockDBusThreadManagerWithoutGMock() {} void MockDBusThreadManagerWithoutGMock::InitIBusBus( const std::string& ibus_address) { - // Non-null bus address is used to ensure the connection to ibus-daemon. - ibus_bus_ = reinterpret_cast<dbus::Bus*>(0xdeadbeef); } dbus::Bus* MockDBusThreadManagerWithoutGMock::GetSystemBus() { @@ -28,7 +25,7 @@ dbus::Bus* MockDBusThreadManagerWithoutGMock::GetSystemBus() { } dbus::Bus* MockDBusThreadManagerWithoutGMock::GetIBusBus() { - return ibus_bus_; + return NULL; } BluetoothAdapterClient* diff --git a/chromeos/dbus/mock_dbus_thread_manager_without_gmock.h b/chromeos/dbus/mock_dbus_thread_manager_without_gmock.h index 36e6893..9bde865 100644 --- a/chromeos/dbus/mock_dbus_thread_manager_without_gmock.h +++ b/chromeos/dbus/mock_dbus_thread_manager_without_gmock.h @@ -64,20 +64,14 @@ class MockDBusThreadManagerWithoutGMock : public DBusThreadManager { MockIBusClient* mock_ibus_client() { return mock_ibus_client_.get(); } - MockIBusInputContextClient* mock_ibus_input_context_client() { return mock_ibus_input_context_client_.get(); } - void set_ibus_bus(dbus::Bus* ibus_bus) { - ibus_bus_ = ibus_bus; - } - private: scoped_ptr<MockIBusClient> mock_ibus_client_; scoped_ptr<MockIBusInputContextClient> mock_ibus_input_context_client_; - dbus::Bus* ibus_bus_; DISALLOW_COPY_AND_ASSIGN(MockDBusThreadManagerWithoutGMock); }; diff --git a/ui/base/ime/ibus_client_impl.cc b/ui/base/ime/ibus_client_impl.cc index cccc8c5..19f7595a 100644 --- a/ui/base/ime/ibus_client_impl.cc +++ b/ui/base/ime/ibus_client_impl.cc @@ -29,7 +29,7 @@ const uint32 kIBusCapabilityFocus = 8U; chromeos::IBusInputContextClient* GetInputContextClient() { chromeos::IBusInputContextClient* client = chromeos::DBusThreadManager::Get()->GetIBusInputContextClient(); - DCHECK(client->IsObjectProxyReady()); + DCHECK(client->IsConnected()); return client; } @@ -66,7 +66,7 @@ bool IBusClientImpl::IsConnected() { bool IBusClientImpl::IsContextReady() { return IsConnected() && chromeos::DBusThreadManager::Get()->GetIBusInputContextClient() - ->IsObjectProxyReady(); + ->IsConnected(); } void IBusClientImpl::CreateContext(PendingCreateICRequest* request) { diff --git a/ui/base/ime/input_method_ibus.cc b/ui/base/ime/input_method_ibus.cc index 8630420..8d9ce4c 100644 --- a/ui/base/ime/input_method_ibus.cc +++ b/ui/base/ime/input_method_ibus.cc @@ -425,10 +425,7 @@ void InputMethodIBus::DestroyContext() { // |pending_create_ic_request_| will be deleted in CreateInputContextDone(). pending_create_ic_request_->Abandon(); pending_create_ic_request_ = NULL; - } else if (chromeos::DBusThreadManager::Get()->GetIBusInputContextClient() - ->IsObjectProxyReady()) { - // We can't use IsContextReady here because we want to destroy object proxy - // regardless of connection. The IsContextReady contains connection check. + } else if (ibus_client_->IsContextReady()) { ResetInputContext(); DCHECK(!ibus_client_->IsContextReady()); } diff --git a/ui/base/ime/input_method_ibus_unittest.cc b/ui/base/ime/input_method_ibus_unittest.cc index 4646875..fbdecc3 100644 --- a/ui/base/ime/input_method_ibus_unittest.cc +++ b/ui/base/ime/input_method_ibus_unittest.cc @@ -8,12 +8,11 @@ #include "base/memory/scoped_ptr.h" #include "base/utf_string_conversions.h" #include "chromeos/dbus/dbus_thread_manager.h" -#include "chromeos/dbus/ibus/mock_ibus_client.h" -#include "chromeos/dbus/ibus/mock_ibus_input_context_client.h" -#include "chromeos/dbus/mock_dbus_thread_manager_without_gmock.h" +#include "chromeos/dbus/ibus/ibus_input_context_client.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/base/ime/input_method_delegate.h" #include "ui/base/ime/input_method_ibus.h" +#include "ui/base/ime/mock_ibus_client.h" #include "ui/base/ime/text_input_client.h" #include "ui/gfx/rect.h" @@ -34,63 +33,16 @@ uint32 GetOffsetInUTF16(const std::string& utf8_string, uint32 utf8_offset) { class TestableInputMethodIBus : public InputMethodIBus { public: - TestableInputMethodIBus(internal::InputMethodDelegate* delegate) + TestableInputMethodIBus(internal::InputMethodDelegate* delegate, + scoped_ptr<internal::IBusClient> new_client) : InputMethodIBus(delegate) { + set_ibus_client(new_client.Pass()); } // Change access rights. using InputMethodIBus::ExtractCompositionText; }; -class CreateInputContextSuccessHandler { - public: - CreateInputContextSuccessHandler(const dbus::ObjectPath& object_path) - : object_path_(object_path) { - } - - void Run(const std::string& client_name, - const chromeos::IBusClient::CreateInputContextCallback& callback, - const chromeos::IBusClient::ErrorCallback& error_callback) { - EXPECT_EQ("chrome", client_name); - callback.Run(object_path_); - } - - private: - dbus::ObjectPath object_path_; -}; - -class CreateInputContextFailHandler { - public: - void Run(const std::string& client_name, - const chromeos::IBusClient::CreateInputContextCallback& callback, - const chromeos::IBusClient::ErrorCallback& error_callback) { - error_callback.Run(); - } -}; - -class CreateInputContextNoResponseHandler { - public: - void Run(const std::string& client_name, - const chromeos::IBusClient::CreateInputContextCallback& callback, - const chromeos::IBusClient::ErrorCallback& error_callback) { - } -}; - -class CreateInputContextDelayFailHandler { - public: - ~CreateInputContextDelayFailHandler() { - error_callback_.Run(); - } - - void Run(const std::string& client_name, - const chromeos::IBusClient::CreateInputContextCallback& callback, - const chromeos::IBusClient::ErrorCallback& error_callback) { - error_callback_ = error_callback; - } - - chromeos::IBusClient::ErrorCallback error_callback_; -}; - class InputMethodIBusTest : public internal::InputMethodDelegate, public testing::Test, public TextInputClient { @@ -108,16 +60,11 @@ class InputMethodIBusTest : public internal::InputMethodDelegate, // function in TearDown function. // Current MockIBusInputContext is strongly depend on gmock, but gmock is // banned in ui/*. So just use stab implementation for testing. - mock_dbus_thread_manager_ = - new chromeos::MockDBusThreadManagerWithoutGMock(); - chromeos::DBusThreadManager::InitializeForTesting( - mock_dbus_thread_manager_); - - mock_ibus_client_ = mock_dbus_thread_manager_->mock_ibus_client(); - mock_ibus_input_context_client_ = - mock_dbus_thread_manager_->mock_ibus_input_context_client(); - - ime_.reset(new TestableInputMethodIBus(this)); + // TODO(nona): Introduce gmock-free MockIBusInputContext. + chromeos::DBusThreadManager::Initialize(); + chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address"); + scoped_ptr<internal::IBusClient> client(new internal::MockIBusClient); + ime_.reset(new TestableInputMethodIBus(this, client.Pass())); ime_->SetFocusedTextInputClient(this); } @@ -190,6 +137,10 @@ class InputMethodIBusTest : public internal::InputMethodDelegate, virtual bool ChangeTextDirectionAndLayoutAlignment( base::i18n::TextDirection direction) OVERRIDE { return false; } + internal::MockIBusClient* GetClient() { + return static_cast<internal::MockIBusClient*>(ime_->ibus_client()); + } + bool HasNativeEvent() const { base::NativeEvent empty; std::memset(&empty, 0, sizeof(empty)); @@ -217,14 +168,6 @@ class InputMethodIBusTest : public internal::InputMethodDelegate, caret_bounds_ = gfx::Rect(); } - void SetCreateContextSuccessHandler() { - CreateInputContextSuccessHandler create_input_context_handler( - dbus::ObjectPath("InputContext_1")); - mock_ibus_client_->set_create_input_context_handler(base::Bind( - &CreateInputContextSuccessHandler::Run, - base::Unretained(&create_input_context_handler))); - } - scoped_ptr<TestableInputMethodIBus> ime_; // Variables for remembering the parameters that are passed to @@ -247,11 +190,6 @@ class InputMethodIBusTest : public internal::InputMethodDelegate, TextInputType input_type_; bool can_compose_inline_; gfx::Rect caret_bounds_; - - // Variables for mock dbus connections. - chromeos::MockDBusThreadManagerWithoutGMock* mock_dbus_thread_manager_; - chromeos::MockIBusClient* mock_ibus_client_; - chromeos::MockIBusInputContextClient* mock_ibus_input_context_client_; }; // Tests public APIs in ui::InputMethod first. @@ -348,65 +286,57 @@ TEST_F(InputMethodIBusTest, GetInputTextType_WithoutFocusedWindow2) { // Start ibus-daemon first, then create ui::InputMethodIBus. Check if a new // input context is created. TEST_F(InputMethodIBusTest, InitiallyConnected) { - SetCreateContextSuccessHandler(); - chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address"); + GetClient()->is_connected_ = true; ime_->Init(true); // An input context should be created immediately since is_connected_ is true. - EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count()); - EXPECT_EQ(1, mock_ibus_input_context_client_->set_capabilities_call_count()); + EXPECT_EQ(1U, GetClient()->create_context_call_count_); + EXPECT_EQ(1U, GetClient()->set_capabilities_call_count_); // However, since the current text input type is 'NONE' (the default), FocusIn // shouldn't be called. - EXPECT_EQ(0, mock_ibus_input_context_client_->focus_in_call_count()); + EXPECT_EQ(0U, GetClient()->focus_in_call_count_); } // Create ui::InputMethodIBus, then start ibus-daemon. TEST_F(InputMethodIBusTest, InitiallyDisconnected) { - SetCreateContextSuccessHandler(); ime_->Init(true); // A context shouldn't be created since the daemon is not running. - EXPECT_EQ(0, mock_ibus_client_->create_input_context_call_count()); + EXPECT_EQ(0U, GetClient()->create_context_call_count_); // Start the daemon. - chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address"); + GetClient()->is_connected_ = true; ime_->OnConnected(); // A context should be created upon the signal delivery. - EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count()); - EXPECT_EQ(1, mock_ibus_input_context_client_->set_capabilities_call_count()); - EXPECT_EQ(0, mock_ibus_input_context_client_->focus_in_call_count()); + EXPECT_EQ(1U, GetClient()->create_context_call_count_); + EXPECT_EQ(1U, GetClient()->set_capabilities_call_count_); + EXPECT_EQ(0U, GetClient()->focus_in_call_count_); } // Confirm that ui::InputMethodIBus does not crash on "disconnected" signal // delivery. TEST_F(InputMethodIBusTest, Disconnect) { - chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address"); + GetClient()->is_connected_ = true; ime_->Init(true); - EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count()); - // Currently we can't shutdown IBusBus connection except in - // DBusThreadManager's shutting down. So set ibus_bus_ as NULL to emulate - // dynamical shutting down. - mock_dbus_thread_manager_->set_ibus_bus(NULL); + EXPECT_EQ(1U, GetClient()->create_context_call_count_); + GetClient()->is_connected_ = false; ime_->OnDisconnected(); } // Confirm that ui::InputMethodIBus re-creates an input context when ibus-daemon // restarts. TEST_F(InputMethodIBusTest, DisconnectThenReconnect) { - SetCreateContextSuccessHandler(); - chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address"); + GetClient()->is_connected_ = true; ime_->Init(true); - EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count()); - EXPECT_EQ(1, mock_ibus_input_context_client_->set_capabilities_call_count()); - EXPECT_EQ(0, - mock_ibus_input_context_client_->reset_object_proxy_call_caount()); - mock_dbus_thread_manager_->set_ibus_bus(NULL); + EXPECT_EQ(1U, GetClient()->create_context_call_count_); + EXPECT_EQ(1U, GetClient()->set_capabilities_call_count_); + EXPECT_EQ(0U, GetClient()->destroy_proxy_call_count_); + GetClient()->is_connected_ = false; ime_->OnDisconnected(); - chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address"); + GetClient()->is_connected_ = true; ime_->OnConnected(); // Check if the old context is deleted. - EXPECT_EQ(1, - mock_ibus_input_context_client_->reset_object_proxy_call_caount()); + EXPECT_EQ(1U, GetClient()->destroy_proxy_call_count_); // Check if a new context is created. - EXPECT_EQ(2, mock_ibus_client_->create_input_context_call_count()); - EXPECT_EQ(2, mock_ibus_input_context_client_->set_capabilities_call_count()); + EXPECT_EQ(2U, GetClient()->create_context_call_count_); + EXPECT_EQ(2U, GetClient()->set_capabilities_call_count_); } // Confirm that ui::InputMethodIBus does not crash even if NULL context is @@ -415,71 +345,60 @@ TEST_F(InputMethodIBusTest, DisconnectThenReconnect) { // it fails (unless ibus sends the "connected" signal to Chrome again). It might // be better to add some retry logic. Will revisit later. TEST_F(InputMethodIBusTest, CreateContextFail) { - CreateInputContextFailHandler create_input_context_handler; - mock_ibus_client_->set_create_input_context_handler(base::Bind( - &CreateInputContextFailHandler::Run, - base::Unretained(&create_input_context_handler))); - - chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address"); + GetClient()->is_connected_ = true; + GetClient()->create_context_result_ = + internal::MockIBusClient::kCreateContextFail; ime_->Init(true); - EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count()); - // |set_capabilities_call_count()| should be zero since a context is not + EXPECT_EQ(1U, GetClient()->create_context_call_count_); + // |set_capabilities_call_count_| should be zero since a context is not // created yet. - EXPECT_EQ(0, mock_ibus_input_context_client_->set_capabilities_call_count()); + EXPECT_EQ(0U, GetClient()->set_capabilities_call_count_); } // Confirm that ui::InputMethodIBus does not crash even if ibus-daemon does not // respond. TEST_F(InputMethodIBusTest, CreateContextNoResp) { - CreateInputContextNoResponseHandler create_input_context_handler; - mock_ibus_client_->set_create_input_context_handler(base::Bind( - &CreateInputContextNoResponseHandler::Run, - base::Unretained(&create_input_context_handler))); - - chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address"); + GetClient()->is_connected_ = true; + GetClient()->create_context_result_ = + internal::MockIBusClient::kCreateContextNoResponse; ime_->Init(true); - EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count()); - EXPECT_EQ(0, mock_ibus_input_context_client_->set_capabilities_call_count()); + EXPECT_EQ(1U, GetClient()->create_context_call_count_); + EXPECT_EQ(0U, GetClient()->set_capabilities_call_count_); } // Confirm that ui::InputMethodIBus does not crash even if ibus-daemon responds // after ui::InputMethodIBus is deleted. See comments in ~MockIBusClient() as // well. TEST_F(InputMethodIBusTest, CreateContextDelayed) { - CreateInputContextDelayFailHandler create_input_context_handler; - mock_ibus_client_->set_create_input_context_handler(base::Bind( - &CreateInputContextDelayFailHandler::Run, - base::Unretained(&create_input_context_handler))); - - chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address"); + GetClient()->is_connected_ = true; + GetClient()->create_context_result_ = + internal::MockIBusClient::kCreateContextDelayed; ime_->Init(true); - EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count()); - EXPECT_EQ(0, mock_ibus_input_context_client_->set_capabilities_call_count()); + EXPECT_EQ(1U, GetClient()->create_context_call_count_); + EXPECT_EQ(0U, GetClient()->set_capabilities_call_count_); // After this line, the destructor for |ime_| will run first. Then, the - // destructor for the handler will run. In the latter function, a new input - // context will be created and passed to InitOrAbandonInputContext(). + // destructor for the client will run. In the latter function, a new input + // context will be created and passed to StoreOrAbandonInputContext(). } // Confirm that IBusClient::FocusIn is called on "connected" if input_type_ is // TEXT. TEST_F(InputMethodIBusTest, FocusIn_Text) { - SetCreateContextSuccessHandler(); ime_->Init(true); // A context shouldn't be created since the daemon is not running. - EXPECT_EQ(0, mock_ibus_client_->create_input_context_call_count()); + EXPECT_EQ(0U, GetClient()->create_context_call_count_); EXPECT_EQ(0U, on_input_method_changed_call_count_); // Click a text input form. input_type_ = TEXT_INPUT_TYPE_TEXT; ime_->OnTextInputTypeChanged(this); // Start the daemon. - chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address"); + GetClient()->is_connected_ = true; ime_->OnConnected(); // A context should be created upon the signal delivery. - EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count()); + EXPECT_EQ(1U, GetClient()->create_context_call_count_); // Since a form has focus, IBusClient::FocusIn() should be called. - EXPECT_EQ(1, mock_ibus_input_context_client_->focus_in_call_count()); - EXPECT_EQ(1, - mock_ibus_input_context_client_->set_cursor_location_call_count()); + EXPECT_EQ(1U, GetClient()->focus_in_call_count_); + EXPECT_EQ(1U, GetClient()->set_cursor_location_call_count_); // ui::TextInputClient::OnInputMethodChanged() should be called when // ui::InputMethodIBus connects/disconnects to/from ibus-daemon and the // current text input type is not NONE. @@ -489,87 +408,78 @@ TEST_F(InputMethodIBusTest, FocusIn_Text) { // Confirm that IBusClient::FocusIn is NOT called on "connected" if input_type_ // is PASSWORD. TEST_F(InputMethodIBusTest, FocusIn_Password) { - SetCreateContextSuccessHandler(); ime_->Init(true); - EXPECT_EQ(0, mock_ibus_client_->create_input_context_call_count()); + EXPECT_EQ(0U, GetClient()->create_context_call_count_); EXPECT_EQ(0U, on_input_method_changed_call_count_); input_type_ = TEXT_INPUT_TYPE_PASSWORD; ime_->OnTextInputTypeChanged(this); - chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address"); + GetClient()->is_connected_ = true; ime_->OnConnected(); - EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count()); + EXPECT_EQ(1U, GetClient()->create_context_call_count_); // Since a form has focus, IBusClient::FocusIn() should NOT be called. - EXPECT_EQ(0, mock_ibus_input_context_client_->focus_in_call_count()); + EXPECT_EQ(0U, GetClient()->focus_in_call_count_); EXPECT_EQ(1U, on_input_method_changed_call_count_); } // Confirm that IBusClient::FocusOut is called as expected. TEST_F(InputMethodIBusTest, FocusOut_None) { - SetCreateContextSuccessHandler(); input_type_ = TEXT_INPUT_TYPE_TEXT; - chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address"); + GetClient()->is_connected_ = true; ime_->Init(true); - EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count()); - EXPECT_EQ(1, mock_ibus_input_context_client_->focus_in_call_count()); - EXPECT_EQ(0, mock_ibus_input_context_client_->focus_out_call_count()); + EXPECT_EQ(1U, GetClient()->create_context_call_count_); + EXPECT_EQ(1U, GetClient()->focus_in_call_count_); + EXPECT_EQ(0U, GetClient()->focus_out_call_count_); input_type_ = TEXT_INPUT_TYPE_NONE; ime_->OnTextInputTypeChanged(this); - EXPECT_EQ(1, mock_ibus_input_context_client_->focus_in_call_count()); - EXPECT_EQ(1, mock_ibus_input_context_client_->focus_out_call_count()); + EXPECT_EQ(1U, GetClient()->focus_in_call_count_); + EXPECT_EQ(1U, GetClient()->focus_out_call_count_); } // Confirm that IBusClient::FocusOut is called as expected. TEST_F(InputMethodIBusTest, FocusOut_Password) { - SetCreateContextSuccessHandler(); input_type_ = TEXT_INPUT_TYPE_TEXT; - chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address"); + GetClient()->is_connected_ = true; ime_->Init(true); - EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count()); - EXPECT_EQ(1, mock_ibus_input_context_client_->focus_in_call_count()); - EXPECT_EQ(0, mock_ibus_input_context_client_->focus_out_call_count()); + EXPECT_EQ(1U, GetClient()->create_context_call_count_); + EXPECT_EQ(1U, GetClient()->focus_in_call_count_); + EXPECT_EQ(0U, GetClient()->focus_out_call_count_); input_type_ = TEXT_INPUT_TYPE_PASSWORD; ime_->OnTextInputTypeChanged(this); - EXPECT_EQ(1, mock_ibus_input_context_client_->focus_in_call_count()); - EXPECT_EQ(1, mock_ibus_input_context_client_->focus_out_call_count()); + EXPECT_EQ(1U, GetClient()->focus_in_call_count_); + EXPECT_EQ(1U, GetClient()->focus_out_call_count_); } // Confirm that IBusClient::FocusOut is NOT called. TEST_F(InputMethodIBusTest, FocusOut_Url) { - SetCreateContextSuccessHandler(); input_type_ = TEXT_INPUT_TYPE_TEXT; - chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address"); + GetClient()->is_connected_ = true; ime_->Init(true); - EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count()); - EXPECT_EQ(1, mock_ibus_input_context_client_->focus_in_call_count()); - EXPECT_EQ(0, mock_ibus_input_context_client_->focus_out_call_count()); + EXPECT_EQ(1U, GetClient()->create_context_call_count_); + EXPECT_EQ(1U, GetClient()->focus_in_call_count_); + EXPECT_EQ(0U, GetClient()->focus_out_call_count_); input_type_ = TEXT_INPUT_TYPE_URL; ime_->OnTextInputTypeChanged(this); - EXPECT_EQ(1, mock_ibus_input_context_client_->focus_in_call_count()); - EXPECT_EQ(0, mock_ibus_input_context_client_->focus_out_call_count()); + EXPECT_EQ(1U, GetClient()->focus_in_call_count_); + EXPECT_EQ(0U, GetClient()->focus_out_call_count_); } // Test if the new |caret_bounds_| is correctly sent to ibus-daemon. TEST_F(InputMethodIBusTest, OnCaretBoundsChanged) { - SetCreateContextSuccessHandler(); - chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address"); + GetClient()->is_connected_ = true; input_type_ = TEXT_INPUT_TYPE_TEXT; ime_->Init(true); - EXPECT_EQ(0, - mock_ibus_input_context_client_->set_cursor_location_call_count()); + EXPECT_EQ(0U, GetClient()->set_cursor_location_call_count_); caret_bounds_ = gfx::Rect(1, 2, 3, 4); ime_->OnCaretBoundsChanged(this); - EXPECT_EQ(1, - mock_ibus_input_context_client_->set_cursor_location_call_count()); + EXPECT_EQ(1U, GetClient()->set_cursor_location_call_count_); caret_bounds_ = gfx::Rect(0, 2, 3, 4); ime_->OnCaretBoundsChanged(this); - EXPECT_EQ(2, - mock_ibus_input_context_client_->set_cursor_location_call_count()); + EXPECT_EQ(2U, GetClient()->set_cursor_location_call_count_); caret_bounds_ = gfx::Rect(0, 2, 3, 4); // unchanged ime_->OnCaretBoundsChanged(this); // Current InputMethodIBus implementation performs the IPC regardless of the // bounds are changed or not. - EXPECT_EQ(3, - mock_ibus_input_context_client_->set_cursor_location_call_count()); + EXPECT_EQ(3U, GetClient()->set_cursor_location_call_count_); } TEST_F(InputMethodIBusTest, ExtractCompositionTextTest_NoAttribute) { |