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

Side by Side 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 unified diff | Download patch
« no previous file with comments | « ui/base/ime/input_method_ibus.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <cstring> 5 #include <cstring>
6 6
7 #include "base/i18n/char_iterator.h" 7 #include "base/i18n/char_iterator.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/utf_string_conversions.h" 9 #include "base/utf_string_conversions.h"
10 #include "chromeos/dbus/dbus_thread_manager.h" 10 #include "chromeos/dbus/dbus_thread_manager.h"
11 #include "chromeos/dbus/ibus/ibus_text.h" 11 #include "chromeos/dbus/ibus/ibus_text.h"
12 #include "chromeos/dbus/ibus/mock_ibus_client.h" 12 #include "chromeos/dbus/ibus/mock_ibus_client.h"
13 #include "chromeos/dbus/ibus/mock_ibus_input_context_client.h" 13 #include "chromeos/dbus/ibus/mock_ibus_input_context_client.h"
14 #include "chromeos/dbus/mock_dbus_thread_manager_without_gmock.h" 14 #include "chromeos/dbus/mock_dbus_thread_manager_without_gmock.h"
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 #include "ui/base/ime/input_method_delegate.h" 16 #include "ui/base/ime/input_method_delegate.h"
17 #include "ui/base/ime/input_method_ibus.h" 17 #include "ui/base/ime/input_method_ibus.h"
18 #include "ui/base/ime/text_input_client.h" 18 #include "ui/base/ime/text_input_client.h"
19 #include "ui/gfx/rect.h" 19 #include "ui/gfx/rect.h"
20 20
21 namespace ui { 21 namespace ui {
22 namespace { 22 namespace {
23 const int kCreateInputContextMaxTrialCount = 10;
23 24
24 uint32 GetOffsetInUTF16(const std::string& utf8_string, uint32 utf8_offset) { 25 uint32 GetOffsetInUTF16(const std::string& utf8_string, uint32 utf8_offset) {
25 string16 utf16_string = UTF8ToUTF16(utf8_string); 26 string16 utf16_string = UTF8ToUTF16(utf8_string);
26 DCHECK_LT(utf8_offset, utf16_string.size()); 27 DCHECK_LT(utf8_offset, utf16_string.size());
27 base::i18n::UTF16CharIterator char_iterator(&utf16_string); 28 base::i18n::UTF16CharIterator char_iterator(&utf16_string);
28 for (size_t i = 0; i < utf8_offset; ++i) 29 for (size_t i = 0; i < utf8_offset; ++i)
29 char_iterator.Advance(); 30 char_iterator.Advance();
30 return char_iterator.array_pos(); 31 return char_iterator.array_pos();
31 } 32 }
32 33
(...skipping 18 matching lines...) Expand all
51 52
52 void Run(const std::string& client_name, 53 void Run(const std::string& client_name,
53 const chromeos::IBusClient::CreateInputContextCallback& callback, 54 const chromeos::IBusClient::CreateInputContextCallback& callback,
54 const chromeos::IBusClient::ErrorCallback& error_callback) { 55 const chromeos::IBusClient::ErrorCallback& error_callback) {
55 EXPECT_EQ("chrome", client_name); 56 EXPECT_EQ("chrome", client_name);
56 callback.Run(object_path_); 57 callback.Run(object_path_);
57 } 58 }
58 59
59 private: 60 private:
60 dbus::ObjectPath object_path_; 61 dbus::ObjectPath object_path_;
62
63 DISALLOW_COPY_AND_ASSIGN(CreateInputContextSuccessHandler);
61 }; 64 };
62 65
63 class CreateInputContextFailHandler { 66 class CreateInputContextFailHandler {
64 public: 67 public:
68 CreateInputContextFailHandler() {}
65 void Run(const std::string& client_name, 69 void Run(const std::string& client_name,
66 const chromeos::IBusClient::CreateInputContextCallback& callback, 70 const chromeos::IBusClient::CreateInputContextCallback& callback,
67 const chromeos::IBusClient::ErrorCallback& error_callback) { 71 const chromeos::IBusClient::ErrorCallback& error_callback) {
68 error_callback.Run(); 72 error_callback.Run();
69 } 73 }
74
75 private:
76 DISALLOW_COPY_AND_ASSIGN(CreateInputContextFailHandler);
70 }; 77 };
71 78
72 class CreateInputContextNoResponseHandler { 79 class CreateInputContextNoResponseHandler {
73 public: 80 public:
81 CreateInputContextNoResponseHandler() {}
74 void Run(const std::string& client_name, 82 void Run(const std::string& client_name,
75 const chromeos::IBusClient::CreateInputContextCallback& callback, 83 const chromeos::IBusClient::CreateInputContextCallback& callback,
76 const chromeos::IBusClient::ErrorCallback& error_callback) { 84 const chromeos::IBusClient::ErrorCallback& error_callback) {
77 } 85 }
86
87 private:
88 DISALLOW_COPY_AND_ASSIGN(CreateInputContextNoResponseHandler);
78 }; 89 };
79 90
80 class CreateInputContextDelayFailHandler { 91 class CreateInputContextDelayHandler {
81 public: 92 public:
82 ~CreateInputContextDelayFailHandler() { 93 explicit CreateInputContextDelayHandler(const dbus::ObjectPath& object_path)
83 error_callback_.Run(); 94 : object_path_(object_path) {
84 } 95 }
85 96
86 void Run(const std::string& client_name, 97 void Run(const std::string& client_name,
87 const chromeos::IBusClient::CreateInputContextCallback& callback, 98 const chromeos::IBusClient::CreateInputContextCallback& callback,
88 const chromeos::IBusClient::ErrorCallback& error_callback) { 99 const chromeos::IBusClient::ErrorCallback& error_callback) {
100 callback_ = callback;
89 error_callback_ = error_callback; 101 error_callback_ = error_callback;
90 } 102 }
91 103
104 void RunCallback(bool success) {
105 if (success)
106 callback_.Run(object_path_);
107 else
108 error_callback_.Run();
109 }
110
111 private:
112 dbus::ObjectPath object_path_;
113 chromeos::IBusClient::CreateInputContextCallback callback_;
92 chromeos::IBusClient::ErrorCallback error_callback_; 114 chromeos::IBusClient::ErrorCallback error_callback_;
115
116 DISALLOW_COPY_AND_ASSIGN(CreateInputContextDelayHandler);
93 }; 117 };
94 118
95 class InputMethodIBusTest : public internal::InputMethodDelegate, 119 class InputMethodIBusTest : public internal::InputMethodDelegate,
96 public testing::Test, 120 public testing::Test,
97 public TextInputClient { 121 public TextInputClient {
98 public: 122 public:
99 InputMethodIBusTest() { 123 InputMethodIBusTest() {
100 ResetFlags(); 124 ResetFlags();
101 } 125 }
102 126
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 270
247 // Variables that will be returned from the ui::TextInputClient functions. 271 // Variables that will be returned from the ui::TextInputClient functions.
248 TextInputType input_type_; 272 TextInputType input_type_;
249 bool can_compose_inline_; 273 bool can_compose_inline_;
250 gfx::Rect caret_bounds_; 274 gfx::Rect caret_bounds_;
251 275
252 // Variables for mock dbus connections. 276 // Variables for mock dbus connections.
253 chromeos::MockDBusThreadManagerWithoutGMock* mock_dbus_thread_manager_; 277 chromeos::MockDBusThreadManagerWithoutGMock* mock_dbus_thread_manager_;
254 chromeos::MockIBusClient* mock_ibus_client_; 278 chromeos::MockIBusClient* mock_ibus_client_;
255 chromeos::MockIBusInputContextClient* mock_ibus_input_context_client_; 279 chromeos::MockIBusInputContextClient* mock_ibus_input_context_client_;
280
281 DISALLOW_COPY_AND_ASSIGN(InputMethodIBusTest);
256 }; 282 };
257 283
258 // Tests public APIs in ui::InputMethod first. 284 // Tests public APIs in ui::InputMethod first.
259 285
260 TEST_F(InputMethodIBusTest, GetInputLocale) { 286 TEST_F(InputMethodIBusTest, GetInputLocale) {
261 // ui::InputMethodIBus does not support the API. 287 // ui::InputMethodIBus does not support the API.
262 ime_->Init(true); 288 ime_->Init(true);
263 EXPECT_EQ("", ime_->GetInputLocale()); 289 EXPECT_EQ("", ime_->GetInputLocale());
264 } 290 }
265 291
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 TEST_F(InputMethodIBusTest, InitiallyConnected) { 377 TEST_F(InputMethodIBusTest, InitiallyConnected) {
352 SetCreateContextSuccessHandler(); 378 SetCreateContextSuccessHandler();
353 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address"); 379 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address");
354 ime_->Init(true); 380 ime_->Init(true);
355 // An input context should be created immediately since is_connected_ is true. 381 // An input context should be created immediately since is_connected_ is true.
356 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count()); 382 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count());
357 EXPECT_EQ(1, mock_ibus_input_context_client_->set_capabilities_call_count()); 383 EXPECT_EQ(1, mock_ibus_input_context_client_->set_capabilities_call_count());
358 // However, since the current text input type is 'NONE' (the default), FocusIn 384 // However, since the current text input type is 'NONE' (the default), FocusIn
359 // shouldn't be called. 385 // shouldn't be called.
360 EXPECT_EQ(0, mock_ibus_input_context_client_->focus_in_call_count()); 386 EXPECT_EQ(0, mock_ibus_input_context_client_->focus_in_call_count());
387 EXPECT_TRUE(mock_ibus_input_context_client_->IsObjectProxyReady());
361 } 388 }
362 389
363 // Create ui::InputMethodIBus, then start ibus-daemon. 390 // Create ui::InputMethodIBus, then start ibus-daemon.
364 TEST_F(InputMethodIBusTest, InitiallyDisconnected) { 391 TEST_F(InputMethodIBusTest, InitiallyDisconnected) {
365 SetCreateContextSuccessHandler(); 392 SetCreateContextSuccessHandler();
366 ime_->Init(true); 393 ime_->Init(true);
367 // A context shouldn't be created since the daemon is not running. 394 // A context shouldn't be created since the daemon is not running.
368 EXPECT_EQ(0, mock_ibus_client_->create_input_context_call_count()); 395 EXPECT_EQ(0, mock_ibus_client_->create_input_context_call_count());
369 // Start the daemon. 396 // Start the daemon.
370 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address"); 397 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address");
371 ime_->OnConnected(); 398 ime_->OnConnected();
372 // A context should be created upon the signal delivery. 399 // A context should be created upon the signal delivery.
373 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count()); 400 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count());
374 EXPECT_EQ(1, mock_ibus_input_context_client_->set_capabilities_call_count()); 401 EXPECT_EQ(1, mock_ibus_input_context_client_->set_capabilities_call_count());
375 EXPECT_EQ(0, mock_ibus_input_context_client_->focus_in_call_count()); 402 EXPECT_EQ(0, mock_ibus_input_context_client_->focus_in_call_count());
403 EXPECT_TRUE(mock_ibus_input_context_client_->IsObjectProxyReady());
376 } 404 }
377 405
378 // Confirm that ui::InputMethodIBus does not crash on "disconnected" signal 406 // Confirm that ui::InputMethodIBus does not crash on "disconnected" signal
379 // delivery. 407 // delivery.
380 TEST_F(InputMethodIBusTest, Disconnect) { 408 TEST_F(InputMethodIBusTest, Disconnect) {
381 SetCreateContextSuccessHandler(); 409 SetCreateContextSuccessHandler();
382 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address"); 410 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address");
383 ime_->Init(true); 411 ime_->Init(true);
384 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count()); 412 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count());
385 // Currently we can't shutdown IBusBus connection except in 413 // Currently we can't shutdown IBusBus connection except in
386 // DBusThreadManager's shutting down. So set ibus_bus_ as NULL to emulate 414 // DBusThreadManager's shutting down. So set ibus_bus_ as NULL to emulate
387 // dynamical shutting down. 415 // dynamical shutting down.
388 mock_dbus_thread_manager_->set_ibus_bus(NULL); 416 mock_dbus_thread_manager_->set_ibus_bus(NULL);
389 ime_->OnDisconnected(); 417 ime_->OnDisconnected();
418 EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
390 } 419 }
391 420
392 // Confirm that ui::InputMethodIBus re-creates an input context when ibus-daemon 421 // Confirm that ui::InputMethodIBus re-creates an input context when ibus-daemon
393 // restarts. 422 // restarts.
394 TEST_F(InputMethodIBusTest, DisconnectThenReconnect) { 423 TEST_F(InputMethodIBusTest, DisconnectThenReconnect) {
395 SetCreateContextSuccessHandler(); 424 SetCreateContextSuccessHandler();
396 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address"); 425 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address");
397 ime_->Init(true); 426 ime_->Init(true);
398 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count()); 427 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count());
399 EXPECT_EQ(1, mock_ibus_input_context_client_->set_capabilities_call_count()); 428 EXPECT_EQ(1, mock_ibus_input_context_client_->set_capabilities_call_count());
400 EXPECT_EQ(0, 429 EXPECT_EQ(0,
401 mock_ibus_input_context_client_->reset_object_proxy_call_caount()); 430 mock_ibus_input_context_client_->reset_object_proxy_call_caount());
402 mock_dbus_thread_manager_->set_ibus_bus(NULL); 431 mock_dbus_thread_manager_->set_ibus_bus(NULL);
403 ime_->OnDisconnected(); 432 ime_->OnDisconnected();
433 EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
404 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address"); 434 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address");
405 ime_->OnConnected(); 435 ime_->OnConnected();
406 // Check if the old context is deleted. 436 // Check if the old context is deleted.
407 EXPECT_EQ(1, 437 EXPECT_EQ(1,
408 mock_ibus_input_context_client_->reset_object_proxy_call_caount()); 438 mock_ibus_input_context_client_->reset_object_proxy_call_caount());
409 // Check if a new context is created. 439 // Check if a new context is created.
410 EXPECT_EQ(2, mock_ibus_client_->create_input_context_call_count()); 440 EXPECT_EQ(2, mock_ibus_client_->create_input_context_call_count());
411 EXPECT_EQ(2, mock_ibus_input_context_client_->set_capabilities_call_count()); 441 EXPECT_EQ(2, mock_ibus_input_context_client_->set_capabilities_call_count());
442 EXPECT_TRUE(mock_ibus_input_context_client_->IsObjectProxyReady());
412 } 443 }
413 444
414 // Confirm that ui::InputMethodIBus does not crash even if NULL context is 445 // Confirm that ui::InputMethodIBus does not crash even if NULL context is
415 // passed. 446 // passed.
416 // TODO(yusukes): Currently, ui::InputMethodIBus does not try to create ic once 447 // TODO(yusukes): Currently, ui::InputMethodIBus does not try to create ic once
417 // it fails (unless ibus sends the "connected" signal to Chrome again). It might 448 // it fails (unless ibus sends the "connected" signal to Chrome again). It might
418 // be better to add some retry logic. Will revisit later. 449 // be better to add some retry logic. Will revisit later.
419 TEST_F(InputMethodIBusTest, CreateContextFail) { 450 TEST_F(InputMethodIBusTest, CreateContextFail) {
420 CreateInputContextFailHandler create_input_context_handler; 451 CreateInputContextFailHandler create_input_context_handler;
421 mock_ibus_client_->set_create_input_context_handler(base::Bind( 452 mock_ibus_client_->set_create_input_context_handler(base::Bind(
422 &CreateInputContextFailHandler::Run, 453 &CreateInputContextFailHandler::Run,
423 base::Unretained(&create_input_context_handler))); 454 base::Unretained(&create_input_context_handler)));
424 455
425 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address"); 456 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address");
426 ime_->Init(true); 457 ime_->Init(true);
427 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count()); 458 // InputMethodIBus tries several times if the CreateInputContext method call
459 // is failed.
460 EXPECT_EQ(kCreateInputContextMaxTrialCount,
461 mock_ibus_client_->create_input_context_call_count());
428 // |set_capabilities_call_count()| should be zero since a context is not 462 // |set_capabilities_call_count()| should be zero since a context is not
429 // created yet. 463 // created yet.
430 EXPECT_EQ(0, mock_ibus_input_context_client_->set_capabilities_call_count()); 464 EXPECT_EQ(0, mock_ibus_input_context_client_->set_capabilities_call_count());
465 EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
431 } 466 }
432 467
433 // Confirm that ui::InputMethodIBus does not crash even if ibus-daemon does not 468 // Confirm that ui::InputMethodIBus does not crash even if ibus-daemon does not
434 // respond. 469 // respond.
435 TEST_F(InputMethodIBusTest, CreateContextNoResp) { 470 TEST_F(InputMethodIBusTest, CreateContextNoResp) {
436 CreateInputContextNoResponseHandler create_input_context_handler; 471 CreateInputContextNoResponseHandler create_input_context_handler;
437 mock_ibus_client_->set_create_input_context_handler(base::Bind( 472 mock_ibus_client_->set_create_input_context_handler(base::Bind(
438 &CreateInputContextNoResponseHandler::Run, 473 &CreateInputContextNoResponseHandler::Run,
439 base::Unretained(&create_input_context_handler))); 474 base::Unretained(&create_input_context_handler)));
440 475
441 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address"); 476 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address");
442 ime_->Init(true); 477 ime_->Init(true);
443 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count()); 478 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count());
444 EXPECT_EQ(0, mock_ibus_input_context_client_->set_capabilities_call_count()); 479 EXPECT_EQ(0, mock_ibus_input_context_client_->set_capabilities_call_count());
480 EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
445 } 481 }
446 482
447 // Confirm that ui::InputMethodIBus does not crash even if ibus-daemon responds 483 // Confirm that ui::InputMethodIBus does not crash even if ibus-daemon responds
448 // after ui::InputMethodIBus is deleted. See comments in ~MockIBusClient() as 484 // after ui::InputMethodIBus is deleted.
449 // well. 485 TEST_F(InputMethodIBusTest, CreateContextFailDelayed) {
450 TEST_F(InputMethodIBusTest, CreateContextDelayed) { 486 CreateInputContextDelayHandler create_input_context_handler(
451 CreateInputContextDelayFailHandler create_input_context_handler; 487 dbus::ObjectPath("Sample object path"));
452 mock_ibus_client_->set_create_input_context_handler(base::Bind( 488 mock_ibus_client_->set_create_input_context_handler(base::Bind(
453 &CreateInputContextDelayFailHandler::Run, 489 &CreateInputContextDelayHandler::Run,
454 base::Unretained(&create_input_context_handler))); 490 base::Unretained(&create_input_context_handler)));
455 491
456 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address"); 492 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address");
457 ime_->Init(true); 493 ime_->Init(true);
458 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count()); 494 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count());
459 EXPECT_EQ(0, mock_ibus_input_context_client_->set_capabilities_call_count()); 495 EXPECT_EQ(0, mock_ibus_input_context_client_->set_capabilities_call_count());
460 // After this line, the destructor for |ime_| will run first. Then, the 496 EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
461 // destructor for the handler will run. In the latter function, a new input 497
462 // context will be created and passed to InitOrAbandonInputContext(). 498 ime_->SetFocusedTextInputClient(NULL);
499 ime_.reset();
500 EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
501
502 create_input_context_handler.RunCallback(false);
503 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count());
504 EXPECT_EQ(0, mock_ibus_input_context_client_->set_capabilities_call_count());
505 EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
506 }
507
508 // Confirm that ui::InputMethodIBus does not crash even if ibus-daemon responds
509 // after ui::InputMethodIBus is deleted.
510 TEST_F(InputMethodIBusTest, CreateContextSuccessDelayed) {
511 CreateInputContextDelayHandler create_input_context_handler(
512 dbus::ObjectPath("Sample object path"));
513 mock_ibus_client_->set_create_input_context_handler(base::Bind(
514 &CreateInputContextDelayHandler::Run,
515 base::Unretained(&create_input_context_handler)));
516
517 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address");
518 ime_->Init(true);
519 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count());
520 EXPECT_EQ(0, mock_ibus_input_context_client_->set_capabilities_call_count());
521 EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
522
523 ime_->SetFocusedTextInputClient(NULL);
524 ime_.reset();
525 EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
526
527 create_input_context_handler.RunCallback(true);
528 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count());
529 EXPECT_EQ(0, mock_ibus_input_context_client_->set_capabilities_call_count());
530 EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
531 }
532
533 // Confirm that ui::InputMethodIBus does not crash even if ibus-daemon responds
534 // after disconnected from ibus-daemon.
535 TEST_F(InputMethodIBusTest, CreateContextSuccessDelayedAfterDisconnection) {
536 CreateInputContextDelayHandler create_input_context_handler(
537 dbus::ObjectPath("Sample object path"));
538 mock_ibus_client_->set_create_input_context_handler(base::Bind(
539 &CreateInputContextDelayHandler::Run,
540 base::Unretained(&create_input_context_handler)));
541
542 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address");
543 ime_->Init(true);
544 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count());
545 EXPECT_EQ(0, mock_ibus_input_context_client_->set_capabilities_call_count());
546 EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
547
548 ime_->OnDisconnected();
549 EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
550
551 create_input_context_handler.RunCallback(true);
552 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count());
553 EXPECT_EQ(0, mock_ibus_input_context_client_->set_capabilities_call_count());
554 EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
555 }
556
557 // Confirm that ui::InputMethodIBus does not crash even if ibus-daemon responds
558 // after disconnected from ibus-daemon.
559 TEST_F(InputMethodIBusTest, CreateContextFailDelayedAfterDisconnection) {
560 CreateInputContextDelayHandler create_input_context_handler(
561 dbus::ObjectPath("Sample object path"));
562 mock_ibus_client_->set_create_input_context_handler(base::Bind(
563 &CreateInputContextDelayHandler::Run,
564 base::Unretained(&create_input_context_handler)));
565
566 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address");
567 ime_->Init(true);
568 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count());
569 EXPECT_EQ(0, mock_ibus_input_context_client_->set_capabilities_call_count());
570 EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
571
572 ime_->OnDisconnected();
573 EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
574
575 create_input_context_handler.RunCallback(false);
576 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count());
577 EXPECT_EQ(0, mock_ibus_input_context_client_->set_capabilities_call_count());
578 EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
463 } 579 }
464 580
465 // Confirm that IBusClient::FocusIn is called on "connected" if input_type_ is 581 // Confirm that IBusClient::FocusIn is called on "connected" if input_type_ is
466 // TEXT. 582 // TEXT.
467 TEST_F(InputMethodIBusTest, FocusIn_Text) { 583 TEST_F(InputMethodIBusTest, FocusIn_Text) {
468 SetCreateContextSuccessHandler(); 584 SetCreateContextSuccessHandler();
469 ime_->Init(true); 585 ime_->Init(true);
470 // A context shouldn't be created since the daemon is not running. 586 // A context shouldn't be created since the daemon is not running.
471 EXPECT_EQ(0, mock_ibus_client_->create_input_context_call_count()); 587 EXPECT_EQ(0, mock_ibus_client_->create_input_context_call_count());
472 EXPECT_EQ(0U, on_input_method_changed_call_count_); 588 EXPECT_EQ(0U, on_input_method_changed_call_count_);
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after
771 composition_text.underlines[0].start_offset); 887 composition_text.underlines[0].start_offset);
772 EXPECT_EQ(GetOffsetInUTF16(kSampleText, selection.end_index), 888 EXPECT_EQ(GetOffsetInUTF16(kSampleText, selection.end_index),
773 composition_text.underlines[0].end_offset); 889 composition_text.underlines[0].end_offset);
774 EXPECT_EQ(SK_ColorBLACK, composition_text.underlines[0].color); 890 EXPECT_EQ(SK_ColorBLACK, composition_text.underlines[0].color);
775 EXPECT_TRUE(composition_text.underlines[0].thick); 891 EXPECT_TRUE(composition_text.underlines[0].thick);
776 } 892 }
777 893
778 // TODO(nona): Write more tests, especially for key event functions. 894 // TODO(nona): Write more tests, especially for key event functions.
779 895
780 } // namespace ui 896 } // namespace ui
OLDNEW
« no previous file with comments | « 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