| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "core/editing/InputMethodController.h" | 5 #include "core/editing/InputMethodController.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include "core/dom/Document.h" | 8 #include "core/dom/Document.h" |
| 9 #include "core/dom/Element.h" | 9 #include "core/dom/Element.h" |
| 10 #include "core/dom/Range.h" | 10 #include "core/dom/Range.h" |
| (...skipping 14 matching lines...) Expand all Loading... |
| 25 class InputMethodControllerTest : public ::testing::Test { | 25 class InputMethodControllerTest : public ::testing::Test { |
| 26 protected: | 26 protected: |
| 27 InputMethodController& Controller() { | 27 InputMethodController& Controller() { |
| 28 return GetFrame().GetInputMethodController(); | 28 return GetFrame().GetInputMethodController(); |
| 29 } | 29 } |
| 30 Document& GetDocument() const { return *document_; } | 30 Document& GetDocument() const { return *document_; } |
| 31 LocalFrame& GetFrame() const { return dummy_page_holder_->GetFrame(); } | 31 LocalFrame& GetFrame() const { return dummy_page_holder_->GetFrame(); } |
| 32 Element* InsertHTMLElement(const char* element_code, const char* element_id); | 32 Element* InsertHTMLElement(const char* element_code, const char* element_id); |
| 33 void CreateHTMLWithCompositionInputEventListeners(); | 33 void CreateHTMLWithCompositionInputEventListeners(); |
| 34 void CreateHTMLWithCompositionEndEventListener(const SelectionType); | 34 void CreateHTMLWithCompositionEndEventListener(const SelectionType); |
| 35 int NumMarkersInRange(const EphemeralRange&, DocumentMarker::MarkerTypes); |
| 35 | 36 |
| 36 private: | 37 private: |
| 37 void SetUp() override; | 38 void SetUp() override; |
| 38 | 39 |
| 39 std::unique_ptr<DummyPageHolder> dummy_page_holder_; | 40 std::unique_ptr<DummyPageHolder> dummy_page_holder_; |
| 40 Persistent<Document> document_; | 41 Persistent<Document> document_; |
| 41 }; | 42 }; |
| 42 | 43 |
| 43 void InputMethodControllerTest::SetUp() { | 44 void InputMethodControllerTest::SetUp() { |
| 44 dummy_page_holder_ = DummyPageHolder::Create(IntSize(800, 600)); | 45 dummy_page_holder_ = DummyPageHolder::Create(IntSize(800, 600)); |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 110 "});"); | 111 "});"); |
| 111 break; | 112 break; |
| 112 default: | 113 default: |
| 113 NOTREACHED(); | 114 NOTREACHED(); |
| 114 } | 115 } |
| 115 GetDocument().body()->AppendChild(script); | 116 GetDocument().body()->AppendChild(script); |
| 116 GetDocument().View()->UpdateAllLifecyclePhases(); | 117 GetDocument().View()->UpdateAllLifecyclePhases(); |
| 117 editable->focus(); | 118 editable->focus(); |
| 118 } | 119 } |
| 119 | 120 |
| 121 int InputMethodControllerTest::NumMarkersInRange( |
| 122 const EphemeralRange& range, |
| 123 DocumentMarker::MarkerTypes marker_types) { |
| 124 int node_count = 0; |
| 125 for (Node& node : range.Nodes()) { |
| 126 node_count += |
| 127 GetDocument().Markers().MarkersFor(&node, marker_types).size(); |
| 128 } |
| 129 return node_count; |
| 130 } |
| 131 |
| 120 TEST_F(InputMethodControllerTest, BackspaceFromEndOfInput) { | 132 TEST_F(InputMethodControllerTest, BackspaceFromEndOfInput) { |
| 121 HTMLInputElement* input = | 133 HTMLInputElement* input = |
| 122 toHTMLInputElement(InsertHTMLElement("<input id='sample'>", "sample")); | 134 toHTMLInputElement(InsertHTMLElement("<input id='sample'>", "sample")); |
| 123 | 135 |
| 124 input->setValue("fooX"); | 136 input->setValue("fooX"); |
| 125 GetDocument().UpdateStyleAndLayout(); | 137 GetDocument().UpdateStyleAndLayout(); |
| 126 Controller().SetEditableSelectionOffsets(PlainTextRange(4, 4)); | 138 Controller().SetEditableSelectionOffsets(PlainTextRange(4, 4)); |
| 127 EXPECT_STREQ("fooX", input->value().Utf8().data()); | 139 EXPECT_STREQ("fooX", input->value().Utf8().data()); |
| 128 Controller().ExtendSelectionAndDelete(0, 0); | 140 Controller().ExtendSelectionAndDelete(0, 0); |
| 129 EXPECT_STREQ("fooX", input->value().Utf8().data()); | 141 EXPECT_STREQ("fooX", input->value().Utf8().data()); |
| (...skipping 1271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1401 Controller().FinishComposingText(InputMethodController::kKeepSelection); | 1413 Controller().FinishComposingText(InputMethodController::kKeepSelection); |
| 1402 GetFrame().GetEditor().InsertLineBreak(); | 1414 GetFrame().GetEditor().InsertLineBreak(); |
| 1403 | 1415 |
| 1404 Controller().SetCompositionFromExistingText(underlines, 8, 8); | 1416 Controller().SetCompositionFromExistingText(underlines, 8, 8); |
| 1405 | 1417 |
| 1406 underlines.push_back(CompositionUnderline(0, 5, Color(255, 0, 0), false, 0)); | 1418 underlines.push_back(CompositionUnderline(0, 5, Color(255, 0, 0), false, 0)); |
| 1407 Controller().SetComposition(String("world"), underlines, 0, 0); | 1419 Controller().SetComposition(String("world"), underlines, 0, 0); |
| 1408 ASSERT_EQ(1u, GetDocument().Markers().Markers().size()); | 1420 ASSERT_EQ(1u, GetDocument().Markers().Markers().size()); |
| 1409 | 1421 |
| 1410 // Verify composition underline shows up on the second line, not the first | 1422 // Verify composition underline shows up on the second line, not the first |
| 1411 ASSERT_EQ(0u, GetDocument() | 1423 ASSERT_EQ(0, NumMarkersInRange(PlainTextRange(0, 5).CreateRange(*div), |
| 1412 .Markers() | 1424 DocumentMarker::AllMarkers())); |
| 1413 .MarkersInRange(PlainTextRange(0, 5).CreateRange(*div), | 1425 ASSERT_EQ(1, NumMarkersInRange(PlainTextRange(6, 11).CreateRange(*div), |
| 1414 DocumentMarker::AllMarkers()) | 1426 DocumentMarker::AllMarkers())); |
| 1415 .size()); | |
| 1416 ASSERT_EQ(1u, GetDocument() | |
| 1417 .Markers() | |
| 1418 .MarkersInRange(PlainTextRange(6, 11).CreateRange(*div), | |
| 1419 DocumentMarker::AllMarkers()) | |
| 1420 .size()); | |
| 1421 | 1427 |
| 1422 // Verify marker has correct start/end offsets (measured from the beginning | 1428 // Verify marker has correct start/end offsets (measured from the beginning |
| 1423 // of the node, which is the beginning of the line) | 1429 // of the node, which is the beginning of the line) |
| 1424 EXPECT_EQ(0u, GetDocument().Markers().Markers()[0]->StartOffset()); | 1430 EXPECT_EQ(0u, GetDocument().Markers().Markers()[0]->StartOffset()); |
| 1425 EXPECT_EQ(5u, GetDocument().Markers().Markers()[0]->EndOffset()); | 1431 EXPECT_EQ(5u, GetDocument().Markers().Markers()[0]->EndOffset()); |
| 1426 } | 1432 } |
| 1427 | 1433 |
| 1428 TEST_F(InputMethodControllerTest, SelectionWhenFocusChangeFinishesComposition) { | 1434 TEST_F(InputMethodControllerTest, SelectionWhenFocusChangeFinishesComposition) { |
| 1429 GetDocument().GetSettings()->SetScriptEnabled(true); | 1435 GetDocument().GetSettings()->SetScriptEnabled(true); |
| 1430 Element* editable = | 1436 Element* editable = |
| (...skipping 541 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1972 // Set selection before BODY(editable). | 1978 // Set selection before BODY(editable). |
| 1973 GetFrame().Selection().SetSelection( | 1979 GetFrame().Selection().SetSelection( |
| 1974 SelectionInDOMTree::Builder() | 1980 SelectionInDOMTree::Builder() |
| 1975 .Collapse(Position(GetDocument().documentElement(), 0)) | 1981 .Collapse(Position(GetDocument().documentElement(), 0)) |
| 1976 .Build()); | 1982 .Build()); |
| 1977 | 1983 |
| 1978 EXPECT_EQ(kWebTextInputTypeContentEditable, Controller().TextInputType()); | 1984 EXPECT_EQ(kWebTextInputTypeContentEditable, Controller().TextInputType()); |
| 1979 } | 1985 } |
| 1980 | 1986 |
| 1981 } // namespace blink | 1987 } // namespace blink |
| OLD | NEW |