Chromium Code Reviews| 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 1518 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1529 } | 1529 } |
| 1530 | 1530 |
| 1531 TEST_F(InputMethodControllerTest, | 1531 TEST_F(InputMethodControllerTest, |
| 1532 Marker_WhitespaceFixupAroundMarkerNotContainingSpace) { | 1532 Marker_WhitespaceFixupAroundMarkerNotContainingSpace) { |
| 1533 Element* div = InsertHTMLElement( | 1533 Element* div = InsertHTMLElement( |
| 1534 "<div id='sample' contenteditable>Initial text blah</div>", "sample"); | 1534 "<div id='sample' contenteditable>Initial text blah</div>", "sample"); |
| 1535 | 1535 |
| 1536 // Add marker under "text" (use TextMatch since Composition markers don't | 1536 // Add marker under "text" (use TextMatch since Composition markers don't |
| 1537 // persist across editing operations) | 1537 // persist across editing operations) |
| 1538 EphemeralRange marker_range = PlainTextRange(8, 12).CreateRange(*div); | 1538 EphemeralRange marker_range = PlainTextRange(8, 12).CreateRange(*div); |
| 1539 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1539 GetDocument().Markers().AddTextMatchMarker( |
|
yosin_UTC9
2017/05/23 09:35:04
Could you move IMCTest.cpp changes into another pa
| |
| 1540 marker_range.EndPosition(), | 1540 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1541 DocumentMarker::kTextMatch); | |
| 1542 // Delete "Initial" | 1541 // Delete "Initial" |
| 1543 Vector<CompositionUnderline> empty_underlines; | 1542 Vector<CompositionUnderline> empty_underlines; |
| 1544 Controller().SetCompositionFromExistingText(empty_underlines, 0, 7); | 1543 Controller().SetCompositionFromExistingText(empty_underlines, 0, 7); |
| 1545 Controller().CommitText(String(""), empty_underlines, 0); | 1544 Controller().CommitText(String(""), empty_underlines, 0); |
| 1546 | 1545 |
| 1547 // Delete "blah" | 1546 // Delete "blah" |
| 1548 Controller().SetCompositionFromExistingText(empty_underlines, 6, 10); | 1547 Controller().SetCompositionFromExistingText(empty_underlines, 6, 10); |
| 1549 Controller().CommitText(String(""), empty_underlines, 0); | 1548 Controller().CommitText(String(""), empty_underlines, 0); |
| 1550 | 1549 |
| 1551 // Check that the marker is still attached to "text" and doesn't include | 1550 // Check that the marker is still attached to "text" and doesn't include |
| 1552 // either space around it | 1551 // either space around it |
| 1553 EXPECT_EQ(1u, GetDocument().Markers().MarkersFor(div->firstChild()).size()); | 1552 EXPECT_EQ(1u, GetDocument().Markers().MarkersFor(div->firstChild()).size()); |
| 1554 EXPECT_STREQ("text", | 1553 EXPECT_STREQ("text", |
| 1555 GetMarkedText(GetDocument().Markers(), div->firstChild(), 0) | 1554 GetMarkedText(GetDocument().Markers(), div->firstChild(), 0) |
| 1556 .Utf8() | 1555 .Utf8() |
| 1557 .data()); | 1556 .data()); |
| 1558 } | 1557 } |
| 1559 | 1558 |
| 1560 TEST_F(InputMethodControllerTest, | 1559 TEST_F(InputMethodControllerTest, |
| 1561 Marker_WhitespaceFixupAroundMarkerBeginningWithSpace) { | 1560 Marker_WhitespaceFixupAroundMarkerBeginningWithSpace) { |
| 1562 Element* div = InsertHTMLElement( | 1561 Element* div = InsertHTMLElement( |
| 1563 "<div id='sample' contenteditable>Initial text blah</div>", "sample"); | 1562 "<div id='sample' contenteditable>Initial text blah</div>", "sample"); |
| 1564 | 1563 |
| 1565 // Add marker under " text" (use TextMatch since Composition markers don't | 1564 // Add marker under " text" (use TextMatch since Composition markers don't |
| 1566 // persist across editing operations) | 1565 // persist across editing operations) |
| 1567 EphemeralRange marker_range = PlainTextRange(7, 12).CreateRange(*div); | 1566 EphemeralRange marker_range = PlainTextRange(7, 12).CreateRange(*div); |
| 1568 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1567 GetDocument().Markers().AddTextMatchMarker( |
| 1569 marker_range.EndPosition(), | 1568 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1570 DocumentMarker::kTextMatch); | |
| 1571 // Delete "Initial" | 1569 // Delete "Initial" |
| 1572 Vector<CompositionUnderline> empty_underlines; | 1570 Vector<CompositionUnderline> empty_underlines; |
| 1573 Controller().SetCompositionFromExistingText(empty_underlines, 0, 7); | 1571 Controller().SetCompositionFromExistingText(empty_underlines, 0, 7); |
| 1574 Controller().CommitText(String(""), empty_underlines, 0); | 1572 Controller().CommitText(String(""), empty_underlines, 0); |
| 1575 | 1573 |
| 1576 // Delete "blah" | 1574 // Delete "blah" |
| 1577 Controller().SetCompositionFromExistingText(empty_underlines, 6, 10); | 1575 Controller().SetCompositionFromExistingText(empty_underlines, 6, 10); |
| 1578 Controller().CommitText(String(""), empty_underlines, 0); | 1576 Controller().CommitText(String(""), empty_underlines, 0); |
| 1579 | 1577 |
| 1580 // Check that the marker is still attached to " text" and includes the space | 1578 // Check that the marker is still attached to " text" and includes the space |
| 1581 // before "text" but not the space after | 1579 // before "text" but not the space after |
| 1582 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); | 1580 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); |
| 1583 ASSERT_STREQ("\xC2\xA0text", | 1581 ASSERT_STREQ("\xC2\xA0text", |
| 1584 GetMarkedText(GetDocument().Markers(), div->firstChild(), 0) | 1582 GetMarkedText(GetDocument().Markers(), div->firstChild(), 0) |
| 1585 .Utf8() | 1583 .Utf8() |
| 1586 .data()); | 1584 .data()); |
| 1587 } | 1585 } |
| 1588 | 1586 |
| 1589 TEST_F(InputMethodControllerTest, | 1587 TEST_F(InputMethodControllerTest, |
| 1590 Marker_WhitespaceFixupAroundMarkerEndingWithSpace) { | 1588 Marker_WhitespaceFixupAroundMarkerEndingWithSpace) { |
| 1591 Element* div = InsertHTMLElement( | 1589 Element* div = InsertHTMLElement( |
| 1592 "<div id='sample' contenteditable>Initial text blah</div>", "sample"); | 1590 "<div id='sample' contenteditable>Initial text blah</div>", "sample"); |
| 1593 | 1591 |
| 1594 // Add marker under "text " (use TextMatch since Composition markers don't | 1592 // Add marker under "text " (use TextMatch since Composition markers don't |
| 1595 // persist across editing operations) | 1593 // persist across editing operations) |
| 1596 EphemeralRange marker_range = PlainTextRange(8, 13).CreateRange(*div); | 1594 EphemeralRange marker_range = PlainTextRange(8, 13).CreateRange(*div); |
| 1597 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1595 GetDocument().Markers().AddTextMatchMarker( |
| 1598 marker_range.EndPosition(), | 1596 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1599 DocumentMarker::kTextMatch); | |
| 1600 // Delete "Initial" | 1597 // Delete "Initial" |
| 1601 Vector<CompositionUnderline> empty_underlines; | 1598 Vector<CompositionUnderline> empty_underlines; |
| 1602 Controller().SetCompositionFromExistingText(empty_underlines, 0, 7); | 1599 Controller().SetCompositionFromExistingText(empty_underlines, 0, 7); |
| 1603 Controller().CommitText(String(""), empty_underlines, 0); | 1600 Controller().CommitText(String(""), empty_underlines, 0); |
| 1604 | 1601 |
| 1605 // Delete "blah" | 1602 // Delete "blah" |
| 1606 Controller().SetCompositionFromExistingText(empty_underlines, 6, 10); | 1603 Controller().SetCompositionFromExistingText(empty_underlines, 6, 10); |
| 1607 Controller().CommitText(String(""), empty_underlines, 0); | 1604 Controller().CommitText(String(""), empty_underlines, 0); |
| 1608 | 1605 |
| 1609 // Check that the marker is still attached to "text " and includes the space | 1606 // Check that the marker is still attached to "text " and includes the space |
| 1610 // after "text" but not the space before | 1607 // after "text" but not the space before |
| 1611 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); | 1608 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); |
| 1612 ASSERT_STREQ("text\xC2\xA0", | 1609 ASSERT_STREQ("text\xC2\xA0", |
| 1613 GetMarkedText(GetDocument().Markers(), div->firstChild(), 0) | 1610 GetMarkedText(GetDocument().Markers(), div->firstChild(), 0) |
| 1614 .Utf8() | 1611 .Utf8() |
| 1615 .data()); | 1612 .data()); |
| 1616 } | 1613 } |
| 1617 | 1614 |
| 1618 TEST_F(InputMethodControllerTest, | 1615 TEST_F(InputMethodControllerTest, |
| 1619 Marker_WhitespaceFixupAroundMarkerBeginningAndEndingWithSpaces) { | 1616 Marker_WhitespaceFixupAroundMarkerBeginningAndEndingWithSpaces) { |
| 1620 Element* div = InsertHTMLElement( | 1617 Element* div = InsertHTMLElement( |
| 1621 "<div id='sample' contenteditable>Initial text blah</div>", "sample"); | 1618 "<div id='sample' contenteditable>Initial text blah</div>", "sample"); |
| 1622 | 1619 |
| 1623 // Add marker under " text " (use TextMatch since Composition markers don't | 1620 // Add marker under " text " (use TextMatch since Composition markers don't |
| 1624 // persist across editing operations) | 1621 // persist across editing operations) |
| 1625 EphemeralRange marker_range = PlainTextRange(7, 13).CreateRange(*div); | 1622 EphemeralRange marker_range = PlainTextRange(7, 13).CreateRange(*div); |
| 1626 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1623 GetDocument().Markers().AddTextMatchMarker( |
| 1627 marker_range.EndPosition(), | 1624 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1628 DocumentMarker::kTextMatch); | |
| 1629 | 1625 |
| 1630 // Delete "Initial" | 1626 // Delete "Initial" |
| 1631 Vector<CompositionUnderline> empty_underlines; | 1627 Vector<CompositionUnderline> empty_underlines; |
| 1632 Controller().SetCompositionFromExistingText(empty_underlines, 0, 7); | 1628 Controller().SetCompositionFromExistingText(empty_underlines, 0, 7); |
| 1633 Controller().CommitText(String(""), empty_underlines, 0); | 1629 Controller().CommitText(String(""), empty_underlines, 0); |
| 1634 | 1630 |
| 1635 // Delete "blah" | 1631 // Delete "blah" |
| 1636 Controller().SetCompositionFromExistingText(empty_underlines, 6, 10); | 1632 Controller().SetCompositionFromExistingText(empty_underlines, 6, 10); |
| 1637 Controller().CommitText(String(""), empty_underlines, 0); | 1633 Controller().CommitText(String(""), empty_underlines, 0); |
| 1638 | 1634 |
| 1639 // Check that the marker is still attached to " text " and includes both the | 1635 // Check that the marker is still attached to " text " and includes both the |
| 1640 // space before "text" and the space after | 1636 // space before "text" and the space after |
| 1641 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); | 1637 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); |
| 1642 ASSERT_STREQ("\xC2\xA0text\xC2\xA0", | 1638 ASSERT_STREQ("\xC2\xA0text\xC2\xA0", |
| 1643 GetMarkedText(GetDocument().Markers(), div->firstChild(), 0) | 1639 GetMarkedText(GetDocument().Markers(), div->firstChild(), 0) |
| 1644 .Utf8() | 1640 .Utf8() |
| 1645 .data()); | 1641 .data()); |
| 1646 } | 1642 } |
| 1647 | 1643 |
| 1648 TEST_F(InputMethodControllerTest, Marker_ReplaceStartOfMarker) { | 1644 TEST_F(InputMethodControllerTest, Marker_ReplaceStartOfMarker) { |
| 1649 Element* div = InsertHTMLElement( | 1645 Element* div = InsertHTMLElement( |
| 1650 "<div id='sample' contenteditable>Initial text</div>", "sample"); | 1646 "<div id='sample' contenteditable>Initial text</div>", "sample"); |
| 1651 | 1647 |
| 1652 // Add marker under "Initial text" | 1648 // Add marker under "Initial text" |
| 1653 EphemeralRange marker_range = PlainTextRange(0, 12).CreateRange(*div); | 1649 EphemeralRange marker_range = PlainTextRange(0, 12).CreateRange(*div); |
| 1654 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1650 GetDocument().Markers().AddTextMatchMarker( |
| 1655 marker_range.EndPosition(), | 1651 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1656 DocumentMarker::kTextMatch); | |
| 1657 | 1652 |
| 1658 // Replace "Initial" with "Original" | 1653 // Replace "Initial" with "Original" |
| 1659 Vector<CompositionUnderline> empty_underlines; | 1654 Vector<CompositionUnderline> empty_underlines; |
| 1660 Controller().SetCompositionFromExistingText(empty_underlines, 0, 7); | 1655 Controller().SetCompositionFromExistingText(empty_underlines, 0, 7); |
| 1661 Controller().CommitText(String("Original"), empty_underlines, 0); | 1656 Controller().CommitText(String("Original"), empty_underlines, 0); |
| 1662 | 1657 |
| 1663 // Verify marker is under "Original text" | 1658 // Verify marker is under "Original text" |
| 1664 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); | 1659 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); |
| 1665 ASSERT_STREQ("Original text", | 1660 ASSERT_STREQ("Original text", |
| 1666 GetMarkedText(GetDocument().Markers(), div->firstChild(), 0) | 1661 GetMarkedText(GetDocument().Markers(), div->firstChild(), 0) |
| 1667 .Utf8() | 1662 .Utf8() |
| 1668 .data()); | 1663 .data()); |
| 1669 } | 1664 } |
| 1670 | 1665 |
| 1671 TEST_F(InputMethodControllerTest, Marker_ReplaceTextContainsStartOfMarker) { | 1666 TEST_F(InputMethodControllerTest, Marker_ReplaceTextContainsStartOfMarker) { |
| 1672 Element* div = InsertHTMLElement( | 1667 Element* div = InsertHTMLElement( |
| 1673 "<div id='sample' contenteditable>This is some initial text</div>", | 1668 "<div id='sample' contenteditable>This is some initial text</div>", |
| 1674 "sample"); | 1669 "sample"); |
| 1675 | 1670 |
| 1676 // Add marker under "initial text" | 1671 // Add marker under "initial text" |
| 1677 EphemeralRange marker_range = PlainTextRange(13, 25).CreateRange(*div); | 1672 EphemeralRange marker_range = PlainTextRange(13, 25).CreateRange(*div); |
| 1678 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1673 GetDocument().Markers().AddTextMatchMarker( |
| 1679 marker_range.EndPosition(), | 1674 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1680 DocumentMarker::kTextMatch); | |
| 1681 | 1675 |
| 1682 // Replace "some initial" with "boring" | 1676 // Replace "some initial" with "boring" |
| 1683 Vector<CompositionUnderline> empty_underlines; | 1677 Vector<CompositionUnderline> empty_underlines; |
| 1684 Controller().SetCompositionFromExistingText(empty_underlines, 8, 20); | 1678 Controller().SetCompositionFromExistingText(empty_underlines, 8, 20); |
| 1685 Controller().CommitText(String("boring"), empty_underlines, 0); | 1679 Controller().CommitText(String("boring"), empty_underlines, 0); |
| 1686 | 1680 |
| 1687 // Verify marker is under " text" | 1681 // Verify marker is under " text" |
| 1688 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); | 1682 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); |
| 1689 EXPECT_STREQ(" text", | 1683 EXPECT_STREQ(" text", |
| 1690 GetMarkedText(GetDocument().Markers(), div->firstChild(), 0) | 1684 GetMarkedText(GetDocument().Markers(), div->firstChild(), 0) |
| 1691 .Utf8() | 1685 .Utf8() |
| 1692 .data()); | 1686 .data()); |
| 1693 } | 1687 } |
| 1694 | 1688 |
| 1695 TEST_F(InputMethodControllerTest, Marker_ReplaceEndOfMarker) { | 1689 TEST_F(InputMethodControllerTest, Marker_ReplaceEndOfMarker) { |
| 1696 Element* div = InsertHTMLElement( | 1690 Element* div = InsertHTMLElement( |
| 1697 "<div id='sample' contenteditable>Initial text</div>", "sample"); | 1691 "<div id='sample' contenteditable>Initial text</div>", "sample"); |
| 1698 | 1692 |
| 1699 // Add marker under "Initial text" | 1693 // Add marker under "Initial text" |
| 1700 EphemeralRange marker_range = PlainTextRange(0, 12).CreateRange(*div); | 1694 EphemeralRange marker_range = PlainTextRange(0, 12).CreateRange(*div); |
| 1701 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1695 GetDocument().Markers().AddTextMatchMarker( |
| 1702 marker_range.EndPosition(), | 1696 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1703 DocumentMarker::kTextMatch); | |
| 1704 | 1697 |
| 1705 // Replace "text" with "string" | 1698 // Replace "text" with "string" |
| 1706 Vector<CompositionUnderline> empty_underlines; | 1699 Vector<CompositionUnderline> empty_underlines; |
| 1707 Controller().SetCompositionFromExistingText(empty_underlines, 8, 12); | 1700 Controller().SetCompositionFromExistingText(empty_underlines, 8, 12); |
| 1708 Controller().CommitText(String("string"), empty_underlines, 0); | 1701 Controller().CommitText(String("string"), empty_underlines, 0); |
| 1709 | 1702 |
| 1710 // Verify marker is under "Initial string" | 1703 // Verify marker is under "Initial string" |
| 1711 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); | 1704 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); |
| 1712 ASSERT_STREQ("Initial string", | 1705 ASSERT_STREQ("Initial string", |
| 1713 GetMarkedText(GetDocument().Markers(), div->firstChild(), 0) | 1706 GetMarkedText(GetDocument().Markers(), div->firstChild(), 0) |
| 1714 .Utf8() | 1707 .Utf8() |
| 1715 .data()); | 1708 .data()); |
| 1716 } | 1709 } |
| 1717 | 1710 |
| 1718 TEST_F(InputMethodControllerTest, Marker_ReplaceTextContainsEndOfMarker) { | 1711 TEST_F(InputMethodControllerTest, Marker_ReplaceTextContainsEndOfMarker) { |
| 1719 Element* div = InsertHTMLElement( | 1712 Element* div = InsertHTMLElement( |
| 1720 "<div id='sample' contenteditable>This is some initial text</div>", | 1713 "<div id='sample' contenteditable>This is some initial text</div>", |
| 1721 "sample"); | 1714 "sample"); |
| 1722 | 1715 |
| 1723 // Add marker under "some initial" | 1716 // Add marker under "some initial" |
| 1724 EphemeralRange marker_range = PlainTextRange(8, 20).CreateRange(*div); | 1717 EphemeralRange marker_range = PlainTextRange(8, 20).CreateRange(*div); |
| 1725 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1718 GetDocument().Markers().AddTextMatchMarker( |
| 1726 marker_range.EndPosition(), | 1719 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1727 DocumentMarker::kTextMatch); | |
| 1728 | 1720 |
| 1729 // Replace "initial text" with "content" | 1721 // Replace "initial text" with "content" |
| 1730 Vector<CompositionUnderline> empty_underlines; | 1722 Vector<CompositionUnderline> empty_underlines; |
| 1731 Controller().SetCompositionFromExistingText(empty_underlines, 13, 25); | 1723 Controller().SetCompositionFromExistingText(empty_underlines, 13, 25); |
| 1732 Controller().CommitText(String("content"), empty_underlines, 0); | 1724 Controller().CommitText(String("content"), empty_underlines, 0); |
| 1733 | 1725 |
| 1734 EXPECT_STREQ("This is some content", div->innerHTML().Utf8().data()); | 1726 EXPECT_STREQ("This is some content", div->innerHTML().Utf8().data()); |
| 1735 | 1727 |
| 1736 // Verify marker is under "some " | 1728 // Verify marker is under "some " |
| 1737 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); | 1729 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); |
| 1738 EXPECT_STREQ("some ", | 1730 EXPECT_STREQ("some ", |
| 1739 GetMarkedText(GetDocument().Markers(), div->firstChild(), 0) | 1731 GetMarkedText(GetDocument().Markers(), div->firstChild(), 0) |
| 1740 .Utf8() | 1732 .Utf8() |
| 1741 .data()); | 1733 .data()); |
| 1742 } | 1734 } |
| 1743 | 1735 |
| 1744 TEST_F(InputMethodControllerTest, Marker_ReplaceEntireMarker) { | 1736 TEST_F(InputMethodControllerTest, Marker_ReplaceEntireMarker) { |
| 1745 Element* div = InsertHTMLElement( | 1737 Element* div = InsertHTMLElement( |
| 1746 "<div id='sample' contenteditable>Initial text</div>", "sample"); | 1738 "<div id='sample' contenteditable>Initial text</div>", "sample"); |
| 1747 | 1739 |
| 1748 // Add marker under "text" | 1740 // Add marker under "text" |
| 1749 EphemeralRange marker_range = PlainTextRange(8, 12).CreateRange(*div); | 1741 EphemeralRange marker_range = PlainTextRange(8, 12).CreateRange(*div); |
| 1750 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1742 GetDocument().Markers().AddTextMatchMarker( |
| 1751 marker_range.EndPosition(), | 1743 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1752 DocumentMarker::kTextMatch); | |
| 1753 | 1744 |
| 1754 // Replace "text" with "string" | 1745 // Replace "text" with "string" |
| 1755 Vector<CompositionUnderline> empty_underlines; | 1746 Vector<CompositionUnderline> empty_underlines; |
| 1756 Controller().SetCompositionFromExistingText(empty_underlines, 8, 12); | 1747 Controller().SetCompositionFromExistingText(empty_underlines, 8, 12); |
| 1757 Controller().CommitText(String("string"), empty_underlines, 0); | 1748 Controller().CommitText(String("string"), empty_underlines, 0); |
| 1758 | 1749 |
| 1759 // Verify marker is under "string" | 1750 // Verify marker is under "string" |
| 1760 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); | 1751 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); |
| 1761 ASSERT_STREQ("string", | 1752 ASSERT_STREQ("string", |
| 1762 GetMarkedText(GetDocument().Markers(), div->firstChild(), 0) | 1753 GetMarkedText(GetDocument().Markers(), div->firstChild(), 0) |
| 1763 .Utf8() | 1754 .Utf8() |
| 1764 .data()); | 1755 .data()); |
| 1765 } | 1756 } |
| 1766 | 1757 |
| 1767 TEST_F(InputMethodControllerTest, Marker_ReplaceTextWithMarkerAtBeginning) { | 1758 TEST_F(InputMethodControllerTest, Marker_ReplaceTextWithMarkerAtBeginning) { |
| 1768 Element* div = InsertHTMLElement( | 1759 Element* div = InsertHTMLElement( |
| 1769 "<div id='sample' contenteditable>Initial text</div>", "sample"); | 1760 "<div id='sample' contenteditable>Initial text</div>", "sample"); |
| 1770 | 1761 |
| 1771 // Add marker under "Initial" | 1762 // Add marker under "Initial" |
| 1772 EphemeralRange marker_range = PlainTextRange(0, 7).CreateRange(*div); | 1763 EphemeralRange marker_range = PlainTextRange(0, 7).CreateRange(*div); |
| 1773 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1764 GetDocument().Markers().AddTextMatchMarker( |
| 1774 marker_range.EndPosition(), | 1765 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1775 DocumentMarker::kTextMatch); | |
| 1776 | 1766 |
| 1777 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); | 1767 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); |
| 1778 | 1768 |
| 1779 // Replace "Initial text" with "New string" | 1769 // Replace "Initial text" with "New string" |
| 1780 Vector<CompositionUnderline> empty_underlines; | 1770 Vector<CompositionUnderline> empty_underlines; |
| 1781 Controller().SetCompositionFromExistingText(empty_underlines, 0, 12); | 1771 Controller().SetCompositionFromExistingText(empty_underlines, 0, 12); |
| 1782 Controller().CommitText(String("New string"), empty_underlines, 0); | 1772 Controller().CommitText(String("New string"), empty_underlines, 0); |
| 1783 | 1773 |
| 1784 // Verify marker was removed | 1774 // Verify marker was removed |
| 1785 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); | 1775 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); |
| 1786 } | 1776 } |
| 1787 | 1777 |
| 1788 TEST_F(InputMethodControllerTest, Marker_ReplaceTextWithMarkerAtEnd) { | 1778 TEST_F(InputMethodControllerTest, Marker_ReplaceTextWithMarkerAtEnd) { |
| 1789 Element* div = InsertHTMLElement( | 1779 Element* div = InsertHTMLElement( |
| 1790 "<div id='sample' contenteditable>Initial text</div>", "sample"); | 1780 "<div id='sample' contenteditable>Initial text</div>", "sample"); |
| 1791 | 1781 |
| 1792 // Add marker under "text" | 1782 // Add marker under "text" |
| 1793 EphemeralRange marker_range = PlainTextRange(8, 12).CreateRange(*div); | 1783 EphemeralRange marker_range = PlainTextRange(8, 12).CreateRange(*div); |
| 1794 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1784 GetDocument().Markers().AddTextMatchMarker( |
| 1795 marker_range.EndPosition(), | 1785 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1796 DocumentMarker::kTextMatch); | |
| 1797 | 1786 |
| 1798 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); | 1787 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); |
| 1799 | 1788 |
| 1800 // Replace "Initial text" with "New string" | 1789 // Replace "Initial text" with "New string" |
| 1801 Vector<CompositionUnderline> empty_underlines; | 1790 Vector<CompositionUnderline> empty_underlines; |
| 1802 Controller().SetCompositionFromExistingText(empty_underlines, 0, 12); | 1791 Controller().SetCompositionFromExistingText(empty_underlines, 0, 12); |
| 1803 Controller().CommitText(String("New string"), empty_underlines, 0); | 1792 Controller().CommitText(String("New string"), empty_underlines, 0); |
| 1804 | 1793 |
| 1805 // Verify marker was removed | 1794 // Verify marker was removed |
| 1806 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); | 1795 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); |
| 1807 } | 1796 } |
| 1808 | 1797 |
| 1809 TEST_F(InputMethodControllerTest, Marker_Deletions) { | 1798 TEST_F(InputMethodControllerTest, Marker_Deletions) { |
| 1810 Element* div = InsertHTMLElement( | 1799 Element* div = InsertHTMLElement( |
| 1811 "<div id='sample' contenteditable>1111122222333334444455555</div>", | 1800 "<div id='sample' contenteditable>1111122222333334444455555</div>", |
| 1812 "sample"); | 1801 "sample"); |
| 1813 | 1802 |
| 1814 EphemeralRange marker_range = PlainTextRange(0, 5).CreateRange(*div); | 1803 EphemeralRange marker_range = PlainTextRange(0, 5).CreateRange(*div); |
| 1815 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1804 GetDocument().Markers().AddTextMatchMarker( |
| 1816 marker_range.EndPosition(), | 1805 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1817 DocumentMarker::kTextMatch); | |
| 1818 | 1806 |
| 1819 marker_range = PlainTextRange(5, 10).CreateRange(*div); | 1807 marker_range = PlainTextRange(5, 10).CreateRange(*div); |
| 1820 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1808 GetDocument().Markers().AddTextMatchMarker( |
| 1821 marker_range.EndPosition(), | 1809 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1822 DocumentMarker::kTextMatch); | |
| 1823 | 1810 |
| 1824 marker_range = PlainTextRange(10, 15).CreateRange(*div); | 1811 marker_range = PlainTextRange(10, 15).CreateRange(*div); |
| 1825 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1812 GetDocument().Markers().AddTextMatchMarker( |
| 1826 marker_range.EndPosition(), | 1813 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1827 DocumentMarker::kTextMatch); | |
| 1828 | 1814 |
| 1829 marker_range = PlainTextRange(15, 20).CreateRange(*div); | 1815 marker_range = PlainTextRange(15, 20).CreateRange(*div); |
| 1830 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1816 GetDocument().Markers().AddTextMatchMarker( |
| 1831 marker_range.EndPosition(), | 1817 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1832 DocumentMarker::kTextMatch); | |
| 1833 | 1818 |
| 1834 marker_range = PlainTextRange(20, 25).CreateRange(*div); | 1819 marker_range = PlainTextRange(20, 25).CreateRange(*div); |
| 1835 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1820 GetDocument().Markers().AddTextMatchMarker( |
| 1836 marker_range.EndPosition(), | 1821 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1837 DocumentMarker::kTextMatch); | |
| 1838 | 1822 |
| 1839 EXPECT_EQ(5u, GetDocument().Markers().Markers().size()); | 1823 EXPECT_EQ(5u, GetDocument().Markers().Markers().size()); |
| 1840 | 1824 |
| 1841 // Delete third marker and portions of second and fourth | 1825 // Delete third marker and portions of second and fourth |
| 1842 Vector<CompositionUnderline> empty_underlines; | 1826 Vector<CompositionUnderline> empty_underlines; |
| 1843 Controller().SetCompositionFromExistingText(empty_underlines, 8, 17); | 1827 Controller().SetCompositionFromExistingText(empty_underlines, 8, 17); |
| 1844 Controller().CommitText(String(""), empty_underlines, 0); | 1828 Controller().CommitText(String(""), empty_underlines, 0); |
| 1845 | 1829 |
| 1846 // Verify markers were updated correctly | 1830 // Verify markers were updated correctly |
| 1847 EXPECT_EQ(4u, GetDocument().Markers().Markers().size()); | 1831 EXPECT_EQ(4u, GetDocument().Markers().Markers().size()); |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 1858 EXPECT_EQ(11u, GetDocument().Markers().Markers()[3]->StartOffset()); | 1842 EXPECT_EQ(11u, GetDocument().Markers().Markers()[3]->StartOffset()); |
| 1859 EXPECT_EQ(16u, GetDocument().Markers().Markers()[3]->EndOffset()); | 1843 EXPECT_EQ(16u, GetDocument().Markers().Markers()[3]->EndOffset()); |
| 1860 } | 1844 } |
| 1861 | 1845 |
| 1862 TEST_F(InputMethodControllerTest, Marker_DeleteExactlyOnMarker) { | 1846 TEST_F(InputMethodControllerTest, Marker_DeleteExactlyOnMarker) { |
| 1863 Element* div = InsertHTMLElement( | 1847 Element* div = InsertHTMLElement( |
| 1864 "<div id='sample' contenteditable>1111122222333334444455555</div>", | 1848 "<div id='sample' contenteditable>1111122222333334444455555</div>", |
| 1865 "sample"); | 1849 "sample"); |
| 1866 | 1850 |
| 1867 EphemeralRange marker_range = PlainTextRange(5, 10).CreateRange(*div); | 1851 EphemeralRange marker_range = PlainTextRange(5, 10).CreateRange(*div); |
| 1868 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1852 GetDocument().Markers().AddTextMatchMarker( |
| 1869 marker_range.EndPosition(), | 1853 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1870 DocumentMarker::kTextMatch); | |
| 1871 | 1854 |
| 1872 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); | 1855 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); |
| 1873 | 1856 |
| 1874 // Delete exactly on the marker | 1857 // Delete exactly on the marker |
| 1875 Vector<CompositionUnderline> empty_underlines; | 1858 Vector<CompositionUnderline> empty_underlines; |
| 1876 Controller().SetCompositionFromExistingText(empty_underlines, 5, 10); | 1859 Controller().SetCompositionFromExistingText(empty_underlines, 5, 10); |
| 1877 Controller().CommitText(String(""), empty_underlines, 0); | 1860 Controller().CommitText(String(""), empty_underlines, 0); |
| 1878 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); | 1861 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); |
| 1879 } | 1862 } |
| 1880 | 1863 |
| 1881 TEST_F(InputMethodControllerTest, Marker_DeleteMiddleOfMarker) { | 1864 TEST_F(InputMethodControllerTest, Marker_DeleteMiddleOfMarker) { |
| 1882 Element* div = InsertHTMLElement( | 1865 Element* div = InsertHTMLElement( |
| 1883 "<div id='sample' contenteditable>1111122222333334444455555</div>", | 1866 "<div id='sample' contenteditable>1111122222333334444455555</div>", |
| 1884 "sample"); | 1867 "sample"); |
| 1885 | 1868 |
| 1886 EphemeralRange marker_range = PlainTextRange(5, 10).CreateRange(*div); | 1869 EphemeralRange marker_range = PlainTextRange(5, 10).CreateRange(*div); |
| 1887 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1870 GetDocument().Markers().AddTextMatchMarker( |
| 1888 marker_range.EndPosition(), | 1871 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1889 DocumentMarker::kTextMatch); | |
| 1890 | 1872 |
| 1891 // Delete middle of marker | 1873 // Delete middle of marker |
| 1892 Vector<CompositionUnderline> empty_underlines; | 1874 Vector<CompositionUnderline> empty_underlines; |
| 1893 Controller().SetCompositionFromExistingText(empty_underlines, 6, 9); | 1875 Controller().SetCompositionFromExistingText(empty_underlines, 6, 9); |
| 1894 Controller().CommitText(String(""), empty_underlines, 0); | 1876 Controller().CommitText(String(""), empty_underlines, 0); |
| 1895 | 1877 |
| 1896 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); | 1878 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); |
| 1897 | 1879 |
| 1898 EXPECT_EQ(5u, GetDocument().Markers().Markers()[0]->StartOffset()); | 1880 EXPECT_EQ(5u, GetDocument().Markers().Markers()[0]->StartOffset()); |
| 1899 EXPECT_EQ(7u, GetDocument().Markers().Markers()[0]->EndOffset()); | 1881 EXPECT_EQ(7u, GetDocument().Markers().Markers()[0]->EndOffset()); |
| 1900 } | 1882 } |
| 1901 | 1883 |
| 1902 TEST_F(InputMethodControllerTest, Marker_InsertInMarkerInterior) { | 1884 TEST_F(InputMethodControllerTest, Marker_InsertInMarkerInterior) { |
| 1903 Element* div = InsertHTMLElement( | 1885 Element* div = InsertHTMLElement( |
| 1904 "<div id='sample' contenteditable>1111122222333334444455555</div>", | 1886 "<div id='sample' contenteditable>1111122222333334444455555</div>", |
| 1905 "sample"); | 1887 "sample"); |
| 1906 | 1888 |
| 1907 EphemeralRange marker_range = PlainTextRange(0, 5).CreateRange(*div); | 1889 EphemeralRange marker_range = PlainTextRange(0, 5).CreateRange(*div); |
| 1908 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1890 GetDocument().Markers().AddTextMatchMarker( |
| 1909 marker_range.EndPosition(), | 1891 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1910 DocumentMarker::kTextMatch); | |
| 1911 | 1892 |
| 1912 marker_range = PlainTextRange(5, 10).CreateRange(*div); | 1893 marker_range = PlainTextRange(5, 10).CreateRange(*div); |
| 1913 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1894 GetDocument().Markers().AddTextMatchMarker( |
| 1914 marker_range.EndPosition(), | 1895 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1915 DocumentMarker::kTextMatch); | |
| 1916 | 1896 |
| 1917 marker_range = PlainTextRange(10, 15).CreateRange(*div); | 1897 marker_range = PlainTextRange(10, 15).CreateRange(*div); |
| 1918 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1898 GetDocument().Markers().AddTextMatchMarker( |
| 1919 marker_range.EndPosition(), | 1899 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1920 DocumentMarker::kTextMatch); | |
| 1921 | 1900 |
| 1922 EXPECT_EQ(3u, GetDocument().Markers().Markers().size()); | 1901 EXPECT_EQ(3u, GetDocument().Markers().Markers().size()); |
| 1923 | 1902 |
| 1924 // insert in middle of second marker | 1903 // insert in middle of second marker |
| 1925 Vector<CompositionUnderline> empty_underlines; | 1904 Vector<CompositionUnderline> empty_underlines; |
| 1926 Controller().SetComposition("", empty_underlines, 7, 7); | 1905 Controller().SetComposition("", empty_underlines, 7, 7); |
| 1927 Controller().CommitText(String("66666"), empty_underlines, -7); | 1906 Controller().CommitText(String("66666"), empty_underlines, -7); |
| 1928 | 1907 |
| 1929 EXPECT_EQ(3u, GetDocument().Markers().Markers().size()); | 1908 EXPECT_EQ(3u, GetDocument().Markers().Markers().size()); |
| 1930 | 1909 |
| 1931 EXPECT_EQ(0u, GetDocument().Markers().Markers()[0]->StartOffset()); | 1910 EXPECT_EQ(0u, GetDocument().Markers().Markers()[0]->StartOffset()); |
| 1932 EXPECT_EQ(5u, GetDocument().Markers().Markers()[0]->EndOffset()); | 1911 EXPECT_EQ(5u, GetDocument().Markers().Markers()[0]->EndOffset()); |
| 1933 | 1912 |
| 1934 EXPECT_EQ(5u, GetDocument().Markers().Markers()[1]->StartOffset()); | 1913 EXPECT_EQ(5u, GetDocument().Markers().Markers()[1]->StartOffset()); |
| 1935 EXPECT_EQ(15u, GetDocument().Markers().Markers()[1]->EndOffset()); | 1914 EXPECT_EQ(15u, GetDocument().Markers().Markers()[1]->EndOffset()); |
| 1936 | 1915 |
| 1937 EXPECT_EQ(15u, GetDocument().Markers().Markers()[2]->StartOffset()); | 1916 EXPECT_EQ(15u, GetDocument().Markers().Markers()[2]->StartOffset()); |
| 1938 EXPECT_EQ(20u, GetDocument().Markers().Markers()[2]->EndOffset()); | 1917 EXPECT_EQ(20u, GetDocument().Markers().Markers()[2]->EndOffset()); |
| 1939 } | 1918 } |
| 1940 | 1919 |
| 1941 TEST_F(InputMethodControllerTest, Marker_InsertBetweenMarkers) { | 1920 TEST_F(InputMethodControllerTest, Marker_InsertBetweenMarkers) { |
| 1942 Element* div = InsertHTMLElement( | 1921 Element* div = InsertHTMLElement( |
| 1943 "<div id='sample' contenteditable>1111122222333334444455555</div>", | 1922 "<div id='sample' contenteditable>1111122222333334444455555</div>", |
| 1944 "sample"); | 1923 "sample"); |
| 1945 | 1924 |
| 1946 EphemeralRange marker_range = PlainTextRange(0, 5).CreateRange(*div); | 1925 EphemeralRange marker_range = PlainTextRange(0, 5).CreateRange(*div); |
| 1947 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1926 GetDocument().Markers().AddTextMatchMarker( |
| 1948 marker_range.EndPosition(), | 1927 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1949 DocumentMarker::kTextMatch); | |
| 1950 | 1928 |
| 1951 marker_range = PlainTextRange(5, 15).CreateRange(*div); | 1929 marker_range = PlainTextRange(5, 15).CreateRange(*div); |
| 1952 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1930 GetDocument().Markers().AddTextMatchMarker( |
| 1953 marker_range.EndPosition(), | 1931 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1954 DocumentMarker::kTextMatch); | |
| 1955 | 1932 |
| 1956 marker_range = PlainTextRange(15, 20).CreateRange(*div); | 1933 marker_range = PlainTextRange(15, 20).CreateRange(*div); |
| 1957 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1934 GetDocument().Markers().AddTextMatchMarker( |
| 1958 marker_range.EndPosition(), | 1935 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1959 DocumentMarker::kTextMatch); | |
| 1960 | 1936 |
| 1961 EXPECT_EQ(3u, GetDocument().Markers().Markers().size()); | 1937 EXPECT_EQ(3u, GetDocument().Markers().Markers().size()); |
| 1962 | 1938 |
| 1963 Vector<CompositionUnderline> empty_underlines; | 1939 Vector<CompositionUnderline> empty_underlines; |
| 1964 Controller().SetComposition("", empty_underlines, 5, 5); | 1940 Controller().SetComposition("", empty_underlines, 5, 5); |
| 1965 Controller().CommitText(String("77777"), empty_underlines, 0); | 1941 Controller().CommitText(String("77777"), empty_underlines, 0); |
| 1966 | 1942 |
| 1967 EXPECT_EQ(3u, GetDocument().Markers().Markers().size()); | 1943 EXPECT_EQ(3u, GetDocument().Markers().Markers().size()); |
| 1968 | 1944 |
| 1969 EXPECT_EQ(0u, GetDocument().Markers().Markers()[0]->StartOffset()); | 1945 EXPECT_EQ(0u, GetDocument().Markers().Markers()[0]->StartOffset()); |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 1984 // Set selection before BODY(editable). | 1960 // Set selection before BODY(editable). |
| 1985 GetFrame().Selection().SetSelection( | 1961 GetFrame().Selection().SetSelection( |
| 1986 SelectionInDOMTree::Builder() | 1962 SelectionInDOMTree::Builder() |
| 1987 .Collapse(Position(GetDocument().documentElement(), 0)) | 1963 .Collapse(Position(GetDocument().documentElement(), 0)) |
| 1988 .Build()); | 1964 .Build()); |
| 1989 | 1965 |
| 1990 EXPECT_EQ(kWebTextInputTypeContentEditable, Controller().TextInputType()); | 1966 EXPECT_EQ(kWebTextInputTypeContentEditable, Controller().TextInputType()); |
| 1991 } | 1967 } |
| 1992 | 1968 |
| 1993 } // namespace blink | 1969 } // namespace blink |
| OLD | NEW |