Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / ui / base / ime / input_method_chromeos_unittest.cc
index b7ea4b1..5a239c6 100644 (file)
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "ui/base/ime/input_method_chromeos.h"
+
 #include <X11/Xlib.h>
 #undef Bool
 #undef FocusIn
 #include "base/i18n/char_iterator.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/strings/utf_string_conversions.h"
+#include "chromeos/ime/composition_text.h"
 #include "chromeos/ime/ibus_keymap.h"
-#include "chromeos/ime/ibus_text.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/base/ime/chromeos/ime_bridge.h"
 #include "ui/base/ime/chromeos/mock_ime_candidate_window_handler.h"
 #include "ui/base/ime/chromeos/mock_ime_engine_handler.h"
-#include "ui/base/ime/input_method_chromeos.h"
 #include "ui/base/ime/input_method_delegate.h"
 #include "ui/base/ime/text_input_client.h"
 #include "ui/events/event.h"
 #include "ui/events/test/events_test_utils_x11.h"
-#include "ui/gfx/rect.h"
+#include "ui/gfx/geometry/rect.h"
 
 using base::UTF8ToUTF16;
 using base::UTF16ToUTF8;
@@ -34,8 +35,8 @@ namespace {
 typedef chromeos::IMEEngineHandlerInterface::KeyEventDoneCallback
     KeyEventCallback;
 
-uint32 GetOffsetInUTF16(const std::string& utf8_string, uint32 utf8_offset) {
-  base::string16 utf16_string = UTF8ToUTF16(utf8_string);
+uint32 GetOffsetInUTF16(
+    const base::string16& utf16_string, uint32 utf8_offset) {
   DCHECK_LT(utf8_offset, utf16_string.size());
   base::i18n::UTF16CharIterator char_iterator(&utf16_string);
   for (size_t i = 0; i < utf8_offset; ++i)
@@ -72,7 +73,7 @@ class TestableInputMethodChromeOS : public InputMethodChromeOS {
     bool handled;
   };
 
-  // InputMethodChromeOS override.
+  // Overridden from InputMethodChromeOS:
   virtual void ProcessKeyEventPostIME(const ui::KeyEvent& key_event,
                                       bool handled) OVERRIDE {
     process_key_event_post_ime_args_.event = &key_event;
@@ -193,17 +194,17 @@ class SetSurroundingTextVerifier {
 };
 
 class InputMethodChromeOSTest : public internal::InputMethodDelegate,
-                            public testing::Test,
-                            public TextInputClient {
+                                public testing::Test,
+                                public TextInputClient {
  public:
-  InputMethodChromeOSTest() {
+  InputMethodChromeOSTest()
+      : dispatched_key_event_(ui::ET_UNKNOWN, ui::VKEY_UNKNOWN, 0, false) {
     ResetFlags();
   }
 
   virtual ~InputMethodChromeOSTest() {
   }
 
-  // testing::Test overrides:
   virtual void SetUp() OVERRIDE {
     chromeos::IMEBridge::Initialize();
 
@@ -232,22 +233,13 @@ class InputMethodChromeOSTest : public internal::InputMethodDelegate,
     chromeos::IMEBridge::Shutdown();
   }
 
-  // ui::internal::InputMethodDelegate overrides:
-  virtual bool DispatchKeyEventPostIME(
-      const base::NativeEvent& native_key_event) OVERRIDE {
-    dispatched_native_event_ = native_key_event;
-    return false;
-  }
-  virtual bool DispatchFabricatedKeyEventPostIME(ui::EventType type,
-                                                 ui::KeyboardCode key_code,
-                                                 int flags) OVERRIDE {
-    dispatched_fabricated_event_type_ = type;
-    dispatched_fabricated_event_key_code_ = key_code;
-    dispatched_fabricated_event_flags_ = flags;
+  // Overridden from ui::internal::InputMethodDelegate:
+  virtual bool DispatchKeyEventPostIME(const ui::KeyEvent& event) OVERRIDE {
+    dispatched_key_event_ = event;
     return false;
   }
 
-  // ui::TextInputClient overrides:
+  // Overridden from ui::TextInputClient:
   virtual void SetCompositionText(
       const CompositionText& composition) OVERRIDE {
     composition_text_ = composition;
@@ -316,26 +308,19 @@ class InputMethodChromeOSTest : public internal::InputMethodDelegate,
   virtual bool ChangeTextDirectionAndLayoutAlignment(
       base::i18n::TextDirection direction) OVERRIDE { return false; }
   virtual void ExtendSelectionAndDelete(size_t before,
-                                        size_t after) OVERRIDE { }
-  virtual void EnsureCaretInRect(const gfx::Rect& rect) OVERRIDE { }
-  virtual void OnCandidateWindowShown() OVERRIDE { }
-  virtual void OnCandidateWindowUpdated() OVERRIDE { }
-  virtual void OnCandidateWindowHidden() OVERRIDE { }
+                                        size_t after) OVERRIDE {}
+  virtual void EnsureCaretInRect(const gfx::Rect& rect) OVERRIDE {}
+  virtual void OnCandidateWindowShown() OVERRIDE {}
+  virtual void OnCandidateWindowUpdated() OVERRIDE {}
+  virtual void OnCandidateWindowHidden() OVERRIDE {}
 
   bool HasNativeEvent() const {
-    base::NativeEvent empty;
-    std::memset(&empty, 0, sizeof(empty));
-    return !!std::memcmp(&dispatched_native_event_,
-                         &empty,
-                         sizeof(dispatched_native_event_));
+    return dispatched_key_event_.HasNativeEvent();
   }
 
   void ResetFlags() {
-    std::memset(&dispatched_native_event_, 0, sizeof(dispatched_native_event_));
-    DCHECK(!HasNativeEvent());
-    dispatched_fabricated_event_type_ = ET_UNKNOWN;
-    dispatched_fabricated_event_key_code_ = VKEY_UNKNOWN;
-    dispatched_fabricated_event_flags_ = 0;
+    dispatched_key_event_ = ui::KeyEvent(ui::ET_UNKNOWN, ui::VKEY_UNKNOWN, 0,
+                                         false);
 
     composition_text_.Clear();
     confirmed_text_.Clear();
@@ -352,12 +337,8 @@ class InputMethodChromeOSTest : public internal::InputMethodDelegate,
 
   scoped_ptr<TestableInputMethodChromeOS> ime_;
 
-  // Variables for remembering the parameters that are passed to
-  // ui::internal::InputMethodDelegate functions.
-  base::NativeEvent dispatched_native_event_;
-  ui::EventType dispatched_fabricated_event_type_;
-  ui::KeyboardCode dispatched_fabricated_event_key_code_;
-  int dispatched_fabricated_event_flags_;
+  // Copy of the dispatched key event.
+  ui::KeyEvent dispatched_key_event_;
 
   // Variables for remembering the parameters that are passed to
   // ui::TextInputClient functions.
@@ -594,16 +575,16 @@ TEST_F(InputMethodChromeOSTest, OnCaretBoundsChanged) {
 }
 
 TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_NoAttribute) {
-  const char kSampleText[] = "Sample Text";
+  const base::string16 kSampleText = base::UTF8ToUTF16("Sample Text");
   const uint32 kCursorPos = 2UL;
 
-  const base::string16 utf16_string = UTF8ToUTF16(kSampleText);
-  chromeos::IBusText ibus_text;
-  ibus_text.set_text(kSampleText);
+  chromeos::CompositionText chromeos_composition_text;
+  chromeos_composition_text.set_text(kSampleText);
 
   CompositionText composition_text;
-  ime_->ExtractCompositionText(ibus_text, kCursorPos, &composition_text);
-  EXPECT_EQ(UTF8ToUTF16(kSampleText), composition_text.text);
+  ime_->ExtractCompositionText(
+      chromeos_composition_text, kCursorPos, &composition_text);
+  EXPECT_EQ(kSampleText, composition_text.text);
   // If there is no selection, |selection| represents cursor position.
   EXPECT_EQ(kCursorPos, composition_text.selection.start());
   EXPECT_EQ(kCursorPos, composition_text.selection.end());
@@ -611,27 +592,29 @@ TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_NoAttribute) {
   // whole text underline.
   ASSERT_EQ(1UL, composition_text.underlines.size());
   EXPECT_EQ(0UL, composition_text.underlines[0].start_offset);
-  EXPECT_EQ(utf16_string.size(), composition_text.underlines[0].end_offset);
+  EXPECT_EQ(kSampleText.size(), composition_text.underlines[0].end_offset);
   EXPECT_FALSE(composition_text.underlines[0].thick);
 }
 
 TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_SingleUnderline) {
-  const char kSampleText[] = "\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86"
-                             "\xE3\x81\x88\xE3\x81\x8A";
+  const base::string16 kSampleText = base::UTF8ToUTF16(
+      "\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86\xE3\x81\x88\xE3\x81\x8A");
   const uint32 kCursorPos = 2UL;
 
-  // Set up ibus text with one underline attribute.
-  chromeos::IBusText ibus_text;
-  ibus_text.set_text(kSampleText);
-  chromeos::IBusText::UnderlineAttribute underline;
-  underline.type = chromeos::IBusText::IBUS_TEXT_UNDERLINE_SINGLE;
+  // Set up chromeos composition text with one underline attribute.
+  chromeos::CompositionText chromeos_composition_text;
+  chromeos_composition_text.set_text(kSampleText);
+  chromeos::CompositionText::UnderlineAttribute underline;
+  underline.type = chromeos::CompositionText::COMPOSITION_TEXT_UNDERLINE_SINGLE;
   underline.start_index = 1UL;
   underline.end_index = 4UL;
-  ibus_text.mutable_underline_attributes()->push_back(underline);
+  chromeos_composition_text.mutable_underline_attributes()->push_back(
+      underline);
 
   CompositionText composition_text;
-  ime_->ExtractCompositionText(ibus_text, kCursorPos, &composition_text);
-  EXPECT_EQ(UTF8ToUTF16(kSampleText), composition_text.text);
+  ime_->ExtractCompositionText(
+      chromeos_composition_text, kCursorPos, &composition_text);
+  EXPECT_EQ(kSampleText, composition_text.text);
   // If there is no selection, |selection| represents cursor position.
   EXPECT_EQ(kCursorPos, composition_text.selection.start());
   EXPECT_EQ(kCursorPos, composition_text.selection.end());
@@ -646,22 +629,24 @@ TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_SingleUnderline) {
 }
 
 TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_DoubleUnderline) {
-  const char kSampleText[] = "\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86"
-                             "\xE3\x81\x88\xE3\x81\x8A";
+  const base::string16 kSampleText = base::UTF8ToUTF16(
+      "\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86\xE3\x81\x88\xE3\x81\x8A");
   const uint32 kCursorPos = 2UL;
 
-  // Set up ibus text with one underline attribute.
-  chromeos::IBusText ibus_text;
-  ibus_text.set_text(kSampleText);
-  chromeos::IBusText::UnderlineAttribute underline;
-  underline.type = chromeos::IBusText::IBUS_TEXT_UNDERLINE_DOUBLE;
+  // Set up chromeos composition text with one underline attribute.
+  chromeos::CompositionText chromeos_composition_text;
+  chromeos_composition_text.set_text(kSampleText);
+  chromeos::CompositionText::UnderlineAttribute underline;
+  underline.type = chromeos::CompositionText::COMPOSITION_TEXT_UNDERLINE_DOUBLE;
   underline.start_index = 1UL;
   underline.end_index = 4UL;
-  ibus_text.mutable_underline_attributes()->push_back(underline);
+  chromeos_composition_text.mutable_underline_attributes()->push_back(
+      underline);
 
   CompositionText composition_text;
-  ime_->ExtractCompositionText(ibus_text, kCursorPos, &composition_text);
-  EXPECT_EQ(UTF8ToUTF16(kSampleText), composition_text.text);
+  ime_->ExtractCompositionText(
+      chromeos_composition_text, kCursorPos, &composition_text);
+  EXPECT_EQ(kSampleText, composition_text.text);
   // If there is no selection, |selection| represents cursor position.
   EXPECT_EQ(kCursorPos, composition_text.selection.start());
   EXPECT_EQ(kCursorPos, composition_text.selection.end());
@@ -676,22 +661,24 @@ TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_DoubleUnderline) {
 }
 
 TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_ErrorUnderline) {
-  const char kSampleText[] = "\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86"
-                             "\xE3\x81\x88\xE3\x81\x8A";
+  const base::string16 kSampleText = base::UTF8ToUTF16(
+      "\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86\xE3\x81\x88\xE3\x81\x8A");
   const uint32 kCursorPos = 2UL;
 
-  // Set up ibus text with one underline attribute.
-  chromeos::IBusText ibus_text;
-  ibus_text.set_text(kSampleText);
-  chromeos::IBusText::UnderlineAttribute underline;
-  underline.type = chromeos::IBusText::IBUS_TEXT_UNDERLINE_ERROR;
+  // Set up chromeos composition text with one underline attribute.
+  chromeos::CompositionText chromeos_composition_text;
+  chromeos_composition_text.set_text(kSampleText);
+  chromeos::CompositionText::UnderlineAttribute underline;
+  underline.type = chromeos::CompositionText::COMPOSITION_TEXT_UNDERLINE_ERROR;
   underline.start_index = 1UL;
   underline.end_index = 4UL;
-  ibus_text.mutable_underline_attributes()->push_back(underline);
+  chromeos_composition_text.mutable_underline_attributes()->push_back(
+      underline);
 
   CompositionText composition_text;
-  ime_->ExtractCompositionText(ibus_text, kCursorPos, &composition_text);
-  EXPECT_EQ(UTF8ToUTF16(kSampleText), composition_text.text);
+  ime_->ExtractCompositionText(
+      chromeos_composition_text, kCursorPos, &composition_text);
+  EXPECT_EQ(kSampleText, composition_text.text);
   EXPECT_EQ(kCursorPos, composition_text.selection.start());
   EXPECT_EQ(kCursorPos, composition_text.selection.end());
   ASSERT_EQ(1UL, composition_text.underlines.size());
@@ -705,25 +692,28 @@ TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_ErrorUnderline) {
 }
 
 TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_Selection) {
-  const char kSampleText[] = "\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86"
-                             "\xE3\x81\x88\xE3\x81\x8A";
+  const base::string16 kSampleText = base::UTF8ToUTF16(
+      "\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86\xE3\x81\x88\xE3\x81\x8A");
   const uint32 kCursorPos = 2UL;
 
-  // Set up ibus text with one underline attribute.
-  chromeos::IBusText ibus_text;
-  ibus_text.set_text(kSampleText);
-  ibus_text.set_selection_start(1UL);
-  ibus_text.set_selection_end(4UL);
+  // Set up chromeos composition text with one underline attribute.
+  chromeos::CompositionText chromeos_composition_text;
+  chromeos_composition_text.set_text(kSampleText);
+  chromeos_composition_text.set_selection_start(1UL);
+  chromeos_composition_text.set_selection_end(4UL);
 
   CompositionText composition_text;
-  ime_->ExtractCompositionText(ibus_text, kCursorPos, &composition_text);
-  EXPECT_EQ(UTF8ToUTF16(kSampleText), composition_text.text);
+  ime_->ExtractCompositionText(
+      chromeos_composition_text, kCursorPos, &composition_text);
+  EXPECT_EQ(kSampleText, composition_text.text);
   EXPECT_EQ(kCursorPos, composition_text.selection.start());
   EXPECT_EQ(kCursorPos, composition_text.selection.end());
   ASSERT_EQ(1UL, composition_text.underlines.size());
-  EXPECT_EQ(GetOffsetInUTF16(kSampleText, ibus_text.selection_start()),
+  EXPECT_EQ(GetOffsetInUTF16(kSampleText,
+                             chromeos_composition_text.selection_start()),
             composition_text.underlines[0].start_offset);
-  EXPECT_EQ(GetOffsetInUTF16(kSampleText, ibus_text.selection_end()),
+  EXPECT_EQ(GetOffsetInUTF16(kSampleText,
+                             chromeos_composition_text.selection_end()),
             composition_text.underlines[0].end_offset);
   EXPECT_EQ(SK_ColorBLACK, composition_text.underlines[0].color);
   EXPECT_TRUE(composition_text.underlines[0].thick);
@@ -731,29 +721,33 @@ TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_Selection) {
 
 TEST_F(InputMethodChromeOSTest,
        ExtractCompositionTextTest_SelectionStartWithCursor) {
-  const char kSampleText[] = "\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86"
-                             "\xE3\x81\x88\xE3\x81\x8A";
+  const base::string16 kSampleText = base::UTF8ToUTF16(
+      "\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86\xE3\x81\x88\xE3\x81\x8A");
   const uint32 kCursorPos = 1UL;
 
-  // Set up ibus text with one underline attribute.
-  chromeos::IBusText ibus_text;
-  ibus_text.set_text(kSampleText);
-  ibus_text.set_selection_start(kCursorPos);
-  ibus_text.set_selection_end(4UL);
+  // Set up chromeos composition text with one underline attribute.
+  chromeos::CompositionText chromeos_composition_text;
+  chromeos_composition_text.set_text(kSampleText);
+  chromeos_composition_text.set_selection_start(kCursorPos);
+  chromeos_composition_text.set_selection_end(4UL);
 
   CompositionText composition_text;
-  ime_->ExtractCompositionText(ibus_text, kCursorPos, &composition_text);
-  EXPECT_EQ(UTF8ToUTF16(kSampleText), composition_text.text);
+  ime_->ExtractCompositionText(
+      chromeos_composition_text, kCursorPos, &composition_text);
+  EXPECT_EQ(kSampleText, composition_text.text);
   // If the cursor position is same as selection bounds, selection start
   // position become opposit side of selection from cursor.
-  EXPECT_EQ(GetOffsetInUTF16(kSampleText, ibus_text.selection_end()),
+  EXPECT_EQ(GetOffsetInUTF16(kSampleText,
+                             chromeos_composition_text.selection_end()),
             composition_text.selection.start());
   EXPECT_EQ(GetOffsetInUTF16(kSampleText, kCursorPos),
             composition_text.selection.end());
   ASSERT_EQ(1UL, composition_text.underlines.size());
-  EXPECT_EQ(GetOffsetInUTF16(kSampleText, ibus_text.selection_start()),
+  EXPECT_EQ(GetOffsetInUTF16(kSampleText,
+                             chromeos_composition_text.selection_start()),
             composition_text.underlines[0].start_offset);
-  EXPECT_EQ(GetOffsetInUTF16(kSampleText, ibus_text.selection_end()),
+  EXPECT_EQ(GetOffsetInUTF16(kSampleText,
+                             chromeos_composition_text.selection_end()),
             composition_text.underlines[0].end_offset);
   EXPECT_EQ(SK_ColorBLACK, composition_text.underlines[0].color);
   EXPECT_TRUE(composition_text.underlines[0].thick);
@@ -761,29 +755,33 @@ TEST_F(InputMethodChromeOSTest,
 
 TEST_F(InputMethodChromeOSTest,
        ExtractCompositionTextTest_SelectionEndWithCursor) {
-  const char kSampleText[] = "\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86"
-                             "\xE3\x81\x88\xE3\x81\x8A";
+  const base::string16 kSampleText = base::UTF8ToUTF16(
+      "\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86\xE3\x81\x88\xE3\x81\x8A");
   const uint32 kCursorPos = 4UL;
 
-  // Set up ibus text with one underline attribute.
-  chromeos::IBusText ibus_text;
-  ibus_text.set_text(kSampleText);
-  ibus_text.set_selection_start(1UL);
-  ibus_text.set_selection_end(kCursorPos);
+  // Set up chromeos composition text with one underline attribute.
+  chromeos::CompositionText chromeos_composition_text;
+  chromeos_composition_text.set_text(kSampleText);
+  chromeos_composition_text.set_selection_start(1UL);
+  chromeos_composition_text.set_selection_end(kCursorPos);
 
   CompositionText composition_text;
-  ime_->ExtractCompositionText(ibus_text, kCursorPos, &composition_text);
-  EXPECT_EQ(UTF8ToUTF16(kSampleText), composition_text.text);
+  ime_->ExtractCompositionText(
+      chromeos_composition_text, kCursorPos, &composition_text);
+  EXPECT_EQ(kSampleText, composition_text.text);
   // If the cursor position is same as selection bounds, selection start
   // position become opposit side of selection from cursor.
-  EXPECT_EQ(GetOffsetInUTF16(kSampleText, ibus_text.selection_start()),
+  EXPECT_EQ(GetOffsetInUTF16(kSampleText,
+                             chromeos_composition_text.selection_start()),
             composition_text.selection.start());
   EXPECT_EQ(GetOffsetInUTF16(kSampleText, kCursorPos),
             composition_text.selection.end());
   ASSERT_EQ(1UL, composition_text.underlines.size());
-  EXPECT_EQ(GetOffsetInUTF16(kSampleText, ibus_text.selection_start()),
+  EXPECT_EQ(GetOffsetInUTF16(kSampleText,
+                             chromeos_composition_text.selection_start()),
             composition_text.underlines[0].start_offset);
-  EXPECT_EQ(GetOffsetInUTF16(kSampleText, ibus_text.selection_end()),
+  EXPECT_EQ(GetOffsetInUTF16(kSampleText,
+                             chromeos_composition_text.selection_end()),
             composition_text.underlines[0].end_offset);
   EXPECT_EQ(SK_ColorBLACK, composition_text.underlines[0].color);
   EXPECT_TRUE(composition_text.underlines[0].thick);
@@ -851,7 +849,7 @@ TEST_F(InputMethodChromeOSTest, SurroundingText_PartialText) {
   ime_->OnTextInputTypeChanged(this);
 
   // Set the TextInputClient behaviors.
-  surrounding_text_ = UTF8ToUTF16("abcdefghij");
+  surrounding_text_ = base::UTF8ToUTF16("abcdefghij");
   text_range_ = gfx::Range(5, 10);
   selection_range_ = gfx::Range(7, 9);
 
@@ -879,7 +877,7 @@ TEST_F(InputMethodChromeOSTest, SurroundingText_BecomeEmptyText) {
   // Set the TextInputClient behaviors.
   // If the surrounding text becomes empty, text_range become (0, 0) and
   // selection range become invalid.
-  surrounding_text_ = UTF8ToUTF16("");
+  surrounding_text_ = base::UTF8ToUTF16("");
   text_range_ = gfx::Range(0, 0);
   selection_range_ = gfx::Range::InvalidRange();