| 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 1507 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 TEST_F(InputMethodControllerTest, ContentDependentMarker_ReplaceStartOfMarker) { | 1522 TEST_F(InputMethodControllerTest, ContentDependentMarker_ReplaceStartOfMarker) { |
| 1523 Element* div = InsertHTMLElement( | 1523 Element* div = InsertHTMLElement( |
| 1524 "<div id='sample' contenteditable>Initial text</div>", "sample"); | 1524 "<div id='sample' contenteditable>Initial text</div>", "sample"); |
| 1525 | 1525 |
| 1526 // Add marker under "Initial text" | 1526 // Add marker under "Initial text" |
| 1527 EphemeralRange marker_range = PlainTextRange(0, 12).CreateRange(*div); | 1527 EphemeralRange marker_range = PlainTextRange(0, 12).CreateRange(*div); |
| 1528 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1528 GetDocument().Markers().AddTextMatchMarker( |
| 1529 marker_range.EndPosition(), | 1529 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1530 DocumentMarker::kTextMatch); | |
| 1531 | 1530 |
| 1532 // Replace "Initial" with "Original" | 1531 // Replace "Initial" with "Original" |
| 1533 Vector<CompositionUnderline> empty_underlines; | 1532 Vector<CompositionUnderline> empty_underlines; |
| 1534 Controller().SetCompositionFromExistingText(empty_underlines, 0, 7); | 1533 Controller().SetCompositionFromExistingText(empty_underlines, 0, 7); |
| 1535 Controller().CommitText(String("Original"), empty_underlines, 0); | 1534 Controller().CommitText(String("Original"), empty_underlines, 0); |
| 1536 | 1535 |
| 1537 // Verify marker was removed | 1536 // Verify marker was removed |
| 1538 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); | 1537 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); |
| 1539 } | 1538 } |
| 1540 | 1539 |
| 1541 TEST_F(InputMethodControllerTest, | 1540 TEST_F(InputMethodControllerTest, |
| 1542 ContentDependentMarker_ReplaceTextContainsStartOfMarker) { | 1541 ContentDependentMarker_ReplaceTextContainsStartOfMarker) { |
| 1543 Element* div = InsertHTMLElement( | 1542 Element* div = InsertHTMLElement( |
| 1544 "<div id='sample' contenteditable>This is some initial text</div>", | 1543 "<div id='sample' contenteditable>This is some initial text</div>", |
| 1545 "sample"); | 1544 "sample"); |
| 1546 | 1545 |
| 1547 // Add marker under "initial text" | 1546 // Add marker under "initial text" |
| 1548 EphemeralRange marker_range = PlainTextRange(13, 25).CreateRange(*div); | 1547 EphemeralRange marker_range = PlainTextRange(13, 25).CreateRange(*div); |
| 1549 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1548 GetDocument().Markers().AddTextMatchMarker( |
| 1550 marker_range.EndPosition(), | 1549 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1551 DocumentMarker::kTextMatch); | |
| 1552 | 1550 |
| 1553 // Replace "some initial" with "boring" | 1551 // Replace "some initial" with "boring" |
| 1554 Vector<CompositionUnderline> empty_underlines; | 1552 Vector<CompositionUnderline> empty_underlines; |
| 1555 Controller().SetCompositionFromExistingText(empty_underlines, 8, 20); | 1553 Controller().SetCompositionFromExistingText(empty_underlines, 8, 20); |
| 1556 Controller().CommitText(String("boring"), empty_underlines, 0); | 1554 Controller().CommitText(String("boring"), empty_underlines, 0); |
| 1557 | 1555 |
| 1558 // Verify marker was removed | 1556 // Verify marker was removed |
| 1559 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); | 1557 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); |
| 1560 } | 1558 } |
| 1561 | 1559 |
| 1562 TEST_F(InputMethodControllerTest, ContentDependentMarker_ReplaceEndOfMarker) { | 1560 TEST_F(InputMethodControllerTest, ContentDependentMarker_ReplaceEndOfMarker) { |
| 1563 Element* div = InsertHTMLElement( | 1561 Element* div = InsertHTMLElement( |
| 1564 "<div id='sample' contenteditable>Initial text</div>", "sample"); | 1562 "<div id='sample' contenteditable>Initial text</div>", "sample"); |
| 1565 | 1563 |
| 1566 // Add marker under "Initial text" | 1564 // Add marker under "Initial text" |
| 1567 EphemeralRange marker_range = PlainTextRange(0, 12).CreateRange(*div); | 1565 EphemeralRange marker_range = PlainTextRange(0, 12).CreateRange(*div); |
| 1568 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1566 GetDocument().Markers().AddTextMatchMarker( |
| 1569 marker_range.EndPosition(), | 1567 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1570 DocumentMarker::kTextMatch); | |
| 1571 | 1568 |
| 1572 // Replace "text" with "string" | 1569 // Replace "text" with "string" |
| 1573 Vector<CompositionUnderline> empty_underlines; | 1570 Vector<CompositionUnderline> empty_underlines; |
| 1574 Controller().SetCompositionFromExistingText(empty_underlines, 8, 12); | 1571 Controller().SetCompositionFromExistingText(empty_underlines, 8, 12); |
| 1575 Controller().CommitText(String("string"), empty_underlines, 0); | 1572 Controller().CommitText(String("string"), empty_underlines, 0); |
| 1576 | 1573 |
| 1577 // Verify marker was removed | 1574 // Verify marker was removed |
| 1578 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); | 1575 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); |
| 1579 } | 1576 } |
| 1580 | 1577 |
| 1581 TEST_F(InputMethodControllerTest, | 1578 TEST_F(InputMethodControllerTest, |
| 1582 ContentDependentMarker_ReplaceTextContainsEndOfMarker) { | 1579 ContentDependentMarker_ReplaceTextContainsEndOfMarker) { |
| 1583 Element* div = InsertHTMLElement( | 1580 Element* div = InsertHTMLElement( |
| 1584 "<div id='sample' contenteditable>This is some initial text</div>", | 1581 "<div id='sample' contenteditable>This is some initial text</div>", |
| 1585 "sample"); | 1582 "sample"); |
| 1586 | 1583 |
| 1587 // Add marker under "some initial" | 1584 // Add marker under "some initial" |
| 1588 EphemeralRange marker_range = PlainTextRange(8, 20).CreateRange(*div); | 1585 EphemeralRange marker_range = PlainTextRange(8, 20).CreateRange(*div); |
| 1589 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1586 GetDocument().Markers().AddTextMatchMarker( |
| 1590 marker_range.EndPosition(), | 1587 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1591 DocumentMarker::kTextMatch); | |
| 1592 | 1588 |
| 1593 // Replace "initial text" with "content" | 1589 // Replace "initial text" with "content" |
| 1594 Vector<CompositionUnderline> empty_underlines; | 1590 Vector<CompositionUnderline> empty_underlines; |
| 1595 Controller().SetCompositionFromExistingText(empty_underlines, 13, 25); | 1591 Controller().SetCompositionFromExistingText(empty_underlines, 13, 25); |
| 1596 Controller().CommitText(String("content"), empty_underlines, 0); | 1592 Controller().CommitText(String("content"), empty_underlines, 0); |
| 1597 | 1593 |
| 1598 EXPECT_STREQ("This is some content", div->innerHTML().Utf8().data()); | 1594 EXPECT_STREQ("This is some content", div->innerHTML().Utf8().data()); |
| 1599 | 1595 |
| 1600 // Verify marker was removed | 1596 // Verify marker was removed |
| 1601 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); | 1597 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); |
| 1602 } | 1598 } |
| 1603 | 1599 |
| 1604 TEST_F(InputMethodControllerTest, ContentDependentMarker_ReplaceEntireMarker) { | 1600 TEST_F(InputMethodControllerTest, ContentDependentMarker_ReplaceEntireMarker) { |
| 1605 Element* div = InsertHTMLElement( | 1601 Element* div = InsertHTMLElement( |
| 1606 "<div id='sample' contenteditable>Initial text</div>", "sample"); | 1602 "<div id='sample' contenteditable>Initial text</div>", "sample"); |
| 1607 | 1603 |
| 1608 // Add marker under "text" | 1604 // Add marker under "text" |
| 1609 EphemeralRange marker_range = PlainTextRange(8, 12).CreateRange(*div); | 1605 EphemeralRange marker_range = PlainTextRange(8, 12).CreateRange(*div); |
| 1610 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1606 GetDocument().Markers().AddTextMatchMarker( |
| 1611 marker_range.EndPosition(), | 1607 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1612 DocumentMarker::kTextMatch); | |
| 1613 | 1608 |
| 1614 // Replace "text" with "string" | 1609 // Replace "text" with "string" |
| 1615 Vector<CompositionUnderline> empty_underlines; | 1610 Vector<CompositionUnderline> empty_underlines; |
| 1616 Controller().SetCompositionFromExistingText(empty_underlines, 8, 12); | 1611 Controller().SetCompositionFromExistingText(empty_underlines, 8, 12); |
| 1617 Controller().CommitText(String("string"), empty_underlines, 0); | 1612 Controller().CommitText(String("string"), empty_underlines, 0); |
| 1618 | 1613 |
| 1619 // Verify marker was removed | 1614 // Verify marker was removed |
| 1620 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); | 1615 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); |
| 1621 } | 1616 } |
| 1622 | 1617 |
| 1623 TEST_F(InputMethodControllerTest, | 1618 TEST_F(InputMethodControllerTest, |
| 1624 ContentDependentMarker_ReplaceTextWithMarkerAtBeginning) { | 1619 ContentDependentMarker_ReplaceTextWithMarkerAtBeginning) { |
| 1625 Element* div = InsertHTMLElement( | 1620 Element* div = InsertHTMLElement( |
| 1626 "<div id='sample' contenteditable>Initial text</div>", "sample"); | 1621 "<div id='sample' contenteditable>Initial text</div>", "sample"); |
| 1627 | 1622 |
| 1628 // Add marker under "Initial" | 1623 // Add marker under "Initial" |
| 1629 EphemeralRange marker_range = PlainTextRange(0, 7).CreateRange(*div); | 1624 EphemeralRange marker_range = PlainTextRange(0, 7).CreateRange(*div); |
| 1630 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1625 GetDocument().Markers().AddTextMatchMarker( |
| 1631 marker_range.EndPosition(), | 1626 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1632 DocumentMarker::kTextMatch); | |
| 1633 | 1627 |
| 1634 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); | 1628 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); |
| 1635 | 1629 |
| 1636 // Replace "Initial text" with "New string" | 1630 // Replace "Initial text" with "New string" |
| 1637 Vector<CompositionUnderline> empty_underlines; | 1631 Vector<CompositionUnderline> empty_underlines; |
| 1638 Controller().SetCompositionFromExistingText(empty_underlines, 0, 12); | 1632 Controller().SetCompositionFromExistingText(empty_underlines, 0, 12); |
| 1639 Controller().CommitText(String("New string"), empty_underlines, 0); | 1633 Controller().CommitText(String("New string"), empty_underlines, 0); |
| 1640 | 1634 |
| 1641 // Verify marker was removed | 1635 // Verify marker was removed |
| 1642 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); | 1636 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); |
| 1643 } | 1637 } |
| 1644 | 1638 |
| 1645 TEST_F(InputMethodControllerTest, | 1639 TEST_F(InputMethodControllerTest, |
| 1646 ContentDependentMarker_ReplaceTextWithMarkerAtEnd) { | 1640 ContentDependentMarker_ReplaceTextWithMarkerAtEnd) { |
| 1647 Element* div = InsertHTMLElement( | 1641 Element* div = InsertHTMLElement( |
| 1648 "<div id='sample' contenteditable>Initial text</div>", "sample"); | 1642 "<div id='sample' contenteditable>Initial text</div>", "sample"); |
| 1649 | 1643 |
| 1650 // Add marker under "text" | 1644 // Add marker under "text" |
| 1651 EphemeralRange marker_range = PlainTextRange(8, 12).CreateRange(*div); | 1645 EphemeralRange marker_range = PlainTextRange(8, 12).CreateRange(*div); |
| 1652 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1646 GetDocument().Markers().AddTextMatchMarker( |
| 1653 marker_range.EndPosition(), | 1647 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1654 DocumentMarker::kTextMatch); | |
| 1655 | 1648 |
| 1656 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); | 1649 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); |
| 1657 | 1650 |
| 1658 // Replace "Initial text" with "New string" | 1651 // Replace "Initial text" with "New string" |
| 1659 Vector<CompositionUnderline> empty_underlines; | 1652 Vector<CompositionUnderline> empty_underlines; |
| 1660 Controller().SetCompositionFromExistingText(empty_underlines, 0, 12); | 1653 Controller().SetCompositionFromExistingText(empty_underlines, 0, 12); |
| 1661 Controller().CommitText(String("New string"), empty_underlines, 0); | 1654 Controller().CommitText(String("New string"), empty_underlines, 0); |
| 1662 | 1655 |
| 1663 // Verify marker was removed | 1656 // Verify marker was removed |
| 1664 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); | 1657 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); |
| 1665 } | 1658 } |
| 1666 | 1659 |
| 1667 TEST_F(InputMethodControllerTest, ContentDependentMarker_Deletions) { | 1660 TEST_F(InputMethodControllerTest, ContentDependentMarker_Deletions) { |
| 1668 Element* div = InsertHTMLElement( | 1661 Element* div = InsertHTMLElement( |
| 1669 "<div id='sample' contenteditable>1111122222333334444455555</div>", | 1662 "<div id='sample' contenteditable>1111122222333334444455555</div>", |
| 1670 "sample"); | 1663 "sample"); |
| 1671 | 1664 |
| 1672 EphemeralRange marker_range = PlainTextRange(0, 5).CreateRange(*div); | 1665 EphemeralRange marker_range = PlainTextRange(0, 5).CreateRange(*div); |
| 1673 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1666 GetDocument().Markers().AddTextMatchMarker( |
| 1674 marker_range.EndPosition(), | 1667 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1675 DocumentMarker::kTextMatch); | |
| 1676 | 1668 |
| 1677 marker_range = PlainTextRange(5, 10).CreateRange(*div); | 1669 marker_range = PlainTextRange(5, 10).CreateRange(*div); |
| 1678 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1670 GetDocument().Markers().AddTextMatchMarker( |
| 1679 marker_range.EndPosition(), | 1671 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1680 DocumentMarker::kTextMatch); | |
| 1681 | 1672 |
| 1682 marker_range = PlainTextRange(10, 15).CreateRange(*div); | 1673 marker_range = PlainTextRange(10, 15).CreateRange(*div); |
| 1683 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1674 GetDocument().Markers().AddTextMatchMarker( |
| 1684 marker_range.EndPosition(), | 1675 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1685 DocumentMarker::kTextMatch); | |
| 1686 | 1676 |
| 1687 marker_range = PlainTextRange(15, 20).CreateRange(*div); | 1677 marker_range = PlainTextRange(15, 20).CreateRange(*div); |
| 1688 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1678 GetDocument().Markers().AddTextMatchMarker( |
| 1689 marker_range.EndPosition(), | 1679 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1690 DocumentMarker::kTextMatch); | |
| 1691 | 1680 |
| 1692 marker_range = PlainTextRange(20, 25).CreateRange(*div); | 1681 marker_range = PlainTextRange(20, 25).CreateRange(*div); |
| 1693 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1682 GetDocument().Markers().AddTextMatchMarker( |
| 1694 marker_range.EndPosition(), | 1683 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1695 DocumentMarker::kTextMatch); | |
| 1696 | 1684 |
| 1697 EXPECT_EQ(5u, GetDocument().Markers().Markers().size()); | 1685 EXPECT_EQ(5u, GetDocument().Markers().Markers().size()); |
| 1698 | 1686 |
| 1699 // Delete third marker and portions of second and fourth | 1687 // Delete third marker and portions of second and fourth |
| 1700 Vector<CompositionUnderline> empty_underlines; | 1688 Vector<CompositionUnderline> empty_underlines; |
| 1701 Controller().SetCompositionFromExistingText(empty_underlines, 8, 17); | 1689 Controller().SetCompositionFromExistingText(empty_underlines, 8, 17); |
| 1702 Controller().CommitText(String(""), empty_underlines, 0); | 1690 Controller().CommitText(String(""), empty_underlines, 0); |
| 1703 | 1691 |
| 1704 // Verify markers were updated correctly | 1692 // Verify markers were updated correctly |
| 1705 EXPECT_EQ(2u, GetDocument().Markers().Markers().size()); | 1693 EXPECT_EQ(2u, GetDocument().Markers().Markers().size()); |
| 1706 | 1694 |
| 1707 EXPECT_EQ(0u, GetDocument().Markers().Markers()[0]->StartOffset()); | 1695 EXPECT_EQ(0u, GetDocument().Markers().Markers()[0]->StartOffset()); |
| 1708 EXPECT_EQ(5u, GetDocument().Markers().Markers()[0]->EndOffset()); | 1696 EXPECT_EQ(5u, GetDocument().Markers().Markers()[0]->EndOffset()); |
| 1709 | 1697 |
| 1710 EXPECT_EQ(11u, GetDocument().Markers().Markers()[1]->StartOffset()); | 1698 EXPECT_EQ(11u, GetDocument().Markers().Markers()[1]->StartOffset()); |
| 1711 EXPECT_EQ(16u, GetDocument().Markers().Markers()[1]->EndOffset()); | 1699 EXPECT_EQ(16u, GetDocument().Markers().Markers()[1]->EndOffset()); |
| 1712 } | 1700 } |
| 1713 | 1701 |
| 1714 TEST_F(InputMethodControllerTest, | 1702 TEST_F(InputMethodControllerTest, |
| 1715 ContentDependentMarker_DeleteExactlyOnMarker) { | 1703 ContentDependentMarker_DeleteExactlyOnMarker) { |
| 1716 Element* div = InsertHTMLElement( | 1704 Element* div = InsertHTMLElement( |
| 1717 "<div id='sample' contenteditable>1111122222333334444455555</div>", | 1705 "<div id='sample' contenteditable>1111122222333334444455555</div>", |
| 1718 "sample"); | 1706 "sample"); |
| 1719 | 1707 |
| 1720 EphemeralRange marker_range = PlainTextRange(5, 10).CreateRange(*div); | 1708 EphemeralRange marker_range = PlainTextRange(5, 10).CreateRange(*div); |
| 1721 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1709 GetDocument().Markers().AddTextMatchMarker( |
| 1722 marker_range.EndPosition(), | 1710 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1723 DocumentMarker::kTextMatch); | |
| 1724 | 1711 |
| 1725 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); | 1712 EXPECT_EQ(1u, GetDocument().Markers().Markers().size()); |
| 1726 | 1713 |
| 1727 // Delete exactly on the marker | 1714 // Delete exactly on the marker |
| 1728 Vector<CompositionUnderline> empty_underlines; | 1715 Vector<CompositionUnderline> empty_underlines; |
| 1729 Controller().SetCompositionFromExistingText(empty_underlines, 5, 10); | 1716 Controller().SetCompositionFromExistingText(empty_underlines, 5, 10); |
| 1730 Controller().CommitText(String(""), empty_underlines, 0); | 1717 Controller().CommitText(String(""), empty_underlines, 0); |
| 1731 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); | 1718 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); |
| 1732 } | 1719 } |
| 1733 | 1720 |
| 1734 TEST_F(InputMethodControllerTest, ContentDependentMarker_DeleteMiddleOfMarker) { | 1721 TEST_F(InputMethodControllerTest, ContentDependentMarker_DeleteMiddleOfMarker) { |
| 1735 Element* div = InsertHTMLElement( | 1722 Element* div = InsertHTMLElement( |
| 1736 "<div id='sample' contenteditable>1111122222333334444455555</div>", | 1723 "<div id='sample' contenteditable>1111122222333334444455555</div>", |
| 1737 "sample"); | 1724 "sample"); |
| 1738 | 1725 |
| 1739 EphemeralRange marker_range = PlainTextRange(5, 10).CreateRange(*div); | 1726 EphemeralRange marker_range = PlainTextRange(5, 10).CreateRange(*div); |
| 1740 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1727 GetDocument().Markers().AddTextMatchMarker( |
| 1741 marker_range.EndPosition(), | 1728 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1742 DocumentMarker::kTextMatch); | |
| 1743 | 1729 |
| 1744 // Delete middle of marker | 1730 // Delete middle of marker |
| 1745 Vector<CompositionUnderline> empty_underlines; | 1731 Vector<CompositionUnderline> empty_underlines; |
| 1746 Controller().SetCompositionFromExistingText(empty_underlines, 6, 9); | 1732 Controller().SetCompositionFromExistingText(empty_underlines, 6, 9); |
| 1747 Controller().CommitText(String(""), empty_underlines, 0); | 1733 Controller().CommitText(String(""), empty_underlines, 0); |
| 1748 | 1734 |
| 1749 // Verify marker was removed | 1735 // Verify marker was removed |
| 1750 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); | 1736 EXPECT_EQ(0u, GetDocument().Markers().Markers().size()); |
| 1751 } | 1737 } |
| 1752 | 1738 |
| 1753 TEST_F(InputMethodControllerTest, | 1739 TEST_F(InputMethodControllerTest, |
| 1754 ContentDependentMarker_InsertInMarkerInterior) { | 1740 ContentDependentMarker_InsertInMarkerInterior) { |
| 1755 Element* div = InsertHTMLElement( | 1741 Element* div = InsertHTMLElement( |
| 1756 "<div id='sample' contenteditable>1111122222333334444455555</div>", | 1742 "<div id='sample' contenteditable>1111122222333334444455555</div>", |
| 1757 "sample"); | 1743 "sample"); |
| 1758 | 1744 |
| 1759 EphemeralRange marker_range = PlainTextRange(0, 5).CreateRange(*div); | 1745 EphemeralRange marker_range = PlainTextRange(0, 5).CreateRange(*div); |
| 1760 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1746 GetDocument().Markers().AddTextMatchMarker( |
| 1761 marker_range.EndPosition(), | 1747 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1762 DocumentMarker::kTextMatch); | |
| 1763 | 1748 |
| 1764 marker_range = PlainTextRange(5, 10).CreateRange(*div); | 1749 marker_range = PlainTextRange(5, 10).CreateRange(*div); |
| 1765 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1750 GetDocument().Markers().AddTextMatchMarker( |
| 1766 marker_range.EndPosition(), | 1751 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1767 DocumentMarker::kTextMatch); | |
| 1768 | 1752 |
| 1769 marker_range = PlainTextRange(10, 15).CreateRange(*div); | 1753 marker_range = PlainTextRange(10, 15).CreateRange(*div); |
| 1770 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1754 GetDocument().Markers().AddTextMatchMarker( |
| 1771 marker_range.EndPosition(), | 1755 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1772 DocumentMarker::kTextMatch); | |
| 1773 | 1756 |
| 1774 EXPECT_EQ(3u, GetDocument().Markers().Markers().size()); | 1757 EXPECT_EQ(3u, GetDocument().Markers().Markers().size()); |
| 1775 | 1758 |
| 1776 // insert in middle of second marker | 1759 // insert in middle of second marker |
| 1777 Vector<CompositionUnderline> empty_underlines; | 1760 Vector<CompositionUnderline> empty_underlines; |
| 1778 Controller().SetComposition("", empty_underlines, 7, 7); | 1761 Controller().SetComposition("", empty_underlines, 7, 7); |
| 1779 Controller().CommitText(String("66666"), empty_underlines, -7); | 1762 Controller().CommitText(String("66666"), empty_underlines, -7); |
| 1780 | 1763 |
| 1781 EXPECT_EQ(2u, GetDocument().Markers().Markers().size()); | 1764 EXPECT_EQ(2u, GetDocument().Markers().Markers().size()); |
| 1782 | 1765 |
| 1783 EXPECT_EQ(0u, GetDocument().Markers().Markers()[0]->StartOffset()); | 1766 EXPECT_EQ(0u, GetDocument().Markers().Markers()[0]->StartOffset()); |
| 1784 EXPECT_EQ(5u, GetDocument().Markers().Markers()[0]->EndOffset()); | 1767 EXPECT_EQ(5u, GetDocument().Markers().Markers()[0]->EndOffset()); |
| 1785 | 1768 |
| 1786 EXPECT_EQ(15u, GetDocument().Markers().Markers()[1]->StartOffset()); | 1769 EXPECT_EQ(15u, GetDocument().Markers().Markers()[1]->StartOffset()); |
| 1787 EXPECT_EQ(20u, GetDocument().Markers().Markers()[1]->EndOffset()); | 1770 EXPECT_EQ(20u, GetDocument().Markers().Markers()[1]->EndOffset()); |
| 1788 } | 1771 } |
| 1789 | 1772 |
| 1790 TEST_F(InputMethodControllerTest, ContentDependentMarker_InsertBetweenMarkers) { | 1773 TEST_F(InputMethodControllerTest, ContentDependentMarker_InsertBetweenMarkers) { |
| 1791 Element* div = InsertHTMLElement( | 1774 Element* div = InsertHTMLElement( |
| 1792 "<div id='sample' contenteditable>1111122222333334444455555</div>", | 1775 "<div id='sample' contenteditable>1111122222333334444455555</div>", |
| 1793 "sample"); | 1776 "sample"); |
| 1794 | 1777 |
| 1795 EphemeralRange marker_range = PlainTextRange(0, 5).CreateRange(*div); | 1778 EphemeralRange marker_range = PlainTextRange(0, 5).CreateRange(*div); |
| 1796 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1779 GetDocument().Markers().AddTextMatchMarker( |
| 1797 marker_range.EndPosition(), | 1780 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1798 DocumentMarker::kTextMatch); | |
| 1799 | 1781 |
| 1800 marker_range = PlainTextRange(5, 15).CreateRange(*div); | 1782 marker_range = PlainTextRange(5, 15).CreateRange(*div); |
| 1801 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1783 GetDocument().Markers().AddTextMatchMarker( |
| 1802 marker_range.EndPosition(), | 1784 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1803 DocumentMarker::kTextMatch); | |
| 1804 | 1785 |
| 1805 marker_range = PlainTextRange(15, 20).CreateRange(*div); | 1786 marker_range = PlainTextRange(15, 20).CreateRange(*div); |
| 1806 GetDocument().Markers().AddMarker(marker_range.StartPosition(), | 1787 GetDocument().Markers().AddTextMatchMarker( |
| 1807 marker_range.EndPosition(), | 1788 marker_range, DocumentMarker::MatchStatus::kInactive); |
| 1808 DocumentMarker::kTextMatch); | |
| 1809 | 1789 |
| 1810 EXPECT_EQ(3u, GetDocument().Markers().Markers().size()); | 1790 EXPECT_EQ(3u, GetDocument().Markers().Markers().size()); |
| 1811 | 1791 |
| 1812 Vector<CompositionUnderline> empty_underlines; | 1792 Vector<CompositionUnderline> empty_underlines; |
| 1813 Controller().SetComposition("", empty_underlines, 5, 5); | 1793 Controller().SetComposition("", empty_underlines, 5, 5); |
| 1814 Controller().CommitText(String("77777"), empty_underlines, 0); | 1794 Controller().CommitText(String("77777"), empty_underlines, 0); |
| 1815 | 1795 |
| 1816 EXPECT_EQ(3u, GetDocument().Markers().Markers().size()); | 1796 EXPECT_EQ(3u, GetDocument().Markers().Markers().size()); |
| 1817 | 1797 |
| 1818 EXPECT_EQ(0u, GetDocument().Markers().Markers()[0]->StartOffset()); | 1798 EXPECT_EQ(0u, GetDocument().Markers().Markers()[0]->StartOffset()); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1833 // Set selection before BODY(editable). | 1813 // Set selection before BODY(editable). |
| 1834 GetFrame().Selection().SetSelection( | 1814 GetFrame().Selection().SetSelection( |
| 1835 SelectionInDOMTree::Builder() | 1815 SelectionInDOMTree::Builder() |
| 1836 .Collapse(Position(GetDocument().documentElement(), 0)) | 1816 .Collapse(Position(GetDocument().documentElement(), 0)) |
| 1837 .Build()); | 1817 .Build()); |
| 1838 | 1818 |
| 1839 EXPECT_EQ(kWebTextInputTypeContentEditable, Controller().TextInputType()); | 1819 EXPECT_EQ(kWebTextInputTypeContentEditable, Controller().TextInputType()); |
| 1840 } | 1820 } |
| 1841 | 1821 |
| 1842 } // namespace blink | 1822 } // namespace blink |
| OLD | NEW |