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 1504 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1515 } | 1515 } |
1516 | 1516 |
1517 TEST_F(InputMethodControllerTest, | 1517 TEST_F(InputMethodControllerTest, |
1518 Marker_WhitespaceFixupAroundMarkerNotContainingSpace) { | 1518 Marker_WhitespaceFixupAroundMarkerNotContainingSpace) { |
1519 Element* div = insertHTMLElement( | 1519 Element* div = insertHTMLElement( |
1520 "<div id='sample' contenteditable>Initial text blah</div>", "sample"); | 1520 "<div id='sample' contenteditable>Initial text blah</div>", "sample"); |
1521 | 1521 |
1522 // Add marker under "text" (use TextMatch since Composition markers don't | 1522 // Add marker under "text" (use TextMatch since Composition markers don't |
1523 // persist across editing operations) | 1523 // persist across editing operations) |
1524 EphemeralRange markerRange = PlainTextRange(8, 12).createRange(*div); | 1524 EphemeralRange markerRange = PlainTextRange(8, 12).createRange(*div); |
1525 document().markers().addMarker(markerRange.startPosition(), | 1525 document().markers().addTextMatchMarker(markerRange, false); |
1526 markerRange.endPosition(), | 1526 |
1527 DocumentMarker::TextMatch); | |
1528 // Delete "Initial" | 1527 // Delete "Initial" |
1529 Vector<CompositionUnderline> emptyUnderlines; | 1528 Vector<CompositionUnderline> emptyUnderlines; |
1530 controller().setCompositionFromExistingText(emptyUnderlines, 0, 7); | 1529 controller().setCompositionFromExistingText(emptyUnderlines, 0, 7); |
1531 controller().commitText(String(""), emptyUnderlines, 0); | 1530 controller().commitText(String(""), emptyUnderlines, 0); |
1532 | 1531 |
1533 // Delete "blah" | 1532 // Delete "blah" |
1534 controller().setCompositionFromExistingText(emptyUnderlines, 6, 10); | 1533 controller().setCompositionFromExistingText(emptyUnderlines, 6, 10); |
1535 controller().commitText(String(""), emptyUnderlines, 0); | 1534 controller().commitText(String(""), emptyUnderlines, 0); |
1536 | 1535 |
1537 // Check that the marker is still attached to "text" and doesn't include | 1536 // Check that the marker is still attached to "text" and doesn't include |
1538 // either space around it | 1537 // either space around it |
1539 EXPECT_EQ(1u, document().markers().markersFor(div->firstChild()).size()); | 1538 EXPECT_EQ(1u, document().markers().markersFor(div->firstChild()).size()); |
1540 EXPECT_STREQ( | 1539 EXPECT_STREQ( |
1541 "text", | 1540 "text", |
1542 getMarkedText(document().markers(), div->firstChild(), 0).utf8().data()); | 1541 getMarkedText(document().markers(), div->firstChild(), 0).utf8().data()); |
1543 } | 1542 } |
1544 | 1543 |
1545 TEST_F(InputMethodControllerTest, | 1544 TEST_F(InputMethodControllerTest, |
1546 Marker_WhitespaceFixupAroundMarkerBeginningWithSpace) { | 1545 Marker_WhitespaceFixupAroundMarkerBeginningWithSpace) { |
1547 Element* div = insertHTMLElement( | 1546 Element* div = insertHTMLElement( |
1548 "<div id='sample' contenteditable>Initial text blah</div>", "sample"); | 1547 "<div id='sample' contenteditable>Initial text blah</div>", "sample"); |
1549 | 1548 |
1550 // Add marker under " text" (use TextMatch since Composition markers don't | 1549 // Add marker under " text" (use TextMatch since Composition markers don't |
1551 // persist across editing operations) | 1550 // persist across editing operations) |
1552 EphemeralRange markerRange = PlainTextRange(7, 12).createRange(*div); | 1551 EphemeralRange markerRange = PlainTextRange(7, 12).createRange(*div); |
1553 document().markers().addMarker(markerRange.startPosition(), | 1552 document().markers().addTextMatchMarker(markerRange, false); |
1554 markerRange.endPosition(), | 1553 |
1555 DocumentMarker::TextMatch); | |
1556 // Delete "Initial" | 1554 // Delete "Initial" |
1557 Vector<CompositionUnderline> emptyUnderlines; | 1555 Vector<CompositionUnderline> emptyUnderlines; |
1558 controller().setCompositionFromExistingText(emptyUnderlines, 0, 7); | 1556 controller().setCompositionFromExistingText(emptyUnderlines, 0, 7); |
1559 controller().commitText(String(""), emptyUnderlines, 0); | 1557 controller().commitText(String(""), emptyUnderlines, 0); |
1560 | 1558 |
1561 // Delete "blah" | 1559 // Delete "blah" |
1562 controller().setCompositionFromExistingText(emptyUnderlines, 6, 10); | 1560 controller().setCompositionFromExistingText(emptyUnderlines, 6, 10); |
1563 controller().commitText(String(""), emptyUnderlines, 0); | 1561 controller().commitText(String(""), emptyUnderlines, 0); |
1564 | 1562 |
1565 // Check that the marker is still attached to " text" and includes the space | 1563 // Check that the marker is still attached to " text" and includes the space |
1566 // before "text" but not the space after | 1564 // before "text" but not the space after |
1567 EXPECT_EQ(1u, document().markers().markers().size()); | 1565 EXPECT_EQ(1u, document().markers().markers().size()); |
1568 ASSERT_STREQ( | 1566 ASSERT_STREQ( |
1569 "\xC2\xA0text", | 1567 "\xC2\xA0text", |
1570 getMarkedText(document().markers(), div->firstChild(), 0).utf8().data()); | 1568 getMarkedText(document().markers(), div->firstChild(), 0).utf8().data()); |
1571 } | 1569 } |
1572 | 1570 |
1573 TEST_F(InputMethodControllerTest, | 1571 TEST_F(InputMethodControllerTest, |
1574 Marker_WhitespaceFixupAroundMarkerEndingWithSpace) { | 1572 Marker_WhitespaceFixupAroundMarkerEndingWithSpace) { |
1575 Element* div = insertHTMLElement( | 1573 Element* div = insertHTMLElement( |
1576 "<div id='sample' contenteditable>Initial text blah</div>", "sample"); | 1574 "<div id='sample' contenteditable>Initial text blah</div>", "sample"); |
1577 | 1575 |
1578 // Add marker under "text " (use TextMatch since Composition markers don't | 1576 // Add marker under "text " (use TextMatch since Composition markers don't |
1579 // persist across editing operations) | 1577 // persist across editing operations) |
1580 EphemeralRange markerRange = PlainTextRange(8, 13).createRange(*div); | 1578 EphemeralRange markerRange = PlainTextRange(8, 13).createRange(*div); |
1581 document().markers().addMarker(markerRange.startPosition(), | 1579 document().markers().addTextMatchMarker(markerRange, false); |
1582 markerRange.endPosition(), | 1580 |
1583 DocumentMarker::TextMatch); | |
1584 // Delete "Initial" | 1581 // Delete "Initial" |
1585 Vector<CompositionUnderline> emptyUnderlines; | 1582 Vector<CompositionUnderline> emptyUnderlines; |
1586 controller().setCompositionFromExistingText(emptyUnderlines, 0, 7); | 1583 controller().setCompositionFromExistingText(emptyUnderlines, 0, 7); |
1587 controller().commitText(String(""), emptyUnderlines, 0); | 1584 controller().commitText(String(""), emptyUnderlines, 0); |
1588 | 1585 |
1589 // Delete "blah" | 1586 // Delete "blah" |
1590 controller().setCompositionFromExistingText(emptyUnderlines, 6, 10); | 1587 controller().setCompositionFromExistingText(emptyUnderlines, 6, 10); |
1591 controller().commitText(String(""), emptyUnderlines, 0); | 1588 controller().commitText(String(""), emptyUnderlines, 0); |
1592 | 1589 |
1593 // Check that the marker is still attached to "text " and includes the space | 1590 // Check that the marker is still attached to "text " and includes the space |
1594 // after "text" but not the space before | 1591 // after "text" but not the space before |
1595 EXPECT_EQ(1u, document().markers().markers().size()); | 1592 EXPECT_EQ(1u, document().markers().markers().size()); |
1596 ASSERT_STREQ( | 1593 ASSERT_STREQ( |
1597 "text\xC2\xA0", | 1594 "text\xC2\xA0", |
1598 getMarkedText(document().markers(), div->firstChild(), 0).utf8().data()); | 1595 getMarkedText(document().markers(), div->firstChild(), 0).utf8().data()); |
1599 } | 1596 } |
1600 | 1597 |
1601 TEST_F(InputMethodControllerTest, | 1598 TEST_F(InputMethodControllerTest, |
1602 Marker_WhitespaceFixupAroundMarkerBeginningAndEndingWithSpaces) { | 1599 Marker_WhitespaceFixupAroundMarkerBeginningAndEndingWithSpaces) { |
1603 Element* div = insertHTMLElement( | 1600 Element* div = insertHTMLElement( |
1604 "<div id='sample' contenteditable>Initial text blah</div>", "sample"); | 1601 "<div id='sample' contenteditable>Initial text blah</div>", "sample"); |
1605 | 1602 |
1606 // Add marker under " text " (use TextMatch since Composition markers don't | 1603 // Add marker under " text " (use TextMatch since Composition markers don't |
1607 // persist across editing operations) | 1604 // persist across editing operations) |
1608 EphemeralRange markerRange = PlainTextRange(7, 13).createRange(*div); | 1605 EphemeralRange markerRange = PlainTextRange(7, 13).createRange(*div); |
1609 document().markers().addMarker(markerRange.startPosition(), | 1606 document().markers().addTextMatchMarker(markerRange, false); |
1610 markerRange.endPosition(), | |
1611 DocumentMarker::TextMatch); | |
1612 | 1607 |
1613 // Delete "Initial" | 1608 // Delete "Initial" |
1614 Vector<CompositionUnderline> emptyUnderlines; | 1609 Vector<CompositionUnderline> emptyUnderlines; |
1615 controller().setCompositionFromExistingText(emptyUnderlines, 0, 7); | 1610 controller().setCompositionFromExistingText(emptyUnderlines, 0, 7); |
1616 controller().commitText(String(""), emptyUnderlines, 0); | 1611 controller().commitText(String(""), emptyUnderlines, 0); |
1617 | 1612 |
1618 // Delete "blah" | 1613 // Delete "blah" |
1619 controller().setCompositionFromExistingText(emptyUnderlines, 6, 10); | 1614 controller().setCompositionFromExistingText(emptyUnderlines, 6, 10); |
1620 controller().commitText(String(""), emptyUnderlines, 0); | 1615 controller().commitText(String(""), emptyUnderlines, 0); |
1621 | 1616 |
1622 // Check that the marker is still attached to " text " and includes both the | 1617 // Check that the marker is still attached to " text " and includes both the |
1623 // space before "text" and the space after | 1618 // space before "text" and the space after |
1624 EXPECT_EQ(1u, document().markers().markers().size()); | 1619 EXPECT_EQ(1u, document().markers().markers().size()); |
1625 ASSERT_STREQ( | 1620 ASSERT_STREQ( |
1626 "\xC2\xA0text\xC2\xA0", | 1621 "\xC2\xA0text\xC2\xA0", |
1627 getMarkedText(document().markers(), div->firstChild(), 0).utf8().data()); | 1622 getMarkedText(document().markers(), div->firstChild(), 0).utf8().data()); |
1628 } | 1623 } |
1629 | 1624 |
1630 TEST_F(InputMethodControllerTest, Marker_ReplaceStartOfMarker) { | 1625 TEST_F(InputMethodControllerTest, Marker_ReplaceStartOfMarker) { |
1631 Element* div = insertHTMLElement( | 1626 Element* div = insertHTMLElement( |
1632 "<div id='sample' contenteditable>Initial text</div>", "sample"); | 1627 "<div id='sample' contenteditable>Initial text</div>", "sample"); |
1633 | 1628 |
1634 // Add marker under "Initial text" | 1629 // Add marker under "Initial text" |
1635 EphemeralRange markerRange = PlainTextRange(0, 12).createRange(*div); | 1630 EphemeralRange markerRange = PlainTextRange(0, 12).createRange(*div); |
1636 document().markers().addMarker(markerRange.startPosition(), | 1631 document().markers().addTextMatchMarker(markerRange, false); |
1637 markerRange.endPosition(), | |
1638 DocumentMarker::TextMatch); | |
1639 | 1632 |
1640 // Replace "Initial" with "Original" | 1633 // Replace "Initial" with "Original" |
1641 Vector<CompositionUnderline> emptyUnderlines; | 1634 Vector<CompositionUnderline> emptyUnderlines; |
1642 controller().setCompositionFromExistingText(emptyUnderlines, 0, 7); | 1635 controller().setCompositionFromExistingText(emptyUnderlines, 0, 7); |
1643 controller().commitText(String("Original"), emptyUnderlines, 0); | 1636 controller().commitText(String("Original"), emptyUnderlines, 0); |
1644 | 1637 |
1645 // Verify marker is under "Original text" | 1638 // Verify marker is under "Original text" |
1646 EXPECT_EQ(1u, document().markers().markers().size()); | 1639 EXPECT_EQ(1u, document().markers().markers().size()); |
1647 ASSERT_STREQ( | 1640 ASSERT_STREQ( |
1648 "Original text", | 1641 "Original text", |
1649 getMarkedText(document().markers(), div->firstChild(), 0).utf8().data()); | 1642 getMarkedText(document().markers(), div->firstChild(), 0).utf8().data()); |
1650 } | 1643 } |
1651 | 1644 |
1652 TEST_F(InputMethodControllerTest, Marker_ReplaceTextContainsStartOfMarker) { | 1645 TEST_F(InputMethodControllerTest, Marker_ReplaceTextContainsStartOfMarker) { |
1653 Element* div = insertHTMLElement( | 1646 Element* div = insertHTMLElement( |
1654 "<div id='sample' contenteditable>This is some initial text</div>", | 1647 "<div id='sample' contenteditable>This is some initial text</div>", |
1655 "sample"); | 1648 "sample"); |
1656 | 1649 |
1657 // Add marker under "initial text" | 1650 // Add marker under "initial text" |
1658 EphemeralRange markerRange = PlainTextRange(13, 25).createRange(*div); | 1651 EphemeralRange markerRange = PlainTextRange(13, 25).createRange(*div); |
1659 document().markers().addMarker(markerRange.startPosition(), | 1652 document().markers().addTextMatchMarker(markerRange, false); |
1660 markerRange.endPosition(), | |
1661 DocumentMarker::TextMatch); | |
1662 | 1653 |
1663 // Replace "some initial" with "boring" | 1654 // Replace "some initial" with "boring" |
1664 Vector<CompositionUnderline> emptyUnderlines; | 1655 Vector<CompositionUnderline> emptyUnderlines; |
1665 controller().setCompositionFromExistingText(emptyUnderlines, 8, 20); | 1656 controller().setCompositionFromExistingText(emptyUnderlines, 8, 20); |
1666 controller().commitText(String("boring"), emptyUnderlines, 0); | 1657 controller().commitText(String("boring"), emptyUnderlines, 0); |
1667 | 1658 |
1668 // Verify marker is under " text" | 1659 // Verify marker is under " text" |
1669 EXPECT_EQ(1u, document().markers().markers().size()); | 1660 EXPECT_EQ(1u, document().markers().markers().size()); |
1670 EXPECT_STREQ( | 1661 EXPECT_STREQ( |
1671 " text", | 1662 " text", |
1672 getMarkedText(document().markers(), div->firstChild(), 0).utf8().data()); | 1663 getMarkedText(document().markers(), div->firstChild(), 0).utf8().data()); |
1673 } | 1664 } |
1674 | 1665 |
1675 TEST_F(InputMethodControllerTest, Marker_ReplaceEndOfMarker) { | 1666 TEST_F(InputMethodControllerTest, Marker_ReplaceEndOfMarker) { |
1676 Element* div = insertHTMLElement( | 1667 Element* div = insertHTMLElement( |
1677 "<div id='sample' contenteditable>Initial text</div>", "sample"); | 1668 "<div id='sample' contenteditable>Initial text</div>", "sample"); |
1678 | 1669 |
1679 // Add marker under "Initial text" | 1670 // Add marker under "Initial text" |
1680 EphemeralRange markerRange = PlainTextRange(0, 12).createRange(*div); | 1671 EphemeralRange markerRange = PlainTextRange(0, 12).createRange(*div); |
1681 document().markers().addMarker(markerRange.startPosition(), | 1672 document().markers().addTextMatchMarker(markerRange, false); |
1682 markerRange.endPosition(), | |
1683 DocumentMarker::TextMatch); | |
1684 | 1673 |
1685 // Replace "text" with "string" | 1674 // Replace "text" with "string" |
1686 Vector<CompositionUnderline> emptyUnderlines; | 1675 Vector<CompositionUnderline> emptyUnderlines; |
1687 controller().setCompositionFromExistingText(emptyUnderlines, 8, 12); | 1676 controller().setCompositionFromExistingText(emptyUnderlines, 8, 12); |
1688 controller().commitText(String("string"), emptyUnderlines, 0); | 1677 controller().commitText(String("string"), emptyUnderlines, 0); |
1689 | 1678 |
1690 // Verify marker is under "Initial string" | 1679 // Verify marker is under "Initial string" |
1691 EXPECT_EQ(1u, document().markers().markers().size()); | 1680 EXPECT_EQ(1u, document().markers().markers().size()); |
1692 ASSERT_STREQ( | 1681 ASSERT_STREQ( |
1693 "Initial string", | 1682 "Initial string", |
1694 getMarkedText(document().markers(), div->firstChild(), 0).utf8().data()); | 1683 getMarkedText(document().markers(), div->firstChild(), 0).utf8().data()); |
1695 } | 1684 } |
1696 | 1685 |
1697 TEST_F(InputMethodControllerTest, Marker_ReplaceTextContainsEndOfMarker) { | 1686 TEST_F(InputMethodControllerTest, Marker_ReplaceTextContainsEndOfMarker) { |
1698 Element* div = insertHTMLElement( | 1687 Element* div = insertHTMLElement( |
1699 "<div id='sample' contenteditable>This is some initial text</div>", | 1688 "<div id='sample' contenteditable>This is some initial text</div>", |
1700 "sample"); | 1689 "sample"); |
1701 | 1690 |
1702 // Add marker under "some initial" | 1691 // Add marker under "some initial" |
1703 EphemeralRange markerRange = PlainTextRange(8, 20).createRange(*div); | 1692 EphemeralRange markerRange = PlainTextRange(8, 20).createRange(*div); |
1704 document().markers().addMarker(markerRange.startPosition(), | 1693 document().markers().addTextMatchMarker(markerRange, false); |
1705 markerRange.endPosition(), | |
1706 DocumentMarker::TextMatch); | |
1707 | 1694 |
1708 // Replace "initial text" with "content" | 1695 // Replace "initial text" with "content" |
1709 Vector<CompositionUnderline> emptyUnderlines; | 1696 Vector<CompositionUnderline> emptyUnderlines; |
1710 controller().setCompositionFromExistingText(emptyUnderlines, 13, 25); | 1697 controller().setCompositionFromExistingText(emptyUnderlines, 13, 25); |
1711 controller().commitText(String("content"), emptyUnderlines, 0); | 1698 controller().commitText(String("content"), emptyUnderlines, 0); |
1712 | 1699 |
1713 EXPECT_STREQ("This is some content", div->innerHTML().utf8().data()); | 1700 EXPECT_STREQ("This is some content", div->innerHTML().utf8().data()); |
1714 | 1701 |
1715 // Verify marker is under "some " | 1702 // Verify marker is under "some " |
1716 EXPECT_EQ(1u, document().markers().markers().size()); | 1703 EXPECT_EQ(1u, document().markers().markers().size()); |
1717 EXPECT_STREQ( | 1704 EXPECT_STREQ( |
1718 "some ", | 1705 "some ", |
1719 getMarkedText(document().markers(), div->firstChild(), 0).utf8().data()); | 1706 getMarkedText(document().markers(), div->firstChild(), 0).utf8().data()); |
1720 } | 1707 } |
1721 | 1708 |
1722 TEST_F(InputMethodControllerTest, Marker_ReplaceEntireMarker) { | 1709 TEST_F(InputMethodControllerTest, Marker_ReplaceEntireMarker) { |
1723 Element* div = insertHTMLElement( | 1710 Element* div = insertHTMLElement( |
1724 "<div id='sample' contenteditable>Initial text</div>", "sample"); | 1711 "<div id='sample' contenteditable>Initial text</div>", "sample"); |
1725 | 1712 |
1726 // Add marker under "text" | 1713 // Add marker under "text" |
1727 EphemeralRange markerRange = PlainTextRange(8, 12).createRange(*div); | 1714 EphemeralRange markerRange = PlainTextRange(8, 12).createRange(*div); |
1728 document().markers().addMarker(markerRange.startPosition(), | 1715 document().markers().addTextMatchMarker(markerRange, false); |
1729 markerRange.endPosition(), | |
1730 DocumentMarker::TextMatch); | |
1731 | 1716 |
1732 // Replace "text" with "string" | 1717 // Replace "text" with "string" |
1733 Vector<CompositionUnderline> emptyUnderlines; | 1718 Vector<CompositionUnderline> emptyUnderlines; |
1734 controller().setCompositionFromExistingText(emptyUnderlines, 8, 12); | 1719 controller().setCompositionFromExistingText(emptyUnderlines, 8, 12); |
1735 controller().commitText(String("string"), emptyUnderlines, 0); | 1720 controller().commitText(String("string"), emptyUnderlines, 0); |
1736 | 1721 |
1737 // Verify marker is under "string" | 1722 // Verify marker is under "string" |
1738 EXPECT_EQ(1u, document().markers().markers().size()); | 1723 EXPECT_EQ(1u, document().markers().markers().size()); |
1739 ASSERT_STREQ( | 1724 ASSERT_STREQ( |
1740 "string", | 1725 "string", |
1741 getMarkedText(document().markers(), div->firstChild(), 0).utf8().data()); | 1726 getMarkedText(document().markers(), div->firstChild(), 0).utf8().data()); |
1742 } | 1727 } |
1743 | 1728 |
1744 TEST_F(InputMethodControllerTest, Marker_ReplaceTextWithMarkerAtBeginning) { | 1729 TEST_F(InputMethodControllerTest, Marker_ReplaceTextWithMarkerAtBeginning) { |
1745 Element* div = insertHTMLElement( | 1730 Element* div = insertHTMLElement( |
1746 "<div id='sample' contenteditable>Initial text</div>", "sample"); | 1731 "<div id='sample' contenteditable>Initial text</div>", "sample"); |
1747 | 1732 |
1748 // Add marker under "Initial" | 1733 // Add marker under "Initial" |
1749 EphemeralRange markerRange = PlainTextRange(0, 7).createRange(*div); | 1734 EphemeralRange markerRange = PlainTextRange(0, 7).createRange(*div); |
1750 document().markers().addMarker(markerRange.startPosition(), | 1735 document().markers().addTextMatchMarker(markerRange, false); |
1751 markerRange.endPosition(), | |
1752 DocumentMarker::TextMatch); | |
1753 | 1736 |
1754 EXPECT_EQ(1u, document().markers().markers().size()); | 1737 EXPECT_EQ(1u, document().markers().markers().size()); |
1755 | 1738 |
1756 // Replace "Initial text" with "New string" | 1739 // Replace "Initial text" with "New string" |
1757 Vector<CompositionUnderline> emptyUnderlines; | 1740 Vector<CompositionUnderline> emptyUnderlines; |
1758 controller().setCompositionFromExistingText(emptyUnderlines, 0, 12); | 1741 controller().setCompositionFromExistingText(emptyUnderlines, 0, 12); |
1759 controller().commitText(String("New string"), emptyUnderlines, 0); | 1742 controller().commitText(String("New string"), emptyUnderlines, 0); |
1760 | 1743 |
1761 // Verify marker was removed | 1744 // Verify marker was removed |
1762 EXPECT_EQ(0u, document().markers().markers().size()); | 1745 EXPECT_EQ(0u, document().markers().markers().size()); |
1763 } | 1746 } |
1764 | 1747 |
1765 TEST_F(InputMethodControllerTest, Marker_ReplaceTextWithMarkerAtEnd) { | 1748 TEST_F(InputMethodControllerTest, Marker_ReplaceTextWithMarkerAtEnd) { |
1766 Element* div = insertHTMLElement( | 1749 Element* div = insertHTMLElement( |
1767 "<div id='sample' contenteditable>Initial text</div>", "sample"); | 1750 "<div id='sample' contenteditable>Initial text</div>", "sample"); |
1768 | 1751 |
1769 // Add marker under "text" | 1752 // Add marker under "text" |
1770 EphemeralRange markerRange = PlainTextRange(8, 12).createRange(*div); | 1753 EphemeralRange markerRange = PlainTextRange(8, 12).createRange(*div); |
1771 document().markers().addMarker(markerRange.startPosition(), | 1754 document().markers().addTextMatchMarker(markerRange, false); |
1772 markerRange.endPosition(), | |
1773 DocumentMarker::TextMatch); | |
1774 | 1755 |
1775 EXPECT_EQ(1u, document().markers().markers().size()); | 1756 EXPECT_EQ(1u, document().markers().markers().size()); |
1776 | 1757 |
1777 // Replace "Initial text" with "New string" | 1758 // Replace "Initial text" with "New string" |
1778 Vector<CompositionUnderline> emptyUnderlines; | 1759 Vector<CompositionUnderline> emptyUnderlines; |
1779 controller().setCompositionFromExistingText(emptyUnderlines, 0, 12); | 1760 controller().setCompositionFromExistingText(emptyUnderlines, 0, 12); |
1780 controller().commitText(String("New string"), emptyUnderlines, 0); | 1761 controller().commitText(String("New string"), emptyUnderlines, 0); |
1781 | 1762 |
1782 // Verify marker was removed | 1763 // Verify marker was removed |
1783 EXPECT_EQ(0u, document().markers().markers().size()); | 1764 EXPECT_EQ(0u, document().markers().markers().size()); |
1784 } | 1765 } |
1785 | 1766 |
1786 TEST_F(InputMethodControllerTest, Marker_Deletions) { | 1767 TEST_F(InputMethodControllerTest, Marker_Deletions) { |
1787 Element* div = insertHTMLElement( | 1768 Element* div = insertHTMLElement( |
1788 "<div id='sample' contenteditable>1111122222333334444455555</div>", | 1769 "<div id='sample' contenteditable>1111122222333334444455555</div>", |
1789 "sample"); | 1770 "sample"); |
1790 | 1771 |
1791 EphemeralRange markerRange = PlainTextRange(0, 5).createRange(*div); | 1772 EphemeralRange markerRange = PlainTextRange(0, 5).createRange(*div); |
1792 document().markers().addMarker(markerRange.startPosition(), | 1773 document().markers().addTextMatchMarker(markerRange, false); |
1793 markerRange.endPosition(), | |
1794 DocumentMarker::TextMatch); | |
1795 | 1774 |
1796 markerRange = PlainTextRange(5, 10).createRange(*div); | 1775 markerRange = PlainTextRange(5, 10).createRange(*div); |
1797 document().markers().addMarker(markerRange.startPosition(), | 1776 document().markers().addTextMatchMarker(markerRange, false); |
1798 markerRange.endPosition(), | |
1799 DocumentMarker::TextMatch); | |
1800 | 1777 |
1801 markerRange = PlainTextRange(10, 15).createRange(*div); | 1778 markerRange = PlainTextRange(10, 15).createRange(*div); |
1802 document().markers().addMarker(markerRange.startPosition(), | 1779 document().markers().addTextMatchMarker(markerRange, false); |
1803 markerRange.endPosition(), | |
1804 DocumentMarker::TextMatch); | |
1805 | 1780 |
1806 markerRange = PlainTextRange(15, 20).createRange(*div); | 1781 markerRange = PlainTextRange(15, 20).createRange(*div); |
1807 document().markers().addMarker(markerRange.startPosition(), | 1782 document().markers().addTextMatchMarker(markerRange, false); |
1808 markerRange.endPosition(), | |
1809 DocumentMarker::TextMatch); | |
1810 | 1783 |
1811 markerRange = PlainTextRange(20, 25).createRange(*div); | 1784 markerRange = PlainTextRange(20, 25).createRange(*div); |
1812 document().markers().addMarker(markerRange.startPosition(), | 1785 document().markers().addTextMatchMarker(markerRange, false); |
1813 markerRange.endPosition(), | |
1814 DocumentMarker::TextMatch); | |
1815 | 1786 |
1816 EXPECT_EQ(5u, document().markers().markers().size()); | 1787 EXPECT_EQ(5u, document().markers().markers().size()); |
1817 | 1788 |
1818 // Delete third marker and portions of second and fourth | 1789 // Delete third marker and portions of second and fourth |
1819 Vector<CompositionUnderline> emptyUnderlines; | 1790 Vector<CompositionUnderline> emptyUnderlines; |
1820 controller().setCompositionFromExistingText(emptyUnderlines, 8, 17); | 1791 controller().setCompositionFromExistingText(emptyUnderlines, 8, 17); |
1821 controller().commitText(String(""), emptyUnderlines, 0); | 1792 controller().commitText(String(""), emptyUnderlines, 0); |
1822 | 1793 |
1823 // Verify markers were updated correctly | 1794 // Verify markers were updated correctly |
1824 EXPECT_EQ(4u, document().markers().markers().size()); | 1795 EXPECT_EQ(4u, document().markers().markers().size()); |
1825 | 1796 |
1826 EXPECT_EQ(0u, document().markers().markers()[0]->startOffset()); | 1797 EXPECT_EQ(0u, document().markers().markers()[0]->startOffset()); |
1827 EXPECT_EQ(5u, document().markers().markers()[0]->endOffset()); | 1798 EXPECT_EQ(5u, document().markers().markers()[0]->endOffset()); |
1828 | 1799 |
1829 EXPECT_EQ(5u, document().markers().markers()[1]->startOffset()); | 1800 EXPECT_EQ(5u, document().markers().markers()[1]->startOffset()); |
1830 EXPECT_EQ(8u, document().markers().markers()[1]->endOffset()); | 1801 EXPECT_EQ(8u, document().markers().markers()[1]->endOffset()); |
1831 | 1802 |
1832 EXPECT_EQ(8u, document().markers().markers()[2]->startOffset()); | 1803 EXPECT_EQ(8u, document().markers().markers()[2]->startOffset()); |
1833 EXPECT_EQ(11u, document().markers().markers()[2]->endOffset()); | 1804 EXPECT_EQ(11u, document().markers().markers()[2]->endOffset()); |
1834 | 1805 |
1835 EXPECT_EQ(11u, document().markers().markers()[3]->startOffset()); | 1806 EXPECT_EQ(11u, document().markers().markers()[3]->startOffset()); |
1836 EXPECT_EQ(16u, document().markers().markers()[3]->endOffset()); | 1807 EXPECT_EQ(16u, document().markers().markers()[3]->endOffset()); |
1837 | 1808 |
1838 document().markers().clear(); | 1809 document().markers().clear(); |
1839 | 1810 |
1840 markerRange = PlainTextRange(5, 10).createRange(*div); | 1811 markerRange = PlainTextRange(5, 10).createRange(*div); |
1841 document().markers().addMarker(markerRange.startPosition(), | 1812 document().markers().addTextMatchMarker(markerRange, false); |
1842 markerRange.endPosition(), | |
1843 DocumentMarker::TextMatch); | |
1844 | 1813 |
1845 // Delete exactly on a marker | 1814 // Delete exactly on a marker |
1846 controller().setCompositionFromExistingText(emptyUnderlines, 5, 10); | 1815 controller().setCompositionFromExistingText(emptyUnderlines, 5, 10); |
1847 controller().commitText(String(""), emptyUnderlines, 0); | 1816 controller().commitText(String(""), emptyUnderlines, 0); |
1848 EXPECT_EQ(0u, document().markers().markers().size()); | 1817 EXPECT_EQ(0u, document().markers().markers().size()); |
1849 | 1818 |
1850 markerRange = PlainTextRange(5, 10).createRange(*div); | 1819 markerRange = PlainTextRange(5, 10).createRange(*div); |
1851 document().markers().addMarker(markerRange.startPosition(), | 1820 document().markers().addTextMatchMarker(markerRange, false); |
1852 markerRange.endPosition(), | |
1853 DocumentMarker::TextMatch); | |
1854 | 1821 |
1855 // Delete middle of marker | 1822 // Delete middle of marker |
1856 controller().setCompositionFromExistingText(emptyUnderlines, 6, 9); | 1823 controller().setCompositionFromExistingText(emptyUnderlines, 6, 9); |
1857 controller().commitText(String(""), emptyUnderlines, 0); | 1824 controller().commitText(String(""), emptyUnderlines, 0); |
1858 | 1825 |
1859 EXPECT_EQ(2u, document().markers().markers().size()); | 1826 EXPECT_EQ(1u, document().markers().markers().size()); |
1860 | 1827 |
1861 EXPECT_EQ(5u, document().markers().markers()[0]->startOffset()); | 1828 EXPECT_EQ(5u, document().markers().markers()[0]->startOffset()); |
1862 EXPECT_EQ(6u, document().markers().markers()[0]->endOffset()); | 1829 EXPECT_EQ(7u, document().markers().markers()[0]->endOffset()); |
1863 | |
1864 EXPECT_EQ(6u, document().markers().markers()[1]->startOffset()); | |
1865 EXPECT_EQ(7u, document().markers().markers()[1]->endOffset()); | |
1866 } | 1830 } |
1867 | 1831 |
1868 TEST_F(InputMethodControllerTest, Marker_Insertions) { | 1832 TEST_F(InputMethodControllerTest, Marker_Insertions) { |
1869 Element* div = insertHTMLElement( | 1833 Element* div = insertHTMLElement( |
1870 "<div id='sample' contenteditable>1111122222333334444455555</div>", | 1834 "<div id='sample' contenteditable>1111122222333334444455555</div>", |
1871 "sample"); | 1835 "sample"); |
1872 | 1836 |
1873 EphemeralRange markerRange = PlainTextRange(0, 5).createRange(*div); | 1837 EphemeralRange markerRange = PlainTextRange(0, 5).createRange(*div); |
1874 document().markers().addMarker(markerRange.startPosition(), | 1838 document().markers().addTextMatchMarker(markerRange, false); |
1875 markerRange.endPosition(), | |
1876 DocumentMarker::TextMatch); | |
1877 | 1839 |
1878 markerRange = PlainTextRange(5, 10).createRange(*div); | 1840 markerRange = PlainTextRange(5, 10).createRange(*div); |
1879 document().markers().addMarker(markerRange.startPosition(), | 1841 document().markers().addTextMatchMarker(markerRange, false); |
1880 markerRange.endPosition(), | |
1881 DocumentMarker::TextMatch); | |
1882 | 1842 |
1883 markerRange = PlainTextRange(10, 15).createRange(*div); | 1843 markerRange = PlainTextRange(10, 15).createRange(*div); |
1884 document().markers().addMarker(markerRange.startPosition(), | 1844 document().markers().addTextMatchMarker(markerRange, false); |
1885 markerRange.endPosition(), | |
1886 DocumentMarker::TextMatch); | |
1887 | 1845 |
1888 // insert in middle of second marker | 1846 // insert in middle of second marker |
1889 Vector<CompositionUnderline> emptyUnderlines; | 1847 Vector<CompositionUnderline> emptyUnderlines; |
1890 controller().setComposition("", emptyUnderlines, 7, 7); | 1848 controller().setComposition("", emptyUnderlines, 7, 7); |
1891 controller().commitText(String("66666"), emptyUnderlines, -7); | 1849 controller().commitText(String("66666"), emptyUnderlines, -7); |
1892 | 1850 |
1893 EXPECT_EQ(3u, document().markers().markers().size()); | 1851 EXPECT_EQ(3u, document().markers().markers().size()); |
1894 | 1852 |
1895 EXPECT_EQ(0u, document().markers().markers()[0]->startOffset()); | 1853 EXPECT_EQ(0u, document().markers().markers()[0]->startOffset()); |
1896 EXPECT_EQ(5u, document().markers().markers()[0]->endOffset()); | 1854 EXPECT_EQ(5u, document().markers().markers()[0]->endOffset()); |
(...skipping 13 matching lines...) Expand all Loading... |
1910 EXPECT_EQ(5u, document().markers().markers()[0]->endOffset()); | 1868 EXPECT_EQ(5u, document().markers().markers()[0]->endOffset()); |
1911 | 1869 |
1912 EXPECT_EQ(10u, document().markers().markers()[1]->startOffset()); | 1870 EXPECT_EQ(10u, document().markers().markers()[1]->startOffset()); |
1913 EXPECT_EQ(20u, document().markers().markers()[1]->endOffset()); | 1871 EXPECT_EQ(20u, document().markers().markers()[1]->endOffset()); |
1914 | 1872 |
1915 EXPECT_EQ(20u, document().markers().markers()[2]->startOffset()); | 1873 EXPECT_EQ(20u, document().markers().markers()[2]->startOffset()); |
1916 EXPECT_EQ(25u, document().markers().markers()[2]->endOffset()); | 1874 EXPECT_EQ(25u, document().markers().markers()[2]->endOffset()); |
1917 } | 1875 } |
1918 | 1876 |
1919 } // namespace blink | 1877 } // namespace blink |
OLD | NEW |