| 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 1501 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1512 Vector<CompositionUnderline> empty_underlines; | 1512 Vector<CompositionUnderline> empty_underlines; |
| 1513 Controller().SetEditableSelectionOffsets(PlainTextRange(4, 8)); | 1513 Controller().SetEditableSelectionOffsets(PlainTextRange(4, 8)); |
| 1514 Controller().CommitText(String(""), empty_underlines, 0); | 1514 Controller().CommitText(String(""), empty_underlines, 0); |
| 1515 EXPECT_STREQ("Abc Ghi", input->value().Utf8().data()); | 1515 EXPECT_STREQ("Abc Ghi", input->value().Utf8().data()); |
| 1516 | 1516 |
| 1517 Controller().SetEditableSelectionOffsets(PlainTextRange(4, 7)); | 1517 Controller().SetEditableSelectionOffsets(PlainTextRange(4, 7)); |
| 1518 Controller().CommitText(String("1"), empty_underlines, 0); | 1518 Controller().CommitText(String("1"), empty_underlines, 0); |
| 1519 EXPECT_STREQ("Abc 1", input->value().Utf8().data()); | 1519 EXPECT_STREQ("Abc 1", input->value().Utf8().data()); |
| 1520 } | 1520 } |
| 1521 | 1521 |
| 1522 static String GetMarkedText( |
| 1523 DocumentMarkerController& document_marker_controller, |
| 1524 Node* node, |
| 1525 int marker_index) { |
| 1526 DocumentMarker* marker = document_marker_controller.Markers()[marker_index]; |
| 1527 return node->textContent().Substring( |
| 1528 marker->StartOffset(), marker->EndOffset() - marker->StartOffset()); |
| 1529 } |
| 1530 |
| 1531 TEST_F(InputMethodControllerTest, |
| 1532 Marker_WhitespaceFixupAroundContentIndependentMarkerNotContainingSpace) { |
| 1533 Element* div = InsertHTMLElement( |
| 1534 "<div id='sample' contenteditable>Initial text blah</div>", "sample"); |
| 1535 |
| 1536 // Add marker under "text" (use TextMatch since Composition markers don't |
| 1537 // persist across editing operations) |
| 1538 EphemeralRange marker_range = PlainTextRange(8, 12).CreateRange(*div); |
| 1539 GetDocument().Markers().AddActiveSuggestionMarker( |
| 1540 marker_range, Color::kBlack, StyleableMarker::Thickness::kThin, |
| 1541 Color::kBlack); |
| 1542 // Delete "Initial" |
| 1543 Vector<CompositionUnderline> empty_underlines; |
| 1544 Controller().SetCompositionFromExistingText(empty_underlines, 0, 7); |
| 1545 Controller().CommitText(String(""), empty_underlines, 0); |
| 1546 |
| 1547 // Delete "blah" |
| 1548 Controller().SetCompositionFromExistingText(empty_underlines, 6, 10); |
| 1549 Controller().CommitText(String(""), empty_underlines, 0); |
| 1550 |
| 1551 // Check that the marker is still attached to "text" and doesn't include |
| 1552 // either space around it |
| 1553 EXPECT_EQ(1u, GetDocument().Markers().MarkersFor(div->firstChild()).size()); |
| 1554 EXPECT_STREQ("text", |
| 1555 GetMarkedText(GetDocument().Markers(), div->firstChild(), 0) |
| 1556 .Utf8() |
| 1557 .data()); |
| 1558 } |
| 1559 |
| 1560 TEST_F(InputMethodControllerTest, |
| 1561 Marker_WhitespaceFixupAroundContentIndependentMarkerBeginningWithSpace) { |
| 1562 Element* div = InsertHTMLElement( |
| 1563 "<div id='sample' contenteditable>Initial text blah</div>", "sample"); |
| 1564 |
| 1565 // Add marker under " text" (use TextMatch since Composition markers don't |
| 1566 // persist across editing operations) |
| 1567 EphemeralRange marker_range = PlainTextRange(7, 12).CreateRange(*div); |
| 1568 GetDocument().Markers().AddActiveSuggestionMarker( |
| 1569 marker_range, Color::kBlack, StyleableMarker::Thickness::kThin, |
| 1570 Color::kBlack); |
| 1571 // Delete "Initial" |
| 1572 Vector<CompositionUnderline> empty_underlines; |
| 1573 Controller().SetCompositionFromExistingText(empty_underlines, 0, 7); |
| 1574 Controller().CommitText(String(""), empty_underlines, 0); |
| 1575 |
| 1576 // Delete "blah" |
| 1577 Controller().SetCompositionFromExistingText(empty_underlines, 6, 10); |
| 1578 Controller().CommitText(String(""), empty_underlines, 0); |
| 1579 |
| 1580 // Check that the marker is still attached to " text" and includes the space |
| 1581 // before "text" but not the space after |
| 1582 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); |
| 1583 ASSERT_STREQ("\xC2\xA0text", |
| 1584 GetMarkedText(GetDocument().Markers(), div->firstChild(), 0) |
| 1585 .Utf8() |
| 1586 .data()); |
| 1587 } |
| 1588 |
| 1589 TEST_F(InputMethodControllerTest, |
| 1590 Marker_WhitespaceFixupAroundContentIndependentMarkerEndingWithSpace) { |
| 1591 Element* div = InsertHTMLElement( |
| 1592 "<div id='sample' contenteditable>Initial text blah</div>", "sample"); |
| 1593 |
| 1594 // Add marker under "text " (use TextMatch since Composition markers don't |
| 1595 // persist across editing operations) |
| 1596 EphemeralRange marker_range = PlainTextRange(8, 13).CreateRange(*div); |
| 1597 GetDocument().Markers().AddActiveSuggestionMarker( |
| 1598 marker_range, Color::kBlack, StyleableMarker::Thickness::kThin, |
| 1599 Color::kBlack); |
| 1600 // Delete "Initial" |
| 1601 Vector<CompositionUnderline> empty_underlines; |
| 1602 Controller().SetCompositionFromExistingText(empty_underlines, 0, 7); |
| 1603 Controller().CommitText(String(""), empty_underlines, 0); |
| 1604 |
| 1605 // Delete "blah" |
| 1606 Controller().SetCompositionFromExistingText(empty_underlines, 6, 10); |
| 1607 Controller().CommitText(String(""), empty_underlines, 0); |
| 1608 |
| 1609 // Check that the marker is still attached to "text " and includes the space |
| 1610 // after "text" but not the space before |
| 1611 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); |
| 1612 ASSERT_STREQ("text\xC2\xA0", |
| 1613 GetMarkedText(GetDocument().Markers(), div->firstChild(), 0) |
| 1614 .Utf8() |
| 1615 .data()); |
| 1616 } |
| 1617 |
| 1618 TEST_F( |
| 1619 InputMethodControllerTest, |
| 1620 Marker_WhitespaceFixupAroundContentIndependentMarkerBeginningAndEndingWithSp
aces) { |
| 1621 Element* div = InsertHTMLElement( |
| 1622 "<div id='sample' contenteditable>Initial text blah</div>", "sample"); |
| 1623 |
| 1624 // Add marker under " text " (use TextMatch since Composition markers don't |
| 1625 // persist across editing operations) |
| 1626 EphemeralRange marker_range = PlainTextRange(7, 13).CreateRange(*div); |
| 1627 GetDocument().Markers().AddActiveSuggestionMarker( |
| 1628 marker_range, Color::kBlack, StyleableMarker::Thickness::kThin, |
| 1629 Color::kBlack); |
| 1630 |
| 1631 // Delete "Initial" |
| 1632 Vector<CompositionUnderline> empty_underlines; |
| 1633 Controller().SetCompositionFromExistingText(empty_underlines, 0, 7); |
| 1634 Controller().CommitText(String(""), empty_underlines, 0); |
| 1635 |
| 1636 // Delete "blah" |
| 1637 Controller().SetCompositionFromExistingText(empty_underlines, 6, 10); |
| 1638 Controller().CommitText(String(""), empty_underlines, 0); |
| 1639 |
| 1640 // Check that the marker is still attached to " text " and includes both the |
| 1641 // space before "text" and the space after |
| 1642 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); |
| 1643 ASSERT_STREQ("\xC2\xA0text\xC2\xA0", |
| 1644 GetMarkedText(GetDocument().Markers(), div->firstChild(), 0) |
| 1645 .Utf8() |
| 1646 .data()); |
| 1647 } |
| 1648 |
| 1522 TEST_F(InputMethodControllerTest, ContentDependentMarker_ReplaceStartOfMarker) { | 1649 TEST_F(InputMethodControllerTest, ContentDependentMarker_ReplaceStartOfMarker) { |
| 1523 Element* div = InsertHTMLElement( | 1650 Element* div = InsertHTMLElement( |
| 1524 "<div id='sample' contenteditable>Initial text</div>", "sample"); | 1651 "<div id='sample' contenteditable>Initial text</div>", "sample"); |
| 1525 | 1652 |
| 1526 // Add marker under "Initial text" | 1653 // Add marker under "Initial text" |
| 1527 EphemeralRange marker_range = PlainTextRange(0, 12).CreateRange(*div); | 1654 EphemeralRange marker_range = PlainTextRange(0, 12).CreateRange(*div); |
| 1528 GetDocument().Markers().AddTextMatchMarker( | 1655 GetDocument().Markers().AddTextMatchMarker( |
| 1529 marker_range, TextMatchMarker::MatchStatus::kInactive); | 1656 marker_range, TextMatchMarker::MatchStatus::kInactive); |
| 1530 | 1657 |
| 1531 // Replace "Initial" with "Original" | 1658 // Replace "Initial" with "Original" |
| 1532 Vector<CompositionUnderline> empty_underlines; | 1659 Vector<CompositionUnderline> empty_underlines; |
| 1533 Controller().SetCompositionFromExistingText(empty_underlines, 0, 7); | 1660 Controller().SetCompositionFromExistingText(empty_underlines, 0, 7); |
| 1534 Controller().CommitText(String("Original"), empty_underlines, 0); | 1661 Controller().CommitText(String("Original"), empty_underlines, 0); |
| 1535 | 1662 |
| 1536 // Verify marker was removed | 1663 // Verify marker was removed |
| 1537 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); | 1664 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); |
| 1538 } | 1665 } |
| 1539 | 1666 |
| 1540 TEST_F(InputMethodControllerTest, | 1667 TEST_F(InputMethodControllerTest, |
| 1668 ContentIndependentMarker_ReplaceStartOfMarker) { |
| 1669 Element* div = InsertHTMLElement( |
| 1670 "<div id='sample' contenteditable>Initial text</div>", "sample"); |
| 1671 |
| 1672 // Add marker under "Initial text" |
| 1673 EphemeralRange marker_range = PlainTextRange(0, 12).CreateRange(*div); |
| 1674 GetDocument().Markers().AddActiveSuggestionMarker( |
| 1675 marker_range, Color::kBlack, StyleableMarker::Thickness::kThin, |
| 1676 Color::kBlack); |
| 1677 |
| 1678 // Replace "Initial" with "Original" |
| 1679 Vector<CompositionUnderline> empty_underlines; |
| 1680 Controller().SetCompositionFromExistingText(empty_underlines, 0, 7); |
| 1681 Controller().CommitText(String("Original"), empty_underlines, 0); |
| 1682 |
| 1683 // Verify marker is under "Original text" |
| 1684 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); |
| 1685 ASSERT_STREQ("Original text", |
| 1686 GetMarkedText(GetDocument().Markers(), div->firstChild(), 0) |
| 1687 .Utf8() |
| 1688 .data()); |
| 1689 } |
| 1690 |
| 1691 TEST_F(InputMethodControllerTest, |
| 1541 ContentDependentMarker_ReplaceTextContainsStartOfMarker) { | 1692 ContentDependentMarker_ReplaceTextContainsStartOfMarker) { |
| 1542 Element* div = InsertHTMLElement( | 1693 Element* div = InsertHTMLElement( |
| 1543 "<div id='sample' contenteditable>This is some initial text</div>", | 1694 "<div id='sample' contenteditable>This is some initial text</div>", |
| 1544 "sample"); | 1695 "sample"); |
| 1545 | 1696 |
| 1546 // Add marker under "initial text" | 1697 // Add marker under "initial text" |
| 1547 EphemeralRange marker_range = PlainTextRange(13, 25).CreateRange(*div); | 1698 EphemeralRange marker_range = PlainTextRange(13, 25).CreateRange(*div); |
| 1548 GetDocument().Markers().AddTextMatchMarker( | 1699 GetDocument().Markers().AddTextMatchMarker( |
| 1549 marker_range, TextMatchMarker::MatchStatus::kInactive); | 1700 marker_range, TextMatchMarker::MatchStatus::kInactive); |
| 1550 | 1701 |
| 1551 // Replace "some initial" with "boring" | 1702 // Replace "some initial" with "boring" |
| 1552 Vector<CompositionUnderline> empty_underlines; | 1703 Vector<CompositionUnderline> empty_underlines; |
| 1553 Controller().SetCompositionFromExistingText(empty_underlines, 8, 20); | 1704 Controller().SetCompositionFromExistingText(empty_underlines, 8, 20); |
| 1554 Controller().CommitText(String("boring"), empty_underlines, 0); | 1705 Controller().CommitText(String("boring"), empty_underlines, 0); |
| 1555 | 1706 |
| 1556 // Verify marker was removed | 1707 // Verify marker was removed |
| 1557 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); | 1708 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); |
| 1558 } | 1709 } |
| 1559 | 1710 |
| 1711 TEST_F(InputMethodControllerTest, |
| 1712 ContentIndependentMarker_ReplaceTextContainsStartOfMarker) { |
| 1713 Element* div = InsertHTMLElement( |
| 1714 "<div id='sample' contenteditable>This is some initial text</div>", |
| 1715 "sample"); |
| 1716 |
| 1717 // Add marker under "initial text" |
| 1718 EphemeralRange marker_range = PlainTextRange(13, 25).CreateRange(*div); |
| 1719 GetDocument().Markers().AddActiveSuggestionMarker( |
| 1720 marker_range, Color::kBlack, StyleableMarker::Thickness::kThin, |
| 1721 Color::kBlack); |
| 1722 |
| 1723 // Replace "some initial" with "boring" |
| 1724 Vector<CompositionUnderline> empty_underlines; |
| 1725 Controller().SetCompositionFromExistingText(empty_underlines, 8, 20); |
| 1726 Controller().CommitText(String("boring"), empty_underlines, 0); |
| 1727 |
| 1728 // Verify marker is under " text" |
| 1729 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); |
| 1730 EXPECT_STREQ(" text", |
| 1731 GetMarkedText(GetDocument().Markers(), div->firstChild(), 0) |
| 1732 .Utf8() |
| 1733 .data()); |
| 1734 } |
| 1735 |
| 1560 TEST_F(InputMethodControllerTest, ContentDependentMarker_ReplaceEndOfMarker) { | 1736 TEST_F(InputMethodControllerTest, ContentDependentMarker_ReplaceEndOfMarker) { |
| 1561 Element* div = InsertHTMLElement( | 1737 Element* div = InsertHTMLElement( |
| 1562 "<div id='sample' contenteditable>Initial text</div>", "sample"); | 1738 "<div id='sample' contenteditable>Initial text</div>", "sample"); |
| 1563 | 1739 |
| 1564 // Add marker under "Initial text" | 1740 // Add marker under "Initial text" |
| 1565 EphemeralRange marker_range = PlainTextRange(0, 12).CreateRange(*div); | 1741 EphemeralRange marker_range = PlainTextRange(0, 12).CreateRange(*div); |
| 1566 GetDocument().Markers().AddTextMatchMarker( | 1742 GetDocument().Markers().AddTextMatchMarker( |
| 1567 marker_range, TextMatchMarker::MatchStatus::kInactive); | 1743 marker_range, TextMatchMarker::MatchStatus::kInactive); |
| 1568 | 1744 |
| 1569 // Replace "text" with "string" | 1745 // Replace "text" with "string" |
| 1570 Vector<CompositionUnderline> empty_underlines; | 1746 Vector<CompositionUnderline> empty_underlines; |
| 1571 Controller().SetCompositionFromExistingText(empty_underlines, 8, 12); | 1747 Controller().SetCompositionFromExistingText(empty_underlines, 8, 12); |
| 1572 Controller().CommitText(String("string"), empty_underlines, 0); | 1748 Controller().CommitText(String("string"), empty_underlines, 0); |
| 1573 | 1749 |
| 1574 // Verify marker was removed | 1750 // Verify marker was removed |
| 1575 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); | 1751 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); |
| 1576 } | 1752 } |
| 1577 | 1753 |
| 1754 TEST_F(InputMethodControllerTest, ContentIndependentMarker_ReplaceEndOfMarker) { |
| 1755 Element* div = InsertHTMLElement( |
| 1756 "<div id='sample' contenteditable>Initial text</div>", "sample"); |
| 1757 |
| 1758 // Add marker under "Initial text" |
| 1759 EphemeralRange marker_range = PlainTextRange(0, 12).CreateRange(*div); |
| 1760 GetDocument().Markers().AddActiveSuggestionMarker( |
| 1761 marker_range, Color::kBlack, StyleableMarker::Thickness::kThin, |
| 1762 Color::kBlack); |
| 1763 |
| 1764 // Replace "text" with "string" |
| 1765 Vector<CompositionUnderline> empty_underlines; |
| 1766 Controller().SetCompositionFromExistingText(empty_underlines, 8, 12); |
| 1767 Controller().CommitText(String("string"), empty_underlines, 0); |
| 1768 |
| 1769 // Verify marker is under "Initial string" |
| 1770 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); |
| 1771 ASSERT_STREQ("Initial string", |
| 1772 GetMarkedText(GetDocument().Markers(), div->firstChild(), 0) |
| 1773 .Utf8() |
| 1774 .data()); |
| 1775 } |
| 1776 |
| 1578 TEST_F(InputMethodControllerTest, | 1777 TEST_F(InputMethodControllerTest, |
| 1579 ContentDependentMarker_ReplaceTextContainsEndOfMarker) { | 1778 ContentDependentMarker_ReplaceTextContainsEndOfMarker) { |
| 1580 Element* div = InsertHTMLElement( | 1779 Element* div = InsertHTMLElement( |
| 1581 "<div id='sample' contenteditable>This is some initial text</div>", | 1780 "<div id='sample' contenteditable>This is some initial text</div>", |
| 1582 "sample"); | 1781 "sample"); |
| 1583 | 1782 |
| 1584 // Add marker under "some initial" | 1783 // Add marker under "some initial" |
| 1585 EphemeralRange marker_range = PlainTextRange(8, 20).CreateRange(*div); | 1784 EphemeralRange marker_range = PlainTextRange(8, 20).CreateRange(*div); |
| 1586 GetDocument().Markers().AddTextMatchMarker( | 1785 GetDocument().Markers().AddTextMatchMarker( |
| 1587 marker_range, TextMatchMarker::MatchStatus::kInactive); | 1786 marker_range, TextMatchMarker::MatchStatus::kInactive); |
| 1588 | 1787 |
| 1589 // Replace "initial text" with "content" | 1788 // Replace "initial text" with "content" |
| 1590 Vector<CompositionUnderline> empty_underlines; | 1789 Vector<CompositionUnderline> empty_underlines; |
| 1591 Controller().SetCompositionFromExistingText(empty_underlines, 13, 25); | 1790 Controller().SetCompositionFromExistingText(empty_underlines, 13, 25); |
| 1592 Controller().CommitText(String("content"), empty_underlines, 0); | 1791 Controller().CommitText(String("content"), empty_underlines, 0); |
| 1593 | 1792 |
| 1594 EXPECT_STREQ("This is some content", div->innerHTML().Utf8().data()); | 1793 EXPECT_STREQ("This is some content", div->innerHTML().Utf8().data()); |
| 1595 | 1794 |
| 1596 // Verify marker was removed | 1795 // Verify marker was removed |
| 1597 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); | 1796 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); |
| 1598 } | 1797 } |
| 1599 | 1798 |
| 1799 TEST_F(InputMethodControllerTest, |
| 1800 ContentIndependentMarker_ReplaceTextContainsEndOfMarker) { |
| 1801 Element* div = InsertHTMLElement( |
| 1802 "<div id='sample' contenteditable>This is some initial text</div>", |
| 1803 "sample"); |
| 1804 |
| 1805 // Add marker under "some initial" |
| 1806 EphemeralRange marker_range = PlainTextRange(8, 20).CreateRange(*div); |
| 1807 GetDocument().Markers().AddActiveSuggestionMarker( |
| 1808 marker_range, Color::kBlack, StyleableMarker::Thickness::kThin, |
| 1809 Color::kBlack); |
| 1810 |
| 1811 // Replace "initial text" with "content" |
| 1812 Vector<CompositionUnderline> empty_underlines; |
| 1813 Controller().SetCompositionFromExistingText(empty_underlines, 13, 25); |
| 1814 Controller().CommitText(String("content"), empty_underlines, 0); |
| 1815 |
| 1816 EXPECT_STREQ("This is some content", div->innerHTML().Utf8().data()); |
| 1817 |
| 1818 // Verify marker is under "some " |
| 1819 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); |
| 1820 ASSERT_STREQ("some ", |
| 1821 GetMarkedText(GetDocument().Markers(), div->firstChild(), 0) |
| 1822 .Utf8() |
| 1823 .data()); |
| 1824 } |
| 1825 |
| 1600 TEST_F(InputMethodControllerTest, ContentDependentMarker_ReplaceEntireMarker) { | 1826 TEST_F(InputMethodControllerTest, ContentDependentMarker_ReplaceEntireMarker) { |
| 1601 Element* div = InsertHTMLElement( | 1827 Element* div = InsertHTMLElement( |
| 1602 "<div id='sample' contenteditable>Initial text</div>", "sample"); | 1828 "<div id='sample' contenteditable>Initial text</div>", "sample"); |
| 1603 | 1829 |
| 1604 // Add marker under "text" | 1830 // Add marker under "text" |
| 1605 EphemeralRange marker_range = PlainTextRange(8, 12).CreateRange(*div); | 1831 EphemeralRange marker_range = PlainTextRange(8, 12).CreateRange(*div); |
| 1606 GetDocument().Markers().AddTextMatchMarker( | 1832 GetDocument().Markers().AddTextMatchMarker( |
| 1607 marker_range, TextMatchMarker::MatchStatus::kInactive); | 1833 marker_range, TextMatchMarker::MatchStatus::kInactive); |
| 1608 | 1834 |
| 1609 // Replace "text" with "string" | 1835 // Replace "text" with "string" |
| 1610 Vector<CompositionUnderline> empty_underlines; | 1836 Vector<CompositionUnderline> empty_underlines; |
| 1611 Controller().SetCompositionFromExistingText(empty_underlines, 8, 12); | 1837 Controller().SetCompositionFromExistingText(empty_underlines, 8, 12); |
| 1612 Controller().CommitText(String("string"), empty_underlines, 0); | 1838 Controller().CommitText(String("string"), empty_underlines, 0); |
| 1613 | 1839 |
| 1614 // Verify marker was removed | 1840 // Verify marker was removed |
| 1615 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); | 1841 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); |
| 1616 } | 1842 } |
| 1617 | 1843 |
| 1618 TEST_F(InputMethodControllerTest, | 1844 TEST_F(InputMethodControllerTest, |
| 1845 ContentIndependentMarker_ReplaceEntireMarker) { |
| 1846 Element* div = InsertHTMLElement( |
| 1847 "<div id='sample' contenteditable>Initial text</div>", "sample"); |
| 1848 |
| 1849 // Add marker under "text" |
| 1850 EphemeralRange marker_range = PlainTextRange(8, 12).CreateRange(*div); |
| 1851 GetDocument().Markers().AddActiveSuggestionMarker( |
| 1852 marker_range, Color::kBlack, StyleableMarker::Thickness::kThin, |
| 1853 Color::kBlack); |
| 1854 |
| 1855 // Replace "text" with "string" |
| 1856 Vector<CompositionUnderline> empty_underlines; |
| 1857 Controller().SetCompositionFromExistingText(empty_underlines, 8, 12); |
| 1858 Controller().CommitText(String("string"), empty_underlines, 0); |
| 1859 |
| 1860 // Verify marker is under "string" |
| 1861 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); |
| 1862 ASSERT_STREQ("string", |
| 1863 GetMarkedText(GetDocument().Markers(), div->firstChild(), 0) |
| 1864 .Utf8() |
| 1865 .data()); |
| 1866 } |
| 1867 |
| 1868 TEST_F(InputMethodControllerTest, |
| 1619 ContentDependentMarker_ReplaceTextWithMarkerAtBeginning) { | 1869 ContentDependentMarker_ReplaceTextWithMarkerAtBeginning) { |
| 1620 Element* div = InsertHTMLElement( | 1870 Element* div = InsertHTMLElement( |
| 1621 "<div id='sample' contenteditable>Initial text</div>", "sample"); | 1871 "<div id='sample' contenteditable>Initial text</div>", "sample"); |
| 1622 | 1872 |
| 1623 // Add marker under "Initial" | 1873 // Add marker under "Initial" |
| 1624 EphemeralRange marker_range = PlainTextRange(0, 7).CreateRange(*div); | 1874 EphemeralRange marker_range = PlainTextRange(0, 7).CreateRange(*div); |
| 1625 GetDocument().Markers().AddTextMatchMarker( | 1875 GetDocument().Markers().AddTextMatchMarker( |
| 1626 marker_range, TextMatchMarker::MatchStatus::kInactive); | 1876 marker_range, TextMatchMarker::MatchStatus::kInactive); |
| 1627 | 1877 |
| 1628 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); | 1878 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); |
| 1629 | 1879 |
| 1630 // Replace "Initial text" with "New string" | 1880 // Replace "Initial text" with "New string" |
| 1631 Vector<CompositionUnderline> empty_underlines; | 1881 Vector<CompositionUnderline> empty_underlines; |
| 1632 Controller().SetCompositionFromExistingText(empty_underlines, 0, 12); | 1882 Controller().SetCompositionFromExistingText(empty_underlines, 0, 12); |
| 1633 Controller().CommitText(String("New string"), empty_underlines, 0); | 1883 Controller().CommitText(String("New string"), empty_underlines, 0); |
| 1634 | 1884 |
| 1635 // Verify marker was removed | 1885 // Verify marker was removed |
| 1636 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); | 1886 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); |
| 1637 } | 1887 } |
| 1638 | 1888 |
| 1639 TEST_F(InputMethodControllerTest, | 1889 TEST_F(InputMethodControllerTest, |
| 1890 ContentIndependentMarker_ReplaceTextWithMarkerAtBeginning) { |
| 1891 Element* div = InsertHTMLElement( |
| 1892 "<div id='sample' contenteditable>Initial text</div>", "sample"); |
| 1893 |
| 1894 // Add marker under "Initial" |
| 1895 EphemeralRange marker_range = PlainTextRange(0, 7).CreateRange(*div); |
| 1896 GetDocument().Markers().AddActiveSuggestionMarker( |
| 1897 marker_range, Color::kBlack, StyleableMarker::Thickness::kThin, |
| 1898 Color::kBlack); |
| 1899 |
| 1900 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); |
| 1901 |
| 1902 // Replace "Initial text" with "New string" |
| 1903 Vector<CompositionUnderline> empty_underlines; |
| 1904 Controller().SetCompositionFromExistingText(empty_underlines, 0, 12); |
| 1905 Controller().CommitText(String("New string"), empty_underlines, 0); |
| 1906 |
| 1907 // Verify marker was removed |
| 1908 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); |
| 1909 } |
| 1910 |
| 1911 TEST_F(InputMethodControllerTest, |
| 1640 ContentDependentMarker_ReplaceTextWithMarkerAtEnd) { | 1912 ContentDependentMarker_ReplaceTextWithMarkerAtEnd) { |
| 1641 Element* div = InsertHTMLElement( | 1913 Element* div = InsertHTMLElement( |
| 1642 "<div id='sample' contenteditable>Initial text</div>", "sample"); | 1914 "<div id='sample' contenteditable>Initial text</div>", "sample"); |
| 1643 | 1915 |
| 1644 // Add marker under "text" | 1916 // Add marker under "text" |
| 1645 EphemeralRange marker_range = PlainTextRange(8, 12).CreateRange(*div); | 1917 EphemeralRange marker_range = PlainTextRange(8, 12).CreateRange(*div); |
| 1646 GetDocument().Markers().AddTextMatchMarker( | 1918 GetDocument().Markers().AddTextMatchMarker( |
| 1647 marker_range, TextMatchMarker::MatchStatus::kInactive); | 1919 marker_range, TextMatchMarker::MatchStatus::kInactive); |
| 1648 | 1920 |
| 1649 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); | 1921 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); |
| 1650 | 1922 |
| 1651 // Replace "Initial text" with "New string" | 1923 // Replace "Initial text" with "New string" |
| 1652 Vector<CompositionUnderline> empty_underlines; | 1924 Vector<CompositionUnderline> empty_underlines; |
| 1653 Controller().SetCompositionFromExistingText(empty_underlines, 0, 12); | 1925 Controller().SetCompositionFromExistingText(empty_underlines, 0, 12); |
| 1654 Controller().CommitText(String("New string"), empty_underlines, 0); | 1926 Controller().CommitText(String("New string"), empty_underlines, 0); |
| 1655 | 1927 |
| 1656 // Verify marker was removed | 1928 // Verify marker was removed |
| 1657 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); | 1929 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); |
| 1658 } | 1930 } |
| 1659 | 1931 |
| 1932 TEST_F(InputMethodControllerTest, |
| 1933 ContentIndependentMarker_ReplaceTextWithMarkerAtEnd) { |
| 1934 Element* div = InsertHTMLElement( |
| 1935 "<div id='sample' contenteditable>Initial text</div>", "sample"); |
| 1936 |
| 1937 // Add marker under "text" |
| 1938 EphemeralRange marker_range = PlainTextRange(8, 12).CreateRange(*div); |
| 1939 GetDocument().Markers().AddActiveSuggestionMarker( |
| 1940 marker_range, Color::kBlack, StyleableMarker::Thickness::kThin, |
| 1941 Color::kBlack); |
| 1942 |
| 1943 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); |
| 1944 |
| 1945 // Replace "Initial text" with "New string" |
| 1946 Vector<CompositionUnderline> empty_underlines; |
| 1947 Controller().SetCompositionFromExistingText(empty_underlines, 0, 12); |
| 1948 Controller().CommitText(String("New string"), empty_underlines, 0); |
| 1949 |
| 1950 // Verify marker was removed |
| 1951 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); |
| 1952 } |
| 1953 |
| 1660 TEST_F(InputMethodControllerTest, ContentDependentMarker_Deletions) { | 1954 TEST_F(InputMethodControllerTest, ContentDependentMarker_Deletions) { |
| 1661 Element* div = InsertHTMLElement( | 1955 Element* div = InsertHTMLElement( |
| 1662 "<div id='sample' contenteditable>1111122222333334444455555</div>", | 1956 "<div id='sample' contenteditable>1111122222333334444455555</div>", |
| 1663 "sample"); | 1957 "sample"); |
| 1664 | 1958 |
| 1665 EphemeralRange marker_range = PlainTextRange(0, 5).CreateRange(*div); | 1959 EphemeralRange marker_range = PlainTextRange(0, 5).CreateRange(*div); |
| 1666 GetDocument().Markers().AddTextMatchMarker( | 1960 GetDocument().Markers().AddTextMatchMarker( |
| 1667 marker_range, TextMatchMarker::MatchStatus::kInactive); | 1961 marker_range, TextMatchMarker::MatchStatus::kInactive); |
| 1668 | 1962 |
| 1669 marker_range = PlainTextRange(5, 10).CreateRange(*div); | 1963 marker_range = PlainTextRange(5, 10).CreateRange(*div); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1692 // Verify markers were updated correctly | 1986 // Verify markers were updated correctly |
| 1693 EXPECT_EQ(2u, GetDocument().Markers().Markers().size()); | 1987 EXPECT_EQ(2u, GetDocument().Markers().Markers().size()); |
| 1694 | 1988 |
| 1695 EXPECT_EQ(0u, GetDocument().Markers().Markers()[0]->StartOffset()); | 1989 EXPECT_EQ(0u, GetDocument().Markers().Markers()[0]->StartOffset()); |
| 1696 EXPECT_EQ(5u, GetDocument().Markers().Markers()[0]->EndOffset()); | 1990 EXPECT_EQ(5u, GetDocument().Markers().Markers()[0]->EndOffset()); |
| 1697 | 1991 |
| 1698 EXPECT_EQ(11u, GetDocument().Markers().Markers()[1]->StartOffset()); | 1992 EXPECT_EQ(11u, GetDocument().Markers().Markers()[1]->StartOffset()); |
| 1699 EXPECT_EQ(16u, GetDocument().Markers().Markers()[1]->EndOffset()); | 1993 EXPECT_EQ(16u, GetDocument().Markers().Markers()[1]->EndOffset()); |
| 1700 } | 1994 } |
| 1701 | 1995 |
| 1996 TEST_F(InputMethodControllerTest, ContentIndependentMarker_Deletions) { |
| 1997 Element* div = InsertHTMLElement( |
| 1998 "<div id='sample' contenteditable>1111122222333334444455555</div>", |
| 1999 "sample"); |
| 2000 |
| 2001 EphemeralRange marker_range = PlainTextRange(0, 5).CreateRange(*div); |
| 2002 GetDocument().Markers().AddActiveSuggestionMarker( |
| 2003 marker_range, Color::kBlack, StyleableMarker::Thickness::kThin, |
| 2004 Color::kBlack); |
| 2005 |
| 2006 marker_range = PlainTextRange(5, 10).CreateRange(*div); |
| 2007 GetDocument().Markers().AddActiveSuggestionMarker( |
| 2008 marker_range, Color::kBlack, StyleableMarker::Thickness::kThin, |
| 2009 Color::kBlack); |
| 2010 |
| 2011 marker_range = PlainTextRange(10, 15).CreateRange(*div); |
| 2012 GetDocument().Markers().AddActiveSuggestionMarker( |
| 2013 marker_range, Color::kBlack, StyleableMarker::Thickness::kThin, |
| 2014 Color::kBlack); |
| 2015 |
| 2016 marker_range = PlainTextRange(15, 20).CreateRange(*div); |
| 2017 GetDocument().Markers().AddActiveSuggestionMarker( |
| 2018 marker_range, Color::kBlack, StyleableMarker::Thickness::kThin, |
| 2019 Color::kBlack); |
| 2020 |
| 2021 marker_range = PlainTextRange(20, 25).CreateRange(*div); |
| 2022 GetDocument().Markers().AddActiveSuggestionMarker( |
| 2023 marker_range, Color::kBlack, StyleableMarker::Thickness::kThin, |
| 2024 Color::kBlack); |
| 2025 |
| 2026 EXPECT_EQ(5u, GetDocument().Markers().Markers().size()); |
| 2027 |
| 2028 // Delete third marker and portions of second and fourth |
| 2029 Vector<CompositionUnderline> empty_underlines; |
| 2030 Controller().SetCompositionFromExistingText(empty_underlines, 8, 17); |
| 2031 Controller().CommitText(String(""), empty_underlines, 0); |
| 2032 |
| 2033 // Verify markers were updated correctly |
| 2034 EXPECT_EQ(4u, GetDocument().Markers().Markers().size()); |
| 2035 |
| 2036 EXPECT_EQ(0u, GetDocument().Markers().Markers()[0]->StartOffset()); |
| 2037 EXPECT_EQ(5u, GetDocument().Markers().Markers()[0]->EndOffset()); |
| 2038 |
| 2039 EXPECT_EQ(5u, GetDocument().Markers().Markers()[1]->StartOffset()); |
| 2040 EXPECT_EQ(8u, GetDocument().Markers().Markers()[1]->EndOffset()); |
| 2041 |
| 2042 EXPECT_EQ(8u, GetDocument().Markers().Markers()[2]->StartOffset()); |
| 2043 EXPECT_EQ(11u, GetDocument().Markers().Markers()[2]->EndOffset()); |
| 2044 |
| 2045 EXPECT_EQ(11u, GetDocument().Markers().Markers()[3]->StartOffset()); |
| 2046 EXPECT_EQ(16u, GetDocument().Markers().Markers()[3]->EndOffset()); |
| 2047 } |
| 2048 |
| 1702 TEST_F(InputMethodControllerTest, | 2049 TEST_F(InputMethodControllerTest, |
| 1703 ContentDependentMarker_DeleteExactlyOnMarker) { | 2050 ContentDependentMarker_DeleteExactlyOnMarker) { |
| 1704 Element* div = InsertHTMLElement( | 2051 Element* div = InsertHTMLElement( |
| 1705 "<div id='sample' contenteditable>1111122222333334444455555</div>", | 2052 "<div id='sample' contenteditable>1111122222333334444455555</div>", |
| 1706 "sample"); | 2053 "sample"); |
| 1707 | 2054 |
| 1708 EphemeralRange marker_range = PlainTextRange(5, 10).CreateRange(*div); | 2055 EphemeralRange marker_range = PlainTextRange(5, 10).CreateRange(*div); |
| 1709 GetDocument().Markers().AddTextMatchMarker( | 2056 GetDocument().Markers().AddTextMatchMarker( |
| 1710 marker_range, TextMatchMarker::MatchStatus::kInactive); | 2057 marker_range, TextMatchMarker::MatchStatus::kInactive); |
| 1711 | 2058 |
| 1712 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); | 2059 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); |
| 1713 | 2060 |
| 1714 // Delete exactly on the marker | 2061 // Delete exactly on the marker |
| 1715 Vector<CompositionUnderline> empty_underlines; | 2062 Vector<CompositionUnderline> empty_underlines; |
| 1716 Controller().SetCompositionFromExistingText(empty_underlines, 5, 10); | 2063 Controller().SetCompositionFromExistingText(empty_underlines, 5, 10); |
| 1717 Controller().CommitText(String(""), empty_underlines, 0); | 2064 Controller().CommitText(String(""), empty_underlines, 0); |
| 1718 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); | 2065 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); |
| 1719 } | 2066 } |
| 1720 | 2067 |
| 2068 TEST_F(InputMethodControllerTest, |
| 2069 ContentIndependentMarker_DeleteExactlyOnMarker) { |
| 2070 Element* div = InsertHTMLElement( |
| 2071 "<div id='sample' contenteditable>1111122222333334444455555</div>", |
| 2072 "sample"); |
| 2073 |
| 2074 EphemeralRange marker_range = PlainTextRange(5, 10).CreateRange(*div); |
| 2075 GetDocument().Markers().AddActiveSuggestionMarker( |
| 2076 marker_range, Color::kBlack, StyleableMarker::Thickness::kThin, |
| 2077 Color::kBlack); |
| 2078 |
| 2079 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); |
| 2080 |
| 2081 // Delete exactly on the marker |
| 2082 Vector<CompositionUnderline> empty_underlines; |
| 2083 Controller().SetCompositionFromExistingText(empty_underlines, 5, 10); |
| 2084 Controller().CommitText(String(""), empty_underlines, 0); |
| 2085 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); |
| 2086 } |
| 2087 |
| 1721 TEST_F(InputMethodControllerTest, ContentDependentMarker_DeleteMiddleOfMarker) { | 2088 TEST_F(InputMethodControllerTest, ContentDependentMarker_DeleteMiddleOfMarker) { |
| 1722 Element* div = InsertHTMLElement( | 2089 Element* div = InsertHTMLElement( |
| 1723 "<div id='sample' contenteditable>1111122222333334444455555</div>", | 2090 "<div id='sample' contenteditable>1111122222333334444455555</div>", |
| 1724 "sample"); | 2091 "sample"); |
| 1725 | 2092 |
| 1726 EphemeralRange marker_range = PlainTextRange(5, 10).CreateRange(*div); | 2093 EphemeralRange marker_range = PlainTextRange(5, 10).CreateRange(*div); |
| 1727 GetDocument().Markers().AddTextMatchMarker( | 2094 GetDocument().Markers().AddTextMatchMarker( |
| 1728 marker_range, TextMatchMarker::MatchStatus::kInactive); | 2095 marker_range, TextMatchMarker::MatchStatus::kInactive); |
| 1729 | 2096 |
| 1730 // Delete middle of marker | 2097 // Delete middle of marker |
| 1731 Vector<CompositionUnderline> empty_underlines; | 2098 Vector<CompositionUnderline> empty_underlines; |
| 1732 Controller().SetCompositionFromExistingText(empty_underlines, 6, 9); | 2099 Controller().SetCompositionFromExistingText(empty_underlines, 6, 9); |
| 1733 Controller().CommitText(String(""), empty_underlines, 0); | 2100 Controller().CommitText(String(""), empty_underlines, 0); |
| 1734 | 2101 |
| 1735 // Verify marker was removed | 2102 // Verify marker was removed |
| 1736 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); | 2103 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); |
| 1737 } | 2104 } |
| 1738 | 2105 |
| 1739 TEST_F(InputMethodControllerTest, | 2106 TEST_F(InputMethodControllerTest, |
| 2107 ContentIndependentMarker_DeleteMiddleOfMarker) { |
| 2108 Element* div = InsertHTMLElement( |
| 2109 "<div id='sample' contenteditable>1111122222333334444455555</div>", |
| 2110 "sample"); |
| 2111 |
| 2112 EphemeralRange marker_range = PlainTextRange(5, 10).CreateRange(*div); |
| 2113 GetDocument().Markers().AddActiveSuggestionMarker( |
| 2114 marker_range, Color::kBlack, StyleableMarker::Thickness::kThin, |
| 2115 Color::kBlack); |
| 2116 |
| 2117 // Delete middle of marker |
| 2118 Vector<CompositionUnderline> empty_underlines; |
| 2119 Controller().SetCompositionFromExistingText(empty_underlines, 6, 9); |
| 2120 Controller().CommitText(String(""), empty_underlines, 0); |
| 2121 |
| 2122 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); |
| 2123 |
| 2124 EXPECT_EQ(5u, GetDocument().Markers().Markers()[0]->StartOffset()); |
| 2125 EXPECT_EQ(7u, GetDocument().Markers().Markers()[0]->EndOffset()); |
| 2126 } |
| 2127 |
| 2128 TEST_F(InputMethodControllerTest, |
| 1740 ContentDependentMarker_InsertInMarkerInterior) { | 2129 ContentDependentMarker_InsertInMarkerInterior) { |
| 1741 Element* div = InsertHTMLElement( | 2130 Element* div = InsertHTMLElement( |
| 1742 "<div id='sample' contenteditable>1111122222333334444455555</div>", | 2131 "<div id='sample' contenteditable>1111122222333334444455555</div>", |
| 1743 "sample"); | 2132 "sample"); |
| 1744 | 2133 |
| 1745 EphemeralRange marker_range = PlainTextRange(0, 5).CreateRange(*div); | 2134 EphemeralRange marker_range = PlainTextRange(0, 5).CreateRange(*div); |
| 1746 GetDocument().Markers().AddTextMatchMarker( | 2135 GetDocument().Markers().AddTextMatchMarker( |
| 1747 marker_range, TextMatchMarker::MatchStatus::kInactive); | 2136 marker_range, TextMatchMarker::MatchStatus::kInactive); |
| 1748 | 2137 |
| 1749 marker_range = PlainTextRange(5, 10).CreateRange(*div); | 2138 marker_range = PlainTextRange(5, 10).CreateRange(*div); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1763 | 2152 |
| 1764 EXPECT_EQ(2u, GetDocument().Markers().Markers().size()); | 2153 EXPECT_EQ(2u, GetDocument().Markers().Markers().size()); |
| 1765 | 2154 |
| 1766 EXPECT_EQ(0u, GetDocument().Markers().Markers()[0]->StartOffset()); | 2155 EXPECT_EQ(0u, GetDocument().Markers().Markers()[0]->StartOffset()); |
| 1767 EXPECT_EQ(5u, GetDocument().Markers().Markers()[0]->EndOffset()); | 2156 EXPECT_EQ(5u, GetDocument().Markers().Markers()[0]->EndOffset()); |
| 1768 | 2157 |
| 1769 EXPECT_EQ(15u, GetDocument().Markers().Markers()[1]->StartOffset()); | 2158 EXPECT_EQ(15u, GetDocument().Markers().Markers()[1]->StartOffset()); |
| 1770 EXPECT_EQ(20u, GetDocument().Markers().Markers()[1]->EndOffset()); | 2159 EXPECT_EQ(20u, GetDocument().Markers().Markers()[1]->EndOffset()); |
| 1771 } | 2160 } |
| 1772 | 2161 |
| 2162 TEST_F(InputMethodControllerTest, |
| 2163 ContentIndependentMarker_InsertInMarkerInterior) { |
| 2164 Element* div = InsertHTMLElement( |
| 2165 "<div id='sample' contenteditable>1111122222333334444455555</div>", |
| 2166 "sample"); |
| 2167 |
| 2168 EphemeralRange marker_range = PlainTextRange(0, 5).CreateRange(*div); |
| 2169 GetDocument().Markers().AddActiveSuggestionMarker( |
| 2170 marker_range, Color::kBlack, StyleableMarker::Thickness::kThin, |
| 2171 Color::kBlack); |
| 2172 |
| 2173 marker_range = PlainTextRange(5, 10).CreateRange(*div); |
| 2174 GetDocument().Markers().AddActiveSuggestionMarker( |
| 2175 marker_range, Color::kBlack, StyleableMarker::Thickness::kThin, |
| 2176 Color::kBlack); |
| 2177 |
| 2178 marker_range = PlainTextRange(10, 15).CreateRange(*div); |
| 2179 GetDocument().Markers().AddActiveSuggestionMarker( |
| 2180 marker_range, Color::kBlack, StyleableMarker::Thickness::kThin, |
| 2181 Color::kBlack); |
| 2182 |
| 2183 EXPECT_EQ(3u, GetDocument().Markers().Markers().size()); |
| 2184 |
| 2185 // insert in middle of second marker |
| 2186 Vector<CompositionUnderline> empty_underlines; |
| 2187 Controller().SetComposition("", empty_underlines, 7, 7); |
| 2188 Controller().CommitText(String("66666"), empty_underlines, -7); |
| 2189 |
| 2190 EXPECT_EQ(3u, GetDocument().Markers().Markers().size()); |
| 2191 |
| 2192 EXPECT_EQ(0u, GetDocument().Markers().Markers()[0]->StartOffset()); |
| 2193 EXPECT_EQ(5u, GetDocument().Markers().Markers()[0]->EndOffset()); |
| 2194 |
| 2195 EXPECT_EQ(5u, GetDocument().Markers().Markers()[1]->StartOffset()); |
| 2196 EXPECT_EQ(15u, GetDocument().Markers().Markers()[1]->EndOffset()); |
| 2197 |
| 2198 EXPECT_EQ(15u, GetDocument().Markers().Markers()[2]->StartOffset()); |
| 2199 EXPECT_EQ(20u, GetDocument().Markers().Markers()[2]->EndOffset()); |
| 2200 } |
| 2201 |
| 1773 TEST_F(InputMethodControllerTest, ContentDependentMarker_InsertBetweenMarkers) { | 2202 TEST_F(InputMethodControllerTest, ContentDependentMarker_InsertBetweenMarkers) { |
| 1774 Element* div = InsertHTMLElement( | 2203 Element* div = InsertHTMLElement( |
| 1775 "<div id='sample' contenteditable>1111122222333334444455555</div>", | 2204 "<div id='sample' contenteditable>1111122222333334444455555</div>", |
| 1776 "sample"); | 2205 "sample"); |
| 1777 | 2206 |
| 1778 EphemeralRange marker_range = PlainTextRange(0, 5).CreateRange(*div); | 2207 EphemeralRange marker_range = PlainTextRange(0, 5).CreateRange(*div); |
| 1779 GetDocument().Markers().AddTextMatchMarker( | 2208 GetDocument().Markers().AddTextMatchMarker( |
| 1780 marker_range, TextMatchMarker::MatchStatus::kInactive); | 2209 marker_range, TextMatchMarker::MatchStatus::kInactive); |
| 1781 | 2210 |
| 1782 marker_range = PlainTextRange(5, 15).CreateRange(*div); | 2211 marker_range = PlainTextRange(5, 15).CreateRange(*div); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1798 EXPECT_EQ(0u, GetDocument().Markers().Markers()[0]->StartOffset()); | 2227 EXPECT_EQ(0u, GetDocument().Markers().Markers()[0]->StartOffset()); |
| 1799 EXPECT_EQ(5u, GetDocument().Markers().Markers()[0]->EndOffset()); | 2228 EXPECT_EQ(5u, GetDocument().Markers().Markers()[0]->EndOffset()); |
| 1800 | 2229 |
| 1801 EXPECT_EQ(10u, GetDocument().Markers().Markers()[1]->StartOffset()); | 2230 EXPECT_EQ(10u, GetDocument().Markers().Markers()[1]->StartOffset()); |
| 1802 EXPECT_EQ(20u, GetDocument().Markers().Markers()[1]->EndOffset()); | 2231 EXPECT_EQ(20u, GetDocument().Markers().Markers()[1]->EndOffset()); |
| 1803 | 2232 |
| 1804 EXPECT_EQ(20u, GetDocument().Markers().Markers()[2]->StartOffset()); | 2233 EXPECT_EQ(20u, GetDocument().Markers().Markers()[2]->StartOffset()); |
| 1805 EXPECT_EQ(25u, GetDocument().Markers().Markers()[2]->EndOffset()); | 2234 EXPECT_EQ(25u, GetDocument().Markers().Markers()[2]->EndOffset()); |
| 1806 } | 2235 } |
| 1807 | 2236 |
| 2237 TEST_F(InputMethodControllerTest, |
| 2238 ContentIndependentMarker_InsertBetweenMarkers) { |
| 2239 Element* div = InsertHTMLElement( |
| 2240 "<div id='sample' contenteditable>1111122222333334444455555</div>", |
| 2241 "sample"); |
| 2242 |
| 2243 EphemeralRange marker_range = PlainTextRange(0, 5).CreateRange(*div); |
| 2244 GetDocument().Markers().AddActiveSuggestionMarker( |
| 2245 marker_range, Color::kBlack, StyleableMarker::Thickness::kThin, |
| 2246 Color::kBlack); |
| 2247 |
| 2248 marker_range = PlainTextRange(5, 15).CreateRange(*div); |
| 2249 GetDocument().Markers().AddActiveSuggestionMarker( |
| 2250 marker_range, Color::kBlack, StyleableMarker::Thickness::kThin, |
| 2251 Color::kBlack); |
| 2252 |
| 2253 marker_range = PlainTextRange(15, 20).CreateRange(*div); |
| 2254 GetDocument().Markers().AddActiveSuggestionMarker( |
| 2255 marker_range, Color::kBlack, StyleableMarker::Thickness::kThin, |
| 2256 Color::kBlack); |
| 2257 |
| 2258 EXPECT_EQ(3u, GetDocument().Markers().Markers().size()); |
| 2259 |
| 2260 Vector<CompositionUnderline> empty_underlines; |
| 2261 Controller().SetComposition("", empty_underlines, 5, 5); |
| 2262 Controller().CommitText(String("77777"), empty_underlines, 0); |
| 2263 |
| 2264 EXPECT_EQ(3u, GetDocument().Markers().Markers().size()); |
| 2265 |
| 2266 EXPECT_EQ(0u, GetDocument().Markers().Markers()[0]->StartOffset()); |
| 2267 EXPECT_EQ(5u, GetDocument().Markers().Markers()[0]->EndOffset()); |
| 2268 |
| 2269 EXPECT_EQ(10u, GetDocument().Markers().Markers()[1]->StartOffset()); |
| 2270 EXPECT_EQ(20u, GetDocument().Markers().Markers()[1]->EndOffset()); |
| 2271 |
| 2272 EXPECT_EQ(20u, GetDocument().Markers().Markers()[2]->StartOffset()); |
| 2273 EXPECT_EQ(25u, GetDocument().Markers().Markers()[2]->EndOffset()); |
| 2274 } |
| 2275 |
| 1808 // For http://crbug.com/712761 | 2276 // For http://crbug.com/712761 |
| 1809 TEST_F(InputMethodControllerTest, TextInputTypeAtBeforeEditable) { | 2277 TEST_F(InputMethodControllerTest, TextInputTypeAtBeforeEditable) { |
| 1810 GetDocument().body()->setContentEditable("true", ASSERT_NO_EXCEPTION); | 2278 GetDocument().body()->setContentEditable("true", ASSERT_NO_EXCEPTION); |
| 1811 GetDocument().body()->focus(); | 2279 GetDocument().body()->focus(); |
| 1812 | 2280 |
| 1813 // Set selection before BODY(editable). | 2281 // Set selection before BODY(editable). |
| 1814 GetFrame().Selection().SetSelection( | 2282 GetFrame().Selection().SetSelection( |
| 1815 SelectionInDOMTree::Builder() | 2283 SelectionInDOMTree::Builder() |
| 1816 .Collapse(Position(GetDocument().documentElement(), 0)) | 2284 .Collapse(Position(GetDocument().documentElement(), 0)) |
| 1817 .Build()); | 2285 .Build()); |
| 1818 | 2286 |
| 1819 EXPECT_EQ(kWebTextInputTypeContentEditable, Controller().TextInputType()); | 2287 EXPECT_EQ(kWebTextInputTypeContentEditable, Controller().TextInputType()); |
| 1820 } | 2288 } |
| 1821 | 2289 |
| 1822 } // namespace blink | 2290 } // namespace blink |
| OLD | NEW |