| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "config.h" |
| #include "core/editing/InputMethodController.h" |
| |
| #include "core/frame/LocalFrame.h" |
| #include "core/html/HTMLDocument.h" |
| #include "core/html/HTMLInputElement.h" |
| #include "core/testing/DummyPageHolder.h" |
| #include <gtest/gtest.h> |
| |
| using namespace blink; |
| using namespace WebCore; |
| |
| namespace { |
| |
| class InputMethodControllerTest : public ::testing::Test { |
| protected: |
| InputMethodController& controller() { return frame().inputMethodController(); } |
| HTMLDocument& document() const { return *m_document; } |
| LocalFrame& frame() const { return m_dummyPageHolder->frame(); } |
| |
| private: |
| virtual void SetUp() OVERRIDE; |
| |
| OwnPtr<DummyPageHolder> m_dummyPageHolder; |
| HTMLDocument* m_document; |
| }; |
| |
| void InputMethodControllerTest::SetUp() |
| { |
| m_dummyPageHolder = DummyPageHolder::create(IntSize(800, 600)); |
| m_document = toHTMLDocument(&m_dummyPageHolder->document()); |
| ASSERT(m_document); |
| } |
| |
| TEST_F(InputMethodControllerTest, BackspaceFromEndOfInput) |
| { |
| document().write("<input id='sample'>"); |
| HTMLInputElement* input = toHTMLInputElement(document().getElementById("sample")); |
| document().updateLayout(); |
| input->focus(); |
| |
| input->setValue("fooX"); |
| controller().setEditableSelectionOffsets(PlainTextRange(4, 4)); |
| EXPECT_STREQ("fooX", input->value().utf8().data()); |
| controller().extendSelectionAndDelete(0, 0); |
| EXPECT_STREQ("fooX", input->value().utf8().data()); |
| |
| input->setValue("fooX"); |
| controller().setEditableSelectionOffsets(PlainTextRange(4, 4)); |
| EXPECT_STREQ("fooX", input->value().utf8().data()); |
| controller().extendSelectionAndDelete(1, 0); |
| EXPECT_STREQ("foo", input->value().utf8().data()); |
| |
| input->setValue(String::fromUTF8("foo\xE2\x98\x85")); // U+2605 == "black star" |
| controller().setEditableSelectionOffsets(PlainTextRange(4, 4)); |
| EXPECT_STREQ("foo\xE2\x98\x85", input->value().utf8().data()); |
| controller().extendSelectionAndDelete(1, 0); |
| EXPECT_STREQ("foo", input->value().utf8().data()); |
| |
| input->setValue(String::fromUTF8("foo\xF0\x9F\x8F\x86")); // U+1F3C6 == "trophy" |
| controller().setEditableSelectionOffsets(PlainTextRange(4, 4)); |
| EXPECT_STREQ("foo\xF0\x9F\x8F\x86", input->value().utf8().data()); |
| controller().extendSelectionAndDelete(1, 0); |
| EXPECT_STREQ("foo", input->value().utf8().data()); |
| |
| input->setValue(String::fromUTF8("foo\xE0\xB8\x81\xE0\xB9\x89")); // composed U+0E01 "ka kai" + U+0E49 "mai tho" |
| controller().setEditableSelectionOffsets(PlainTextRange(4, 4)); |
| EXPECT_STREQ("foo\xE0\xB8\x81\xE0\xB9\x89", input->value().utf8().data()); |
| controller().extendSelectionAndDelete(1, 0); |
| EXPECT_STREQ("foo", input->value().utf8().data()); |
| |
| input->setValue("fooX"); |
| controller().setEditableSelectionOffsets(PlainTextRange(4, 4)); |
| EXPECT_STREQ("fooX", input->value().utf8().data()); |
| controller().extendSelectionAndDelete(0, 1); |
| EXPECT_STREQ("fooX", input->value().utf8().data()); |
| } |
| |
| } // namespace |