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

Unified Diff: third_party/WebKit/Source/core/editing/VisibleUnitsTest.cpp

Issue 1636373002: Make associatedLayoutObjectOf() to handle ::first-letter pseudo-element correctly (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 2016-01-29T15:21:03 Get rid of unused variable Created 4 years, 11 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
« no previous file with comments | « third_party/WebKit/Source/core/editing/VisibleUnits.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/editing/VisibleUnitsTest.cpp
diff --git a/third_party/WebKit/Source/core/editing/VisibleUnitsTest.cpp b/third_party/WebKit/Source/core/editing/VisibleUnitsTest.cpp
index 6b7597de73fc38b9f760252048652fc31c961bd5..6f3dc36f95a96b59f7932dc5f84632cb476f2dfe 100644
--- a/third_party/WebKit/Source/core/editing/VisibleUnitsTest.cpp
+++ b/third_party/WebKit/Source/core/editing/VisibleUnitsTest.cpp
@@ -8,6 +8,7 @@
#include "core/editing/EditingTestBase.h"
#include "core/editing/VisiblePosition.h"
#include "core/html/HTMLTextFormControlElement.h"
+#include "core/layout/LayoutTextFragment.h"
#include "core/layout/line/InlineBox.h"
#include <ostream> // NOLINT
@@ -66,6 +67,66 @@ TEST_F(VisibleUnitsTest, absoluteCaretBoundsOf)
EXPECT_EQ(boundsInDOMTree, boundsInComposedTree);
}
+TEST_F(VisibleUnitsTest, associatedLayoutObjectOfFirstLetterPunctuations)
+{
+ const char* bodyContent = "<style>p:first-letter {color:red;}</style><p id=sample>(a)bc</p>";
+ setBodyContent(bodyContent);
+ updateLayoutAndStyleForPainting();
+
+ Node* sample = document().getElementById("sample");
+ Node* text = sample->firstChild();
+
+ LayoutTextFragment* layoutObject0 = toLayoutTextFragment(associatedLayoutObjectOf(*text, 0));
+ EXPECT_FALSE(layoutObject0->isRemainingTextLayoutObject());
+
+ LayoutTextFragment* layoutObject1 = toLayoutTextFragment(associatedLayoutObjectOf(*text, 1));
+ EXPECT_EQ(layoutObject0, layoutObject1) << "A character 'a' should be part of first letter.";
+
+ LayoutTextFragment* layoutObject2 = toLayoutTextFragment(associatedLayoutObjectOf(*text, 2));
+ EXPECT_EQ(layoutObject0, layoutObject2) << "close parenthesis should be part of first letter.";
+
+ LayoutTextFragment* layoutObject3 = toLayoutTextFragment(associatedLayoutObjectOf(*text, 3));
+ EXPECT_TRUE(layoutObject3->isRemainingTextLayoutObject());
+}
+
+TEST_F(VisibleUnitsTest, associatedLayoutObjectOfFirstLetterSplit)
+{
+ const char* bodyContent = "<style>p:first-letter {color:red;}</style><p id=sample>abc</p>";
+ setBodyContent(bodyContent);
+ updateLayoutAndStyleForPainting();
+
+ Node* sample = document().getElementById("sample");
+ Node* firstLetter = sample->firstChild();
+ // Split "abc" into "a" "bc"
+ toText(firstLetter)->splitText(1, ASSERT_NO_EXCEPTION);
+ updateLayoutAndStyleForPainting();
+
+ LayoutTextFragment* layoutObject0 = toLayoutTextFragment(associatedLayoutObjectOf(*firstLetter, 0));
+ EXPECT_FALSE(layoutObject0->isRemainingTextLayoutObject());
+
+ LayoutTextFragment* layoutObject1 = toLayoutTextFragment(associatedLayoutObjectOf(*firstLetter, 1));
+ EXPECT_EQ(layoutObject0, layoutObject1);
+}
+
+TEST_F(VisibleUnitsTest, associatedLayoutObjectOfFirstLetterWithTrailingWhitespace)
+{
+ const char* bodyContent = "<style>div:first-letter {color:red;}</style><div id=sample>a\n <div></div></div>";
+ setBodyContent(bodyContent);
+ updateLayoutAndStyleForPainting();
+
+ Node* sample = document().getElementById("sample");
+ Node* text = sample->firstChild();
+
+ LayoutTextFragment* layoutObject0 = toLayoutTextFragment(associatedLayoutObjectOf(*text, 0));
+ EXPECT_FALSE(layoutObject0->isRemainingTextLayoutObject());
+
+ LayoutTextFragment* layoutObject1 = toLayoutTextFragment(associatedLayoutObjectOf(*text, 1));
+ EXPECT_TRUE(layoutObject1->isRemainingTextLayoutObject());
+
+ LayoutTextFragment* layoutObject2 = toLayoutTextFragment(associatedLayoutObjectOf(*text, 2));
+ EXPECT_EQ(layoutObject1, layoutObject2);
+}
+
TEST_F(VisibleUnitsTest, caretMinOffset)
{
const char* bodyContent = "<p id=one>one</p>";
@@ -803,6 +864,27 @@ TEST_F(VisibleUnitsTest, mostBackwardCaretPositionFirstLetter)
EXPECT_EQ(Position::lastPositionInNode(document().body()), mostBackwardCaretPosition(Position::lastPositionInNode(document().body())));
}
+TEST_F(VisibleUnitsTest, mostBackwardCaretPositionFirstLetterSplit)
+{
+ const char* bodyContent = "<style>p:first-letter {color:red;}</style><p id=sample>abc</p>";
+ setBodyContent(bodyContent);
+ updateLayoutAndStyleForPainting();
+
+ Node* sample = document().getElementById("sample");
+ Node* firstLetter = sample->firstChild();
+ // Split "abc" into "a" "bc"
+ RefPtrWillBeRawPtr<Text> remaining = toText(firstLetter)->splitText(1, ASSERT_NO_EXCEPTION);
+ updateLayoutAndStyleForPainting();
+
+ EXPECT_EQ(Position(sample, 0), mostBackwardCaretPosition(Position(firstLetter, 0)));
+ EXPECT_EQ(Position(firstLetter, 1), mostBackwardCaretPosition(Position(firstLetter, 1)));
+ EXPECT_EQ(Position(firstLetter, 1), mostBackwardCaretPosition(Position(remaining, 0)));
+ EXPECT_EQ(Position(remaining, 1), mostBackwardCaretPosition(Position(remaining, 1)));
+ EXPECT_EQ(Position(remaining, 2), mostBackwardCaretPosition(Position(remaining, 2)));
+ EXPECT_EQ(Position(remaining, 2), mostBackwardCaretPosition(Position::lastPositionInNode(sample)));
+ EXPECT_EQ(Position(remaining, 2), mostBackwardCaretPosition(Position::afterNode(sample)));
+}
+
TEST_F(VisibleUnitsTest, mostForwardCaretPositionAfterAnchor)
{
const char* bodyContent = "<p id='host'><b id='one'>1</b></p>";
« no previous file with comments | « third_party/WebKit/Source/core/editing/VisibleUnits.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698