| 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 |