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

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

Issue 10834175: Remove PendingCreateICRequest. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Address comments Created 8 years, 4 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
« ui/base/ime/input_method_ibus.cc ('K') | « ui/base/ime/input_method_ibus.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/input_method_ibus_unittest.cc
diff --git a/ui/base/ime/input_method_ibus_unittest.cc b/ui/base/ime/input_method_ibus_unittest.cc
index 8ca771e8668aba3ab1b9096b7ec1e4055c863539..46d9b4adf437e60f9a1471743d406771f39d8447 100644
--- a/ui/base/ime/input_method_ibus_unittest.cc
+++ b/ui/base/ime/input_method_ibus_unittest.cc
@@ -20,6 +20,7 @@
namespace ui {
namespace {
+const int kCreateInputContextMaxTrialCount = 10;
uint32 GetOffsetInUTF16(const std::string& utf8_string, uint32 utf8_offset) {
string16 utf16_string = UTF8ToUTF16(utf8_string);
@@ -77,18 +78,30 @@ class CreateInputContextNoResponseHandler {
}
};
-class CreateInputContextDelayFailHandler {
+class CreateInputContextDelayHandler {
public:
- ~CreateInputContextDelayFailHandler() {
- error_callback_.Run();
+ explicit CreateInputContextDelayHandler(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) {
+ callback_ = callback;
error_callback_ = error_callback;
}
+ void RunCallback(bool success) {
+ if (success) {
Yusuke Sato 2012/08/07 20:03:44 remove {}
Seigo Nonaka 2012/08/08 04:32:52 Done.
+ callback_.Run(object_path_);
+ } else {
Yusuke Sato 2012/08/07 20:03:44 remove }{
Seigo Nonaka 2012/08/08 04:32:52 Done.
+ error_callback_.Run();
+ }
+ }
+
+ private:
+ dbus::ObjectPath object_path_;
+ chromeos::IBusClient::CreateInputContextCallback callback_;
chromeos::IBusClient::ErrorCallback error_callback_;
};
Yusuke Sato 2012/08/07 20:03:44 disallow copy&assign
Seigo Nonaka 2012/08/08 04:32:52 Done.
@@ -358,6 +371,7 @@ TEST_F(InputMethodIBusTest, InitiallyConnected) {
// 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_TRUE(mock_ibus_input_context_client_->IsObjectProxyReady());
}
// Create ui::InputMethodIBus, then start ibus-daemon.
@@ -373,6 +387,7 @@ TEST_F(InputMethodIBusTest, InitiallyDisconnected) {
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_TRUE(mock_ibus_input_context_client_->IsObjectProxyReady());
}
// Confirm that ui::InputMethodIBus does not crash on "disconnected" signal
@@ -387,6 +402,7 @@ TEST_F(InputMethodIBusTest, Disconnect) {
// dynamical shutting down.
mock_dbus_thread_manager_->set_ibus_bus(NULL);
ime_->OnDisconnected();
+ EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
}
// Confirm that ui::InputMethodIBus re-creates an input context when ibus-daemon
@@ -401,6 +417,7 @@ TEST_F(InputMethodIBusTest, DisconnectThenReconnect) {
mock_ibus_input_context_client_->reset_object_proxy_call_caount());
mock_dbus_thread_manager_->set_ibus_bus(NULL);
ime_->OnDisconnected();
+ EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address");
ime_->OnConnected();
// Check if the old context is deleted.
@@ -409,6 +426,7 @@ TEST_F(InputMethodIBusTest, DisconnectThenReconnect) {
// 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_TRUE(mock_ibus_input_context_client_->IsObjectProxyReady());
}
// Confirm that ui::InputMethodIBus does not crash even if NULL context is
@@ -424,10 +442,14 @@ TEST_F(InputMethodIBusTest, CreateContextFail) {
chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address");
ime_->Init(true);
- EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count());
+ // InputMethodIBus tries several times if the CreateInputContext method call
+ // is failed.
+ EXPECT_EQ(kCreateInputContextMaxTrialCount,
+ mock_ibus_client_->create_input_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_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
}
// Confirm that ui::InputMethodIBus does not crash even if ibus-daemon does not
@@ -442,24 +464,105 @@ TEST_F(InputMethodIBusTest, CreateContextNoResp) {
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_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
+}
+
+// Confirm that ui::InputMethodIBus does not crash even if ibus-daemon responds
+// after ui::InputMethodIBus is deleted.
+TEST_F(InputMethodIBusTest, CreateContextFailDelayed) {
+ CreateInputContextDelayHandler create_input_context_handler(
+ dbus::ObjectPath("Sample object path"));
+ mock_ibus_client_->set_create_input_context_handler(base::Bind(
+ &CreateInputContextDelayHandler::Run,
+ base::Unretained(&create_input_context_handler)));
+
+ chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address");
+ 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_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
+
+ ime_->SetFocusedTextInputClient(NULL);
+ ime_.reset();
+ EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
+
+ create_input_context_handler.RunCallback(false);
+ EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count());
+ EXPECT_EQ(0, mock_ibus_input_context_client_->set_capabilities_call_count());
+ EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
}
// 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;
+// after ui::InputMethodIBus is deleted.
+TEST_F(InputMethodIBusTest, CreateContextSuccessDelayed) {
+ CreateInputContextDelayHandler create_input_context_handler(
+ dbus::ObjectPath("Sample object path"));
mock_ibus_client_->set_create_input_context_handler(base::Bind(
- &CreateInputContextDelayFailHandler::Run,
+ &CreateInputContextDelayHandler::Run,
base::Unretained(&create_input_context_handler)));
chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address");
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());
- // 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().
+ EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
+
+ ime_->SetFocusedTextInputClient(NULL);
+ ime_.reset();
+ EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
+
+ create_input_context_handler.RunCallback(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_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
+}
+
+// Confirm that ui::InputMethodIBus does not crash even if ibus-daemon responds
+// after disconnected from ibus-daemon.
+TEST_F(InputMethodIBusTest, CreateContextSuccessDelayedAfterDisconnection) {
+ CreateInputContextDelayHandler create_input_context_handler(
+ dbus::ObjectPath("Sample object path"));
+ mock_ibus_client_->set_create_input_context_handler(base::Bind(
+ &CreateInputContextDelayHandler::Run,
+ base::Unretained(&create_input_context_handler)));
+
+ chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address");
+ 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_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
+
+ ime_->OnDisconnected();
+ EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
+
+ create_input_context_handler.RunCallback(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_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
+}
+
+// Confirm that ui::InputMethodIBus does not crash even if ibus-daemon responds
+// after disconnected from ibus-daemon.
+TEST_F(InputMethodIBusTest, CreateContextFailDelayedAfterDisconnection) {
+ CreateInputContextDelayHandler create_input_context_handler(
+ dbus::ObjectPath("Sample object path"));
+ mock_ibus_client_->set_create_input_context_handler(base::Bind(
+ &CreateInputContextDelayHandler::Run,
+ base::Unretained(&create_input_context_handler)));
+
+ chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address");
+ 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_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
+
+ ime_->OnDisconnected();
+ EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
+
+ create_input_context_handler.RunCallback(false);
+ EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count());
+ EXPECT_EQ(0, mock_ibus_input_context_client_->set_capabilities_call_count());
+ EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
}
// Confirm that IBusClient::FocusIn is called on "connected" if input_type_ is
« ui/base/ime/input_method_ibus.cc ('K') | « ui/base/ime/input_method_ibus.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698