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

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
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 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 }; 71 };
71 72
72 class CreateInputContextNoResponseHandler { 73 class CreateInputContextNoResponseHandler {
73 public: 74 public:
74 void Run(const std::string& client_name, 75 void Run(const std::string& client_name,
75 const chromeos::IBusClient::CreateInputContextCallback& callback, 76 const chromeos::IBusClient::CreateInputContextCallback& callback,
76 const chromeos::IBusClient::ErrorCallback& error_callback) { 77 const chromeos::IBusClient::ErrorCallback& error_callback) {
77 } 78 }
78 }; 79 };
79 80
80 class CreateInputContextDelayFailHandler { 81 class CreateInputContextDelayHandler {
81 public: 82 public:
82 ~CreateInputContextDelayFailHandler() { 83 explicit CreateInputContextDelayHandler(const dbus::ObjectPath& object_path)
83 error_callback_.Run(); 84 : object_path_(object_path) {
84 } 85 }
85 86
86 void Run(const std::string& client_name, 87 void Run(const std::string& client_name,
87 const chromeos::IBusClient::CreateInputContextCallback& callback, 88 const chromeos::IBusClient::CreateInputContextCallback& callback,
88 const chromeos::IBusClient::ErrorCallback& error_callback) { 89 const chromeos::IBusClient::ErrorCallback& error_callback) {
90 callback_ = callback;
89 error_callback_ = error_callback; 91 error_callback_ = error_callback;
90 } 92 }
91 93
94 void RunCallback(bool success) {
95 if (success) {
Yusuke Sato 2012/08/07 20:03:44 remove {}
Seigo Nonaka 2012/08/08 04:32:52 Done.
96 callback_.Run(object_path_);
97 } else {
Yusuke Sato 2012/08/07 20:03:44 remove }{
Seigo Nonaka 2012/08/08 04:32:52 Done.
98 error_callback_.Run();
99 }
100 }
101
102 private:
103 dbus::ObjectPath object_path_;
104 chromeos::IBusClient::CreateInputContextCallback callback_;
92 chromeos::IBusClient::ErrorCallback error_callback_; 105 chromeos::IBusClient::ErrorCallback error_callback_;
93 }; 106 };
Yusuke Sato 2012/08/07 20:03:44 disallow copy&assign
Seigo Nonaka 2012/08/08 04:32:52 Done.
94 107
95 class InputMethodIBusTest : public internal::InputMethodDelegate, 108 class InputMethodIBusTest : public internal::InputMethodDelegate,
96 public testing::Test, 109 public testing::Test,
97 public TextInputClient { 110 public TextInputClient {
98 public: 111 public:
99 InputMethodIBusTest() { 112 InputMethodIBusTest() {
100 ResetFlags(); 113 ResetFlags();
101 } 114 }
102 115
103 virtual ~InputMethodIBusTest() { 116 virtual ~InputMethodIBusTest() {
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 259
247 // Variables that will be returned from the ui::TextInputClient functions. 260 // Variables that will be returned from the ui::TextInputClient functions.
248 TextInputType input_type_; 261 TextInputType input_type_;
249 bool can_compose_inline_; 262 bool can_compose_inline_;
250 gfx::Rect caret_bounds_; 263 gfx::Rect caret_bounds_;
251 264
252 // Variables for mock dbus connections. 265 // Variables for mock dbus connections.
253 chromeos::MockDBusThreadManagerWithoutGMock* mock_dbus_thread_manager_; 266 chromeos::MockDBusThreadManagerWithoutGMock* mock_dbus_thread_manager_;
254 chromeos::MockIBusClient* mock_ibus_client_; 267 chromeos::MockIBusClient* mock_ibus_client_;
255 chromeos::MockIBusInputContextClient* mock_ibus_input_context_client_; 268 chromeos::MockIBusInputContextClient* mock_ibus_input_context_client_;
256 }; 269 };
Yusuke Sato 2012/08/07 20:03:44 disallow copy&assign
Seigo Nonaka 2012/08/08 04:32:52 Done.
257 270
258 // Tests public APIs in ui::InputMethod first. 271 // Tests public APIs in ui::InputMethod first.
259 272
260 TEST_F(InputMethodIBusTest, GetInputLocale) { 273 TEST_F(InputMethodIBusTest, GetInputLocale) {
261 // ui::InputMethodIBus does not support the API. 274 // ui::InputMethodIBus does not support the API.
262 ime_->Init(true); 275 ime_->Init(true);
263 EXPECT_EQ("", ime_->GetInputLocale()); 276 EXPECT_EQ("", ime_->GetInputLocale());
264 } 277 }
265 278
266 TEST_F(InputMethodIBusTest, GetInputTextDirection) { 279 TEST_F(InputMethodIBusTest, GetInputTextDirection) {
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 TEST_F(InputMethodIBusTest, InitiallyConnected) { 364 TEST_F(InputMethodIBusTest, InitiallyConnected) {
352 SetCreateContextSuccessHandler(); 365 SetCreateContextSuccessHandler();
353 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address"); 366 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address");
354 ime_->Init(true); 367 ime_->Init(true);
355 // An input context should be created immediately since is_connected_ is true. 368 // An input context should be created immediately since is_connected_ is true.
356 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count()); 369 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count());
357 EXPECT_EQ(1, mock_ibus_input_context_client_->set_capabilities_call_count()); 370 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 371 // However, since the current text input type is 'NONE' (the default), FocusIn
359 // shouldn't be called. 372 // shouldn't be called.
360 EXPECT_EQ(0, mock_ibus_input_context_client_->focus_in_call_count()); 373 EXPECT_EQ(0, mock_ibus_input_context_client_->focus_in_call_count());
374 EXPECT_TRUE(mock_ibus_input_context_client_->IsObjectProxyReady());
361 } 375 }
362 376
363 // Create ui::InputMethodIBus, then start ibus-daemon. 377 // Create ui::InputMethodIBus, then start ibus-daemon.
364 TEST_F(InputMethodIBusTest, InitiallyDisconnected) { 378 TEST_F(InputMethodIBusTest, InitiallyDisconnected) {
365 SetCreateContextSuccessHandler(); 379 SetCreateContextSuccessHandler();
366 ime_->Init(true); 380 ime_->Init(true);
367 // A context shouldn't be created since the daemon is not running. 381 // A context shouldn't be created since the daemon is not running.
368 EXPECT_EQ(0, mock_ibus_client_->create_input_context_call_count()); 382 EXPECT_EQ(0, mock_ibus_client_->create_input_context_call_count());
369 // Start the daemon. 383 // Start the daemon.
370 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address"); 384 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address");
371 ime_->OnConnected(); 385 ime_->OnConnected();
372 // A context should be created upon the signal delivery. 386 // A context should be created upon the signal delivery.
373 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count()); 387 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count());
374 EXPECT_EQ(1, mock_ibus_input_context_client_->set_capabilities_call_count()); 388 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()); 389 EXPECT_EQ(0, mock_ibus_input_context_client_->focus_in_call_count());
390 EXPECT_TRUE(mock_ibus_input_context_client_->IsObjectProxyReady());
376 } 391 }
377 392
378 // Confirm that ui::InputMethodIBus does not crash on "disconnected" signal 393 // Confirm that ui::InputMethodIBus does not crash on "disconnected" signal
379 // delivery. 394 // delivery.
380 TEST_F(InputMethodIBusTest, Disconnect) { 395 TEST_F(InputMethodIBusTest, Disconnect) {
381 SetCreateContextSuccessHandler(); 396 SetCreateContextSuccessHandler();
382 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address"); 397 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address");
383 ime_->Init(true); 398 ime_->Init(true);
384 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count()); 399 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count());
385 // Currently we can't shutdown IBusBus connection except in 400 // Currently we can't shutdown IBusBus connection except in
386 // DBusThreadManager's shutting down. So set ibus_bus_ as NULL to emulate 401 // DBusThreadManager's shutting down. So set ibus_bus_ as NULL to emulate
387 // dynamical shutting down. 402 // dynamical shutting down.
388 mock_dbus_thread_manager_->set_ibus_bus(NULL); 403 mock_dbus_thread_manager_->set_ibus_bus(NULL);
389 ime_->OnDisconnected(); 404 ime_->OnDisconnected();
405 EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
390 } 406 }
391 407
392 // Confirm that ui::InputMethodIBus re-creates an input context when ibus-daemon 408 // Confirm that ui::InputMethodIBus re-creates an input context when ibus-daemon
393 // restarts. 409 // restarts.
394 TEST_F(InputMethodIBusTest, DisconnectThenReconnect) { 410 TEST_F(InputMethodIBusTest, DisconnectThenReconnect) {
395 SetCreateContextSuccessHandler(); 411 SetCreateContextSuccessHandler();
396 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address"); 412 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address");
397 ime_->Init(true); 413 ime_->Init(true);
398 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count()); 414 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count());
399 EXPECT_EQ(1, mock_ibus_input_context_client_->set_capabilities_call_count()); 415 EXPECT_EQ(1, mock_ibus_input_context_client_->set_capabilities_call_count());
400 EXPECT_EQ(0, 416 EXPECT_EQ(0,
401 mock_ibus_input_context_client_->reset_object_proxy_call_caount()); 417 mock_ibus_input_context_client_->reset_object_proxy_call_caount());
402 mock_dbus_thread_manager_->set_ibus_bus(NULL); 418 mock_dbus_thread_manager_->set_ibus_bus(NULL);
403 ime_->OnDisconnected(); 419 ime_->OnDisconnected();
420 EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
404 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address"); 421 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address");
405 ime_->OnConnected(); 422 ime_->OnConnected();
406 // Check if the old context is deleted. 423 // Check if the old context is deleted.
407 EXPECT_EQ(1, 424 EXPECT_EQ(1,
408 mock_ibus_input_context_client_->reset_object_proxy_call_caount()); 425 mock_ibus_input_context_client_->reset_object_proxy_call_caount());
409 // Check if a new context is created. 426 // Check if a new context is created.
410 EXPECT_EQ(2, mock_ibus_client_->create_input_context_call_count()); 427 EXPECT_EQ(2, mock_ibus_client_->create_input_context_call_count());
411 EXPECT_EQ(2, mock_ibus_input_context_client_->set_capabilities_call_count()); 428 EXPECT_EQ(2, mock_ibus_input_context_client_->set_capabilities_call_count());
429 EXPECT_TRUE(mock_ibus_input_context_client_->IsObjectProxyReady());
412 } 430 }
413 431
414 // Confirm that ui::InputMethodIBus does not crash even if NULL context is 432 // Confirm that ui::InputMethodIBus does not crash even if NULL context is
415 // passed. 433 // passed.
416 // TODO(yusukes): Currently, ui::InputMethodIBus does not try to create ic once 434 // 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 435 // it fails (unless ibus sends the "connected" signal to Chrome again). It might
418 // be better to add some retry logic. Will revisit later. 436 // be better to add some retry logic. Will revisit later.
419 TEST_F(InputMethodIBusTest, CreateContextFail) { 437 TEST_F(InputMethodIBusTest, CreateContextFail) {
420 CreateInputContextFailHandler create_input_context_handler; 438 CreateInputContextFailHandler create_input_context_handler;
421 mock_ibus_client_->set_create_input_context_handler(base::Bind( 439 mock_ibus_client_->set_create_input_context_handler(base::Bind(
422 &CreateInputContextFailHandler::Run, 440 &CreateInputContextFailHandler::Run,
423 base::Unretained(&create_input_context_handler))); 441 base::Unretained(&create_input_context_handler)));
424 442
425 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address"); 443 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address");
426 ime_->Init(true); 444 ime_->Init(true);
427 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count()); 445 // InputMethodIBus tries several times if the CreateInputContext method call
446 // is failed.
447 EXPECT_EQ(kCreateInputContextMaxTrialCount,
448 mock_ibus_client_->create_input_context_call_count());
428 // |set_capabilities_call_count()| should be zero since a context is not 449 // |set_capabilities_call_count()| should be zero since a context is not
429 // created yet. 450 // created yet.
430 EXPECT_EQ(0, mock_ibus_input_context_client_->set_capabilities_call_count()); 451 EXPECT_EQ(0, mock_ibus_input_context_client_->set_capabilities_call_count());
452 EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
431 } 453 }
432 454
433 // Confirm that ui::InputMethodIBus does not crash even if ibus-daemon does not 455 // Confirm that ui::InputMethodIBus does not crash even if ibus-daemon does not
434 // respond. 456 // respond.
435 TEST_F(InputMethodIBusTest, CreateContextNoResp) { 457 TEST_F(InputMethodIBusTest, CreateContextNoResp) {
436 CreateInputContextNoResponseHandler create_input_context_handler; 458 CreateInputContextNoResponseHandler create_input_context_handler;
437 mock_ibus_client_->set_create_input_context_handler(base::Bind( 459 mock_ibus_client_->set_create_input_context_handler(base::Bind(
438 &CreateInputContextNoResponseHandler::Run, 460 &CreateInputContextNoResponseHandler::Run,
439 base::Unretained(&create_input_context_handler))); 461 base::Unretained(&create_input_context_handler)));
440 462
441 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address"); 463 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address");
442 ime_->Init(true); 464 ime_->Init(true);
443 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count()); 465 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count());
444 EXPECT_EQ(0, mock_ibus_input_context_client_->set_capabilities_call_count()); 466 EXPECT_EQ(0, mock_ibus_input_context_client_->set_capabilities_call_count());
467 EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
445 } 468 }
446 469
447 // Confirm that ui::InputMethodIBus does not crash even if ibus-daemon responds 470 // Confirm that ui::InputMethodIBus does not crash even if ibus-daemon responds
448 // after ui::InputMethodIBus is deleted. See comments in ~MockIBusClient() as 471 // after ui::InputMethodIBus is deleted.
449 // well. 472 TEST_F(InputMethodIBusTest, CreateContextFailDelayed) {
450 TEST_F(InputMethodIBusTest, CreateContextDelayed) { 473 CreateInputContextDelayHandler create_input_context_handler(
451 CreateInputContextDelayFailHandler create_input_context_handler; 474 dbus::ObjectPath("Sample object path"));
452 mock_ibus_client_->set_create_input_context_handler(base::Bind( 475 mock_ibus_client_->set_create_input_context_handler(base::Bind(
453 &CreateInputContextDelayFailHandler::Run, 476 &CreateInputContextDelayHandler::Run,
454 base::Unretained(&create_input_context_handler))); 477 base::Unretained(&create_input_context_handler)));
455 478
456 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address"); 479 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address");
457 ime_->Init(true); 480 ime_->Init(true);
458 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count()); 481 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count());
459 EXPECT_EQ(0, mock_ibus_input_context_client_->set_capabilities_call_count()); 482 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 483 EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
461 // destructor for the handler will run. In the latter function, a new input 484
462 // context will be created and passed to InitOrAbandonInputContext(). 485 ime_->SetFocusedTextInputClient(NULL);
486 ime_.reset();
487 EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
488
489 create_input_context_handler.RunCallback(false);
490 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count());
491 EXPECT_EQ(0, mock_ibus_input_context_client_->set_capabilities_call_count());
492 EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
493 }
494
495 // Confirm that ui::InputMethodIBus does not crash even if ibus-daemon responds
496 // after ui::InputMethodIBus is deleted.
497 TEST_F(InputMethodIBusTest, CreateContextSuccessDelayed) {
498 CreateInputContextDelayHandler create_input_context_handler(
499 dbus::ObjectPath("Sample object path"));
500 mock_ibus_client_->set_create_input_context_handler(base::Bind(
501 &CreateInputContextDelayHandler::Run,
502 base::Unretained(&create_input_context_handler)));
503
504 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address");
505 ime_->Init(true);
506 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count());
507 EXPECT_EQ(0, mock_ibus_input_context_client_->set_capabilities_call_count());
508 EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
509
510 ime_->SetFocusedTextInputClient(NULL);
511 ime_.reset();
512 EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
513
514 create_input_context_handler.RunCallback(true);
515 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count());
516 EXPECT_EQ(0, mock_ibus_input_context_client_->set_capabilities_call_count());
517 EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
518 }
519
520 // Confirm that ui::InputMethodIBus does not crash even if ibus-daemon responds
521 // after disconnected from ibus-daemon.
522 TEST_F(InputMethodIBusTest, CreateContextSuccessDelayedAfterDisconnection) {
523 CreateInputContextDelayHandler create_input_context_handler(
524 dbus::ObjectPath("Sample object path"));
525 mock_ibus_client_->set_create_input_context_handler(base::Bind(
526 &CreateInputContextDelayHandler::Run,
527 base::Unretained(&create_input_context_handler)));
528
529 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address");
530 ime_->Init(true);
531 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count());
532 EXPECT_EQ(0, mock_ibus_input_context_client_->set_capabilities_call_count());
533 EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
534
535 ime_->OnDisconnected();
536 EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
537
538 create_input_context_handler.RunCallback(true);
539 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count());
540 EXPECT_EQ(0, mock_ibus_input_context_client_->set_capabilities_call_count());
541 EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
542 }
543
544 // Confirm that ui::InputMethodIBus does not crash even if ibus-daemon responds
545 // after disconnected from ibus-daemon.
546 TEST_F(InputMethodIBusTest, CreateContextFailDelayedAfterDisconnection) {
547 CreateInputContextDelayHandler create_input_context_handler(
548 dbus::ObjectPath("Sample object path"));
549 mock_ibus_client_->set_create_input_context_handler(base::Bind(
550 &CreateInputContextDelayHandler::Run,
551 base::Unretained(&create_input_context_handler)));
552
553 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address");
554 ime_->Init(true);
555 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count());
556 EXPECT_EQ(0, mock_ibus_input_context_client_->set_capabilities_call_count());
557 EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
558
559 ime_->OnDisconnected();
560 EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
561
562 create_input_context_handler.RunCallback(false);
563 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count());
564 EXPECT_EQ(0, mock_ibus_input_context_client_->set_capabilities_call_count());
565 EXPECT_FALSE(mock_ibus_input_context_client_->IsObjectProxyReady());
463 } 566 }
464 567
465 // Confirm that IBusClient::FocusIn is called on "connected" if input_type_ is 568 // Confirm that IBusClient::FocusIn is called on "connected" if input_type_ is
466 // TEXT. 569 // TEXT.
467 TEST_F(InputMethodIBusTest, FocusIn_Text) { 570 TEST_F(InputMethodIBusTest, FocusIn_Text) {
468 SetCreateContextSuccessHandler(); 571 SetCreateContextSuccessHandler();
469 ime_->Init(true); 572 ime_->Init(true);
470 // A context shouldn't be created since the daemon is not running. 573 // A context shouldn't be created since the daemon is not running.
471 EXPECT_EQ(0, mock_ibus_client_->create_input_context_call_count()); 574 EXPECT_EQ(0, mock_ibus_client_->create_input_context_call_count());
472 EXPECT_EQ(0U, on_input_method_changed_call_count_); 575 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); 874 composition_text.underlines[0].start_offset);
772 EXPECT_EQ(GetOffsetInUTF16(kSampleText, selection.end_index), 875 EXPECT_EQ(GetOffsetInUTF16(kSampleText, selection.end_index),
773 composition_text.underlines[0].end_offset); 876 composition_text.underlines[0].end_offset);
774 EXPECT_EQ(SK_ColorBLACK, composition_text.underlines[0].color); 877 EXPECT_EQ(SK_ColorBLACK, composition_text.underlines[0].color);
775 EXPECT_TRUE(composition_text.underlines[0].thick); 878 EXPECT_TRUE(composition_text.underlines[0].thick);
776 } 879 }
777 880
778 // TODO(nona): Write more tests, especially for key event functions. 881 // TODO(nona): Write more tests, especially for key event functions.
779 882
780 } // namespace ui 883 } // namespace ui
OLDNEW
« 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