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

Unified 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, 9 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/editing/EditingUtilitiesTest.cpp
diff --git a/third_party/WebKit/Source/core/editing/EditingUtilitiesTest.cpp b/third_party/WebKit/Source/core/editing/EditingUtilitiesTest.cpp
index 4a04eeb8161b5e569953f66a124d3e1721fdbe16..4d447d197ed5a4a6336ebb730e22758067607561 100644
--- a/third_party/WebKit/Source/core/editing/EditingUtilitiesTest.cpp
+++ b/third_party/WebKit/Source/core/editing/EditingUtilitiesTest.cpp
@@ -642,4 +642,102 @@ TEST_F(EditingUtilitiesTest, uncheckedPreviousNextOffset)
EXPECT_EQ(1, uncheckedNextOffset(node, 0));
}
+TEST_F(EditingUtilitiesTest, previousPositionOf_Backspace)
+{
+ // BMP characters. Only one code point should be deleted.
+ setBodyContent("<p id='target'>abc</p>");
+ Node* node = document().getElementById("target")->firstChild();
+ EXPECT_EQ(Position(node, 2), previousPositionOf(Position(node, 3), PositionMoveType::BackwardDeletion));
+ EXPECT_EQ(Position(node, 1), previousPositionOf(Position(node, 2), PositionMoveType::BackwardDeletion));
+ EXPECT_EQ(Position(node, 0), previousPositionOf(Position(node, 1), PositionMoveType::BackwardDeletion));
+}
+
+TEST_F(EditingUtilitiesTest, previousPositionOf_Backspace_FirstLetter)
+{
+
+ setBodyContent("<style>p::first-letter {color:red;}</style><p id='target'>abc</p>");
+ Node* node = document().getElementById("target")->firstChild();
+ EXPECT_EQ(Position(node, 2), previousPositionOf(Position(node, 3), PositionMoveType::BackwardDeletion));
+ EXPECT_EQ(Position(node, 1), previousPositionOf(Position(node, 2), PositionMoveType::BackwardDeletion));
+ EXPECT_EQ(Position(node, 0), previousPositionOf(Position(node, 1), PositionMoveType::BackwardDeletion));
+
+ setBodyContent("<style>p::first-letter {color:red;}</style><p id='target'>(a)bc</p>");
+ node = document().getElementById("target")->firstChild();
+ EXPECT_EQ(Position(node, 4), previousPositionOf(Position(node, 5), PositionMoveType::BackwardDeletion));
+ EXPECT_EQ(Position(node, 3), previousPositionOf(Position(node, 4), PositionMoveType::BackwardDeletion));
+ EXPECT_EQ(Position(node, 2), previousPositionOf(Position(node, 3), PositionMoveType::BackwardDeletion));
+ EXPECT_EQ(Position(node, 1), previousPositionOf(Position(node, 2), PositionMoveType::BackwardDeletion));
+ EXPECT_EQ(Position(node, 0), previousPositionOf(Position(node, 1), PositionMoveType::BackwardDeletion));
+}
+
+TEST_F(EditingUtilitiesTest, previousPositionOf_Backspace_TextTransform)
+{
+ // Uppercase of &#x00DF; will be transformed to SS.
+ setBodyContent("<style>p {text-transform:uppercase}</style><p id='target'>&#x00DF;abc</p>");
+ Node* node = document().getElementById("target")->firstChild();
+ EXPECT_EQ(Position(node, 3), previousPositionOf(Position(node, 4), PositionMoveType::BackwardDeletion));
+ EXPECT_EQ(Position(node, 2), previousPositionOf(Position(node, 3), PositionMoveType::BackwardDeletion));
+ EXPECT_EQ(Position(node, 1), previousPositionOf(Position(node, 2), PositionMoveType::BackwardDeletion));
+ EXPECT_EQ(Position(node, 0), previousPositionOf(Position(node, 1), PositionMoveType::BackwardDeletion));
+}
+
+TEST_F(EditingUtilitiesTest, previousPositionOf_Backspace_SurrogatePairs)
+{
+ // Supplementary plane characters. Only one code point should be deleted.
+ // &#x1F441; is EYE.
+ setBodyContent("<p id='target'>&#x1F441;&#x1F441;&#x1F441;</p>");
+ Node* node = document().getElementById("target")->firstChild();
+ EXPECT_EQ(Position(node, 4), previousPositionOf(Position(node, 6), PositionMoveType::BackwardDeletion));
+ EXPECT_EQ(Position(node, 2), previousPositionOf(Position(node, 4), PositionMoveType::BackwardDeletion));
+ EXPECT_EQ(Position(node, 0), previousPositionOf(Position(node, 2), PositionMoveType::BackwardDeletion));
+
+ // BMP and Supplementary plane case.
+ setBodyContent("<p id='target'>&#x1F441;a&#x1F441;a</p>");
+ node = document().getElementById("target")->firstChild();
+ EXPECT_EQ(Position(node, 5), previousPositionOf(Position(node, 6), PositionMoveType::BackwardDeletion));
+ EXPECT_EQ(Position(node, 3), previousPositionOf(Position(node, 5), PositionMoveType::BackwardDeletion));
+ EXPECT_EQ(Position(node, 2), previousPositionOf(Position(node, 3), PositionMoveType::BackwardDeletion));
+ EXPECT_EQ(Position(node, 0), previousPositionOf(Position(node, 2), PositionMoveType::BackwardDeletion));
+
+ // Edge case: broken surrogate pairs.
+ setBodyContent("<p id='target'>&#xD83D;</p>"); // &#xD83D; is unpaired lead surrogate.
+ node = document().getElementById("target")->firstChild();
+ EXPECT_EQ(Position(node, 0), previousPositionOf(Position(node, 1), PositionMoveType::BackwardDeletion));
+
+ setBodyContent("<p id='target'>&#x1F441;&#xD83D;&#x1F441;</p>"); // &#xD83D; is unpaired lead surrogate.
+ node = document().getElementById("target")->firstChild();
+ EXPECT_EQ(Position(node, 3), previousPositionOf(Position(node, 5), PositionMoveType::BackwardDeletion));
+ EXPECT_EQ(Position(node, 2), previousPositionOf(Position(node, 3), PositionMoveType::BackwardDeletion));
+ EXPECT_EQ(Position(node, 0), previousPositionOf(Position(node, 2), PositionMoveType::BackwardDeletion));
+
+ setBodyContent("<p id='target'>a&#xD83D;a</p>"); // &#xD83D; is unpaired lead surrogate.
+ node = document().getElementById("target")->firstChild();
+ EXPECT_EQ(Position(node, 2), previousPositionOf(Position(node, 3), PositionMoveType::BackwardDeletion));
+ EXPECT_EQ(Position(node, 1), previousPositionOf(Position(node, 2), PositionMoveType::BackwardDeletion));
+ EXPECT_EQ(Position(node, 0), previousPositionOf(Position(node, 1), PositionMoveType::BackwardDeletion));
+
+ setBodyContent("<p id='target'>&#xDC41;</p>"); // &#xDC41; is unpaired trail surrogate.
+ node = document().getElementById("target")->firstChild();
+ EXPECT_EQ(Position(node, 0), previousPositionOf(Position(node, 1), PositionMoveType::BackwardDeletion));
+
+ setBodyContent("<p id='target'>&#x1F441;&#xDC41;&#x1F441;</p>"); // &#xDC41; is unpaired trail surrogate.
+ node = document().getElementById("target")->firstChild();
+ EXPECT_EQ(Position(node, 3), previousPositionOf(Position(node, 5), PositionMoveType::BackwardDeletion));
+ EXPECT_EQ(Position(node, 2), previousPositionOf(Position(node, 3), PositionMoveType::BackwardDeletion));
+ EXPECT_EQ(Position(node, 0), previousPositionOf(Position(node, 2), PositionMoveType::BackwardDeletion));
+
+ setBodyContent("<p id='target'>a&#xDC41;a</p>"); // &#xDC41; is unpaired trail surrogate.
+ node = document().getElementById("target")->firstChild();
+ EXPECT_EQ(Position(node, 2), previousPositionOf(Position(node, 3), PositionMoveType::BackwardDeletion));
+ EXPECT_EQ(Position(node, 1), previousPositionOf(Position(node, 2), PositionMoveType::BackwardDeletion));
+ EXPECT_EQ(Position(node, 0), previousPositionOf(Position(node, 1), PositionMoveType::BackwardDeletion));
+
+ // Edge case: specify middle of surrogate pairs.
+ setBodyContent("<p id='target'>&#x1F441;&#x1F441;&#x1F441</p>");
+ node = document().getElementById("target")->firstChild();
+ EXPECT_EQ(Position(node, 4), previousPositionOf(Position(node, 5), PositionMoveType::BackwardDeletion));
+ EXPECT_EQ(Position(node, 2), previousPositionOf(Position(node, 3), PositionMoveType::BackwardDeletion));
+ EXPECT_EQ(Position(node, 0), previousPositionOf(Position(node, 1), PositionMoveType::BackwardDeletion));
+}
+
} // namespace blink
« 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