| Index: third_party/WebKit/Source/core/editing/InputMethodControllerTest.cpp
|
| diff --git a/third_party/WebKit/Source/core/editing/InputMethodControllerTest.cpp b/third_party/WebKit/Source/core/editing/InputMethodControllerTest.cpp
|
| index 5bdd5061c68838d4d3bd2197ec8cdceb711312ad..33043a74f885bc2668564b4939d0e1b4ce731bd4 100644
|
| --- a/third_party/WebKit/Source/core/editing/InputMethodControllerTest.cpp
|
| +++ b/third_party/WebKit/Source/core/editing/InputMethodControllerTest.cpp
|
| @@ -1545,10 +1545,6 @@ TEST_F(InputMethodControllerTest,
|
| .Data());
|
| }
|
|
|
| -// TODO(rlanday): The behavior tested in the following DocumentMarker tests is
|
| -// going to be changed so markers are not split when text they contain is
|
| -// deleted
|
| -
|
| TEST_F(InputMethodControllerTest,
|
| Marker_WhitespaceFixupAroundMarkerBeginningWithSpace) {
|
| Element* div = InsertHTMLElement(
|
| @@ -1569,15 +1565,11 @@ TEST_F(InputMethodControllerTest,
|
| Controller().SetCompositionFromExistingText(empty_underlines, 6, 10);
|
| Controller().CommitText(String(""), empty_underlines, 0);
|
|
|
| - // Check that the marker was split when the space at the beginning was
|
| - // converted to an nbsp
|
| - EXPECT_EQ(2u, GetDocument().Markers().Markers().size());
|
| - EXPECT_STREQ("\xC2\xA0", // UTF-8 for an nbsp
|
| - GetMarkedText(GetDocument().Markers(), div->FirstChild(), 0)
|
| - .Utf8()
|
| - .Data());
|
| - EXPECT_STREQ("text",
|
| - GetMarkedText(GetDocument().Markers(), div->FirstChild(), 1)
|
| + // Check that the marker is still attached to " text" and includes the space
|
| + // before "text" but not the space after
|
| + EXPECT_EQ(1u, GetDocument().Markers().Markers().size());
|
| + ASSERT_STREQ("\xC2\xA0text",
|
| + GetMarkedText(GetDocument().Markers(), div->firstChild(), 0)
|
| .Utf8()
|
| .Data());
|
| }
|
| @@ -1602,15 +1594,11 @@ TEST_F(InputMethodControllerTest,
|
| Controller().SetCompositionFromExistingText(empty_underlines, 6, 10);
|
| Controller().CommitText(String(""), empty_underlines, 0);
|
|
|
| - // Check that the marker was split when the space at the end was
|
| - // converted to an nbsp
|
| - EXPECT_EQ(2u, GetDocument().Markers().Markers().size());
|
| - EXPECT_STREQ("text",
|
| - GetMarkedText(GetDocument().Markers(), div->FirstChild(), 0)
|
| - .Utf8()
|
| - .Data());
|
| - EXPECT_STREQ("\xC2\xA0", // UTF-8 for an nbsp
|
| - GetMarkedText(GetDocument().Markers(), div->FirstChild(), 1)
|
| + // Check that the marker is still attached to "text " and includes the space
|
| + // after "text" but not the space before
|
| + EXPECT_EQ(1u, GetDocument().Markers().Markers().size());
|
| + ASSERT_STREQ("text\xC2\xA0",
|
| + GetMarkedText(GetDocument().Markers(), div->firstChild(), 0)
|
| .Utf8()
|
| .Data());
|
| }
|
| @@ -1636,19 +1624,11 @@ TEST_F(InputMethodControllerTest,
|
| Controller().SetCompositionFromExistingText(empty_underlines, 6, 10);
|
| Controller().CommitText(String(""), empty_underlines, 0);
|
|
|
| - // Check that the marker was split into three pieces when the two spaces were
|
| - // converted to nbsps
|
| - EXPECT_EQ(3u, GetDocument().Markers().Markers().size());
|
| - EXPECT_STREQ("\xC2\xA0", // UTF-8 for an nbsp
|
| - GetMarkedText(GetDocument().Markers(), div->FirstChild(), 0)
|
| - .Utf8()
|
| - .Data());
|
| - EXPECT_STREQ("text",
|
| - GetMarkedText(GetDocument().Markers(), div->FirstChild(), 1)
|
| - .Utf8()
|
| - .Data());
|
| - EXPECT_STREQ("\xC2\xA0", // UTF-8 for an nbsp
|
| - GetMarkedText(GetDocument().Markers(), div->FirstChild(), 2)
|
| + // Check that the marker is still attached to " text " and includes both the
|
| + // space before "text" and the space after
|
| + EXPECT_EQ(1u, GetDocument().Markers().Markers().size());
|
| + ASSERT_STREQ("\xC2\xA0text\xC2\xA0",
|
| + GetMarkedText(GetDocument().Markers(), div->firstChild(), 0)
|
| .Utf8()
|
| .Data());
|
| }
|
| @@ -1668,11 +1648,10 @@ TEST_F(InputMethodControllerTest, Marker_ReplaceStartOfMarker) {
|
| Controller().SetCompositionFromExistingText(empty_underlines, 0, 7);
|
| Controller().CommitText(String("Original"), empty_underlines, 0);
|
|
|
| - // Verify marker is under "al text"
|
| - // ("Initial" and "Original" have "al" as a common suffix)
|
| + // Verify marker is under "Original text"
|
| EXPECT_EQ(1u, GetDocument().Markers().Markers().size());
|
| - EXPECT_STREQ("al text",
|
| - GetMarkedText(GetDocument().Markers(), div->FirstChild(), 0)
|
| + ASSERT_STREQ("Original text",
|
| + GetMarkedText(GetDocument().Markers(), div->firstChild(), 0)
|
| .Utf8()
|
| .Data());
|
| }
|
| @@ -1716,10 +1695,10 @@ TEST_F(InputMethodControllerTest, Marker_ReplaceEndOfMarker) {
|
| Controller().SetCompositionFromExistingText(empty_underlines, 8, 12);
|
| Controller().CommitText(String("string"), empty_underlines, 0);
|
|
|
| - // Verify marker is under "Initial "
|
| + // Verify marker is under "Initial string"
|
| EXPECT_EQ(1u, GetDocument().Markers().Markers().size());
|
| - EXPECT_STREQ("Initial ",
|
| - GetMarkedText(GetDocument().Markers(), div->FirstChild(), 0)
|
| + ASSERT_STREQ("Initial string",
|
| + GetMarkedText(GetDocument().Markers(), div->firstChild(), 0)
|
| .Utf8()
|
| .Data());
|
| }
|
| @@ -1765,8 +1744,12 @@ TEST_F(InputMethodControllerTest, Marker_ReplaceEntireMarker) {
|
| Controller().SetCompositionFromExistingText(empty_underlines, 8, 12);
|
| Controller().CommitText(String("string"), empty_underlines, 0);
|
|
|
| - // Verify marker was removed
|
| - EXPECT_EQ(0u, GetDocument().Markers().Markers().size());
|
| + // Verify marker is under "string"
|
| + EXPECT_EQ(1u, GetDocument().Markers().Markers().size());
|
| + ASSERT_STREQ("string",
|
| + GetMarkedText(GetDocument().Markers(), div->firstChild(), 0)
|
| + .Utf8()
|
| + .Data());
|
| }
|
|
|
| TEST_F(InputMethodControllerTest, Marker_ReplaceTextWithMarkerAtBeginning) {
|
| @@ -1811,4 +1794,174 @@ TEST_F(InputMethodControllerTest, Marker_ReplaceTextWithMarkerAtEnd) {
|
| EXPECT_EQ(0u, GetDocument().Markers().Markers().size());
|
| }
|
|
|
| +TEST_F(InputMethodControllerTest, Marker_Deletions) {
|
| + Element* div = InsertHTMLElement(
|
| + "<div id='sample' contenteditable>1111122222333334444455555</div>",
|
| + "sample");
|
| +
|
| + EphemeralRange marker_range = PlainTextRange(0, 5).CreateRange(*div);
|
| + GetDocument().Markers().AddMarker(marker_range.StartPosition(),
|
| + marker_range.EndPosition(),
|
| + DocumentMarker::kTextMatch);
|
| +
|
| + marker_range = PlainTextRange(5, 10).CreateRange(*div);
|
| + GetDocument().Markers().AddMarker(marker_range.StartPosition(),
|
| + marker_range.EndPosition(),
|
| + DocumentMarker::kTextMatch);
|
| +
|
| + marker_range = PlainTextRange(10, 15).CreateRange(*div);
|
| + GetDocument().Markers().AddMarker(marker_range.StartPosition(),
|
| + marker_range.EndPosition(),
|
| + DocumentMarker::kTextMatch);
|
| +
|
| + marker_range = PlainTextRange(15, 20).CreateRange(*div);
|
| + GetDocument().Markers().AddMarker(marker_range.StartPosition(),
|
| + marker_range.EndPosition(),
|
| + DocumentMarker::kTextMatch);
|
| +
|
| + marker_range = PlainTextRange(20, 25).CreateRange(*div);
|
| + GetDocument().Markers().AddMarker(marker_range.StartPosition(),
|
| + marker_range.EndPosition(),
|
| + DocumentMarker::kTextMatch);
|
| +
|
| + EXPECT_EQ(5u, GetDocument().Markers().Markers().size());
|
| +
|
| + // Delete third marker and portions of second and fourth
|
| + Vector<CompositionUnderline> empty_underlines;
|
| + Controller().SetCompositionFromExistingText(empty_underlines, 8, 17);
|
| + Controller().CommitText(String(""), empty_underlines, 0);
|
| +
|
| + // Verify markers were updated correctly
|
| + EXPECT_EQ(4u, GetDocument().Markers().Markers().size());
|
| +
|
| + EXPECT_EQ(0u, GetDocument().Markers().Markers()[0]->StartOffset());
|
| + EXPECT_EQ(5u, GetDocument().Markers().Markers()[0]->EndOffset());
|
| +
|
| + EXPECT_EQ(5u, GetDocument().Markers().Markers()[1]->StartOffset());
|
| + EXPECT_EQ(8u, GetDocument().Markers().Markers()[1]->EndOffset());
|
| +
|
| + EXPECT_EQ(8u, GetDocument().Markers().Markers()[2]->StartOffset());
|
| + EXPECT_EQ(11u, GetDocument().Markers().Markers()[2]->EndOffset());
|
| +
|
| + EXPECT_EQ(11u, GetDocument().Markers().Markers()[3]->StartOffset());
|
| + EXPECT_EQ(16u, GetDocument().Markers().Markers()[3]->EndOffset());
|
| +}
|
| +
|
| +TEST_F(InputMethodControllerTest, Marker_DeleteExactlyOnMarker) {
|
| + Element* div = InsertHTMLElement(
|
| + "<div id='sample' contenteditable>1111122222333334444455555</div>",
|
| + "sample");
|
| +
|
| + EphemeralRange marker_range = PlainTextRange(5, 10).CreateRange(*div);
|
| + GetDocument().Markers().AddMarker(marker_range.StartPosition(),
|
| + marker_range.EndPosition(),
|
| + DocumentMarker::kTextMatch);
|
| +
|
| + EXPECT_EQ(1u, GetDocument().Markers().Markers().size());
|
| +
|
| + // Delete exactly on the marker
|
| + Vector<CompositionUnderline> empty_underlines;
|
| + Controller().SetCompositionFromExistingText(empty_underlines, 5, 10);
|
| + Controller().CommitText(String(""), empty_underlines, 0);
|
| + EXPECT_EQ(0u, GetDocument().Markers().Markers().size());
|
| +}
|
| +
|
| +TEST_F(InputMethodControllerTest, Marker_DeleteMiddleOfMarker) {
|
| + Element* div = InsertHTMLElement(
|
| + "<div id='sample' contenteditable>1111122222333334444455555</div>",
|
| + "sample");
|
| +
|
| + EphemeralRange marker_range = PlainTextRange(5, 10).CreateRange(*div);
|
| + GetDocument().Markers().AddMarker(marker_range.StartPosition(),
|
| + marker_range.EndPosition(),
|
| + DocumentMarker::kTextMatch);
|
| +
|
| + // Delete middle of marker
|
| + Vector<CompositionUnderline> empty_underlines;
|
| + Controller().SetCompositionFromExistingText(empty_underlines, 6, 9);
|
| + Controller().CommitText(String(""), empty_underlines, 0);
|
| +
|
| + EXPECT_EQ(1u, GetDocument().Markers().Markers().size());
|
| +
|
| + EXPECT_EQ(5u, GetDocument().Markers().Markers()[0]->StartOffset());
|
| + EXPECT_EQ(7u, GetDocument().Markers().Markers()[0]->EndOffset());
|
| +}
|
| +
|
| +TEST_F(InputMethodControllerTest, Marker_InsertInMarkerInterior) {
|
| + Element* div = InsertHTMLElement(
|
| + "<div id='sample' contenteditable>1111122222333334444455555</div>",
|
| + "sample");
|
| +
|
| + EphemeralRange marker_range = PlainTextRange(0, 5).CreateRange(*div);
|
| + GetDocument().Markers().AddMarker(marker_range.StartPosition(),
|
| + marker_range.EndPosition(),
|
| + DocumentMarker::kTextMatch);
|
| +
|
| + marker_range = PlainTextRange(5, 10).CreateRange(*div);
|
| + GetDocument().Markers().AddMarker(marker_range.StartPosition(),
|
| + marker_range.EndPosition(),
|
| + DocumentMarker::kTextMatch);
|
| +
|
| + marker_range = PlainTextRange(10, 15).CreateRange(*div);
|
| + GetDocument().Markers().AddMarker(marker_range.StartPosition(),
|
| + marker_range.EndPosition(),
|
| + DocumentMarker::kTextMatch);
|
| +
|
| + EXPECT_EQ(3u, GetDocument().Markers().Markers().size());
|
| +
|
| + // insert in middle of second marker
|
| + Vector<CompositionUnderline> empty_underlines;
|
| + Controller().SetComposition("", empty_underlines, 7, 7);
|
| + Controller().CommitText(String("66666"), empty_underlines, -7);
|
| +
|
| + EXPECT_EQ(3u, GetDocument().Markers().Markers().size());
|
| +
|
| + EXPECT_EQ(0u, GetDocument().Markers().Markers()[0]->StartOffset());
|
| + EXPECT_EQ(5u, GetDocument().Markers().Markers()[0]->EndOffset());
|
| +
|
| + EXPECT_EQ(5u, GetDocument().Markers().Markers()[1]->StartOffset());
|
| + EXPECT_EQ(15u, GetDocument().Markers().Markers()[1]->EndOffset());
|
| +
|
| + EXPECT_EQ(15u, GetDocument().Markers().Markers()[2]->StartOffset());
|
| + EXPECT_EQ(20u, GetDocument().Markers().Markers()[2]->EndOffset());
|
| +}
|
| +
|
| +TEST_F(InputMethodControllerTest, Marker_InsertBetweenMarkers) {
|
| + Element* div = InsertHTMLElement(
|
| + "<div id='sample' contenteditable>1111122222333334444455555</div>",
|
| + "sample");
|
| +
|
| + EphemeralRange marker_range = PlainTextRange(0, 5).CreateRange(*div);
|
| + GetDocument().Markers().AddMarker(marker_range.StartPosition(),
|
| + marker_range.EndPosition(),
|
| + DocumentMarker::kTextMatch);
|
| +
|
| + marker_range = PlainTextRange(5, 15).CreateRange(*div);
|
| + GetDocument().Markers().AddMarker(marker_range.StartPosition(),
|
| + marker_range.EndPosition(),
|
| + DocumentMarker::kTextMatch);
|
| +
|
| + marker_range = PlainTextRange(15, 20).CreateRange(*div);
|
| + GetDocument().Markers().AddMarker(marker_range.StartPosition(),
|
| + marker_range.EndPosition(),
|
| + DocumentMarker::kTextMatch);
|
| +
|
| + EXPECT_EQ(3u, GetDocument().Markers().Markers().size());
|
| +
|
| + Vector<CompositionUnderline> empty_underlines;
|
| + Controller().SetComposition("", empty_underlines, 5, 5);
|
| + Controller().CommitText(String("77777"), empty_underlines, 0);
|
| +
|
| + EXPECT_EQ(3u, GetDocument().Markers().Markers().size());
|
| +
|
| + EXPECT_EQ(0u, GetDocument().Markers().Markers()[0]->StartOffset());
|
| + EXPECT_EQ(5u, GetDocument().Markers().Markers()[0]->EndOffset());
|
| +
|
| + EXPECT_EQ(10u, GetDocument().Markers().Markers()[1]->StartOffset());
|
| + EXPECT_EQ(20u, GetDocument().Markers().Markers()[1]->EndOffset());
|
| +
|
| + EXPECT_EQ(20u, GetDocument().Markers().Markers()[2]->StartOffset());
|
| + EXPECT_EQ(25u, GetDocument().Markers().Markers()[2]->EndOffset());
|
| +}
|
| +
|
| } // namespace blink
|
|
|