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

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

Issue 1839613002: Move LayoutObject::previousOffsetForBackwardDeletion() to editing. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: replace CHECK with DCHECK Created 4 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/EditingUtilities.h" 5 #include "core/editing/EditingUtilities.h"
6 6
7 #include "core/dom/StaticNodeList.h" 7 #include "core/dom/StaticNodeList.h"
8 #include "core/editing/EditingTestBase.h" 8 #include "core/editing/EditingTestBase.h"
9 9
10 namespace blink { 10 namespace blink {
(...skipping 624 matching lines...) Expand 10 before | Expand all | Expand 10 after
635 EXPECT_EQ(2, uncheckedNextOffset(node, 0)); 635 EXPECT_EQ(2, uncheckedNextOffset(node, 0));
636 636
637 // For GB11, if trailing character is not Glue_After_Zwj or EBG, break happe ns after ZWJ. 637 // For GB11, if trailing character is not Glue_After_Zwj or EBG, break happe ns after ZWJ.
638 // U+1F5FA(WORLD MAP) doesn't have either Glue_After_Zwj or EBG. 638 // U+1F5FA(WORLD MAP) doesn't have either Glue_After_Zwj or EBG.
639 setBodyContent("<p id='target'>&#x200D;&#x1F5FA;</p>"); 639 setBodyContent("<p id='target'>&#x200D;&#x1F5FA;</p>");
640 node = document().getElementById("target")->firstChild(); 640 node = document().getElementById("target")->firstChild();
641 EXPECT_EQ(1, uncheckedPreviousOffset(node, 3)); 641 EXPECT_EQ(1, uncheckedPreviousOffset(node, 3));
642 EXPECT_EQ(1, uncheckedNextOffset(node, 0)); 642 EXPECT_EQ(1, uncheckedNextOffset(node, 0));
643 } 643 }
644 644
645 TEST_F(EditingUtilitiesTest, previousPositionOf_Backspace)
646 {
647 // BMP characters. Only one code point should be deleted.
648 setBodyContent("<p id='target'>abc</p>");
649 Node* node = document().getElementById("target")->firstChild();
650 EXPECT_EQ(Position(node, 2), previousPositionOf(Position(node, 3), PositionM oveType::BackwardDeletion));
651 EXPECT_EQ(Position(node, 1), previousPositionOf(Position(node, 2), PositionM oveType::BackwardDeletion));
652 EXPECT_EQ(Position(node, 0), previousPositionOf(Position(node, 1), PositionM oveType::BackwardDeletion));
653 }
654
655 TEST_F(EditingUtilitiesTest, previousPositionOf_Backspace_FirstLetter)
656 {
657
658 setBodyContent("<style>p::first-letter {color:red;}</style><p id='target'>ab c</p>");
659 Node* node = document().getElementById("target")->firstChild();
660 EXPECT_EQ(Position(node, 2), previousPositionOf(Position(node, 3), PositionM oveType::BackwardDeletion));
661 EXPECT_EQ(Position(node, 1), previousPositionOf(Position(node, 2), PositionM oveType::BackwardDeletion));
662 EXPECT_EQ(Position(node, 0), previousPositionOf(Position(node, 1), PositionM oveType::BackwardDeletion));
663
664 setBodyContent("<style>p::first-letter {color:red;}</style><p id='target'>(a )bc</p>");
665 node = document().getElementById("target")->firstChild();
666 EXPECT_EQ(Position(node, 4), previousPositionOf(Position(node, 5), PositionM oveType::BackwardDeletion));
667 EXPECT_EQ(Position(node, 3), previousPositionOf(Position(node, 4), PositionM oveType::BackwardDeletion));
668 EXPECT_EQ(Position(node, 2), previousPositionOf(Position(node, 3), PositionM oveType::BackwardDeletion));
669 EXPECT_EQ(Position(node, 1), previousPositionOf(Position(node, 2), PositionM oveType::BackwardDeletion));
670 EXPECT_EQ(Position(node, 0), previousPositionOf(Position(node, 1), PositionM oveType::BackwardDeletion));
671 }
672
673 TEST_F(EditingUtilitiesTest, previousPositionOf_Backspace_TextTransform)
674 {
675 // Uppercase of &#x00DF; will be transformed to SS.
676 setBodyContent("<style>p {text-transform:uppercase}</style><p id='target'>&# x00DF;abc</p>");
677 Node* node = document().getElementById("target")->firstChild();
678 EXPECT_EQ(Position(node, 3), previousPositionOf(Position(node, 4), PositionM oveType::BackwardDeletion));
679 EXPECT_EQ(Position(node, 2), previousPositionOf(Position(node, 3), PositionM oveType::BackwardDeletion));
680 EXPECT_EQ(Position(node, 1), previousPositionOf(Position(node, 2), PositionM oveType::BackwardDeletion));
681 EXPECT_EQ(Position(node, 0), previousPositionOf(Position(node, 1), PositionM oveType::BackwardDeletion));
682 }
683
684 TEST_F(EditingUtilitiesTest, previousPositionOf_Backspace_SurrogatePairs)
685 {
686 // Supplementary plane characters. Only one code point should be deleted.
687 // &#x1F441; is EYE.
688 setBodyContent("<p id='target'>&#x1F441;&#x1F441;&#x1F441;</p>");
689 Node* node = document().getElementById("target")->firstChild();
690 EXPECT_EQ(Position(node, 4), previousPositionOf(Position(node, 6), PositionM oveType::BackwardDeletion));
691 EXPECT_EQ(Position(node, 2), previousPositionOf(Position(node, 4), PositionM oveType::BackwardDeletion));
692 EXPECT_EQ(Position(node, 0), previousPositionOf(Position(node, 2), PositionM oveType::BackwardDeletion));
693
694 // BMP and Supplementary plane case.
695 setBodyContent("<p id='target'>&#x1F441;a&#x1F441;a</p>");
696 node = document().getElementById("target")->firstChild();
697 EXPECT_EQ(Position(node, 5), previousPositionOf(Position(node, 6), PositionM oveType::BackwardDeletion));
698 EXPECT_EQ(Position(node, 3), previousPositionOf(Position(node, 5), PositionM oveType::BackwardDeletion));
699 EXPECT_EQ(Position(node, 2), previousPositionOf(Position(node, 3), PositionM oveType::BackwardDeletion));
700 EXPECT_EQ(Position(node, 0), previousPositionOf(Position(node, 2), PositionM oveType::BackwardDeletion));
701
702 // Edge case: broken surrogate pairs.
703 setBodyContent("<p id='target'>&#xD83D;</p>"); // &#xD83D; is unpaired lead surrogate.
704 node = document().getElementById("target")->firstChild();
705 EXPECT_EQ(Position(node, 0), previousPositionOf(Position(node, 1), PositionM oveType::BackwardDeletion));
706
707 setBodyContent("<p id='target'>&#x1F441;&#xD83D;&#x1F441;</p>"); // &#xD83D; is unpaired lead surrogate.
708 node = document().getElementById("target")->firstChild();
709 EXPECT_EQ(Position(node, 3), previousPositionOf(Position(node, 5), PositionM oveType::BackwardDeletion));
710 EXPECT_EQ(Position(node, 2), previousPositionOf(Position(node, 3), PositionM oveType::BackwardDeletion));
711 EXPECT_EQ(Position(node, 0), previousPositionOf(Position(node, 2), PositionM oveType::BackwardDeletion));
712
713 setBodyContent("<p id='target'>a&#xD83D;a</p>"); // &#xD83D; is unpaired lea d surrogate.
714 node = document().getElementById("target")->firstChild();
715 EXPECT_EQ(Position(node, 2), previousPositionOf(Position(node, 3), PositionM oveType::BackwardDeletion));
716 EXPECT_EQ(Position(node, 1), previousPositionOf(Position(node, 2), PositionM oveType::BackwardDeletion));
717 EXPECT_EQ(Position(node, 0), previousPositionOf(Position(node, 1), PositionM oveType::BackwardDeletion));
718
719 setBodyContent("<p id='target'>&#xDC41;</p>"); // &#xDC41; is unpaired trail surrogate.
720 node = document().getElementById("target")->firstChild();
721 EXPECT_EQ(Position(node, 0), previousPositionOf(Position(node, 1), PositionM oveType::BackwardDeletion));
722
723 setBodyContent("<p id='target'>&#x1F441;&#xDC41;&#x1F441;</p>"); // &#xDC41; is unpaired trail surrogate.
724 node = document().getElementById("target")->firstChild();
725 EXPECT_EQ(Position(node, 3), previousPositionOf(Position(node, 5), PositionM oveType::BackwardDeletion));
726 EXPECT_EQ(Position(node, 2), previousPositionOf(Position(node, 3), PositionM oveType::BackwardDeletion));
727 EXPECT_EQ(Position(node, 0), previousPositionOf(Position(node, 2), PositionM oveType::BackwardDeletion));
728
729 setBodyContent("<p id='target'>a&#xDC41;a</p>"); // &#xDC41; is unpaired tra il surrogate.
730 node = document().getElementById("target")->firstChild();
731 EXPECT_EQ(Position(node, 2), previousPositionOf(Position(node, 3), PositionM oveType::BackwardDeletion));
732 EXPECT_EQ(Position(node, 1), previousPositionOf(Position(node, 2), PositionM oveType::BackwardDeletion));
733 EXPECT_EQ(Position(node, 0), previousPositionOf(Position(node, 1), PositionM oveType::BackwardDeletion));
734
735 // Edge case: specify middle of surrogate pairs.
736 setBodyContent("<p id='target'>&#x1F441;&#x1F441;&#x1F441</p>");
737 node = document().getElementById("target")->firstChild();
738 EXPECT_EQ(Position(node, 4), previousPositionOf(Position(node, 5), PositionM oveType::BackwardDeletion));
739 EXPECT_EQ(Position(node, 2), previousPositionOf(Position(node, 3), PositionM oveType::BackwardDeletion));
740 EXPECT_EQ(Position(node, 0), previousPositionOf(Position(node, 1), PositionM oveType::BackwardDeletion));
741 }
742
645 } // namespace blink 743 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/editing/EditingUtilities.cpp ('k') | third_party/WebKit/Source/core/layout/LayoutObject.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698