Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(38)

Side by Side Diff: third_party/WebKit/Source/core/editing/InputMethodControllerTest.cpp

Issue 2723663002: Refactor DocumentMarkerController (Closed)
Patch Set: Rebase Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/editing/BUILD.gn ('k') | third_party/WebKit/Source/core/editing/markers/DocumentMarker.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698