OLD | NEW |
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 384 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
417 // it fails (unless ibus sends the "connected" signal to Chrome again). It might | 418 // it fails (unless ibus sends the "connected" signal to Chrome again). It might |
418 // be better to add some retry logic. Will revisit later. | 419 // be better to add some retry logic. Will revisit later. |
419 TEST_F(InputMethodIBusTest, CreateContextFail) { | 420 TEST_F(InputMethodIBusTest, CreateContextFail) { |
420 CreateInputContextFailHandler create_input_context_handler; | 421 CreateInputContextFailHandler create_input_context_handler; |
421 mock_ibus_client_->set_create_input_context_handler(base::Bind( | 422 mock_ibus_client_->set_create_input_context_handler(base::Bind( |
422 &CreateInputContextFailHandler::Run, | 423 &CreateInputContextFailHandler::Run, |
423 base::Unretained(&create_input_context_handler))); | 424 base::Unretained(&create_input_context_handler))); |
424 | 425 |
425 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address"); | 426 chromeos::DBusThreadManager::Get()->InitIBusBus("dummy address"); |
426 ime_->Init(true); | 427 ime_->Init(true); |
427 EXPECT_EQ(1, mock_ibus_client_->create_input_context_call_count()); | 428 // InputMethodIBus tries several times if the CreateInputContext method call |
| 429 // is failed. |
| 430 EXPECT_EQ(kCreateInputContextMaxTrialCount + 1, |
| 431 mock_ibus_client_->create_input_context_call_count()); |
428 // |set_capabilities_call_count()| should be zero since a context is not | 432 // |set_capabilities_call_count()| should be zero since a context is not |
429 // created yet. | 433 // created yet. |
430 EXPECT_EQ(0, mock_ibus_input_context_client_->set_capabilities_call_count()); | 434 EXPECT_EQ(0, mock_ibus_input_context_client_->set_capabilities_call_count()); |
431 } | 435 } |
432 | 436 |
433 // Confirm that ui::InputMethodIBus does not crash even if ibus-daemon does not | 437 // Confirm that ui::InputMethodIBus does not crash even if ibus-daemon does not |
434 // respond. | 438 // respond. |
435 TEST_F(InputMethodIBusTest, CreateContextNoResp) { | 439 TEST_F(InputMethodIBusTest, CreateContextNoResp) { |
436 CreateInputContextNoResponseHandler create_input_context_handler; | 440 CreateInputContextNoResponseHandler create_input_context_handler; |
437 mock_ibus_client_->set_create_input_context_handler(base::Bind( | 441 mock_ibus_client_->set_create_input_context_handler(base::Bind( |
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
771 composition_text.underlines[0].start_offset); | 775 composition_text.underlines[0].start_offset); |
772 EXPECT_EQ(GetOffsetInUTF16(kSampleText, selection.end_index), | 776 EXPECT_EQ(GetOffsetInUTF16(kSampleText, selection.end_index), |
773 composition_text.underlines[0].end_offset); | 777 composition_text.underlines[0].end_offset); |
774 EXPECT_EQ(SK_ColorBLACK, composition_text.underlines[0].color); | 778 EXPECT_EQ(SK_ColorBLACK, composition_text.underlines[0].color); |
775 EXPECT_TRUE(composition_text.underlines[0].thick); | 779 EXPECT_TRUE(composition_text.underlines[0].thick); |
776 } | 780 } |
777 | 781 |
778 // TODO(nona): Write more tests, especially for key event functions. | 782 // TODO(nona): Write more tests, especially for key event functions. |
779 | 783 |
780 } // namespace ui | 784 } // namespace ui |
OLD | NEW |