Index: Source/core/editing/markers/DocumentMarkerControllerTest.cpp |
diff --git a/Source/core/editing/markers/DocumentMarkerControllerTest.cpp b/Source/core/editing/markers/DocumentMarkerControllerTest.cpp |
index 3c5fdee4e95e32034675efaad0b63b4520ad8d54..1f04a20d18c38fac8163f21aabcb8a2a79f1b0c0 100644 |
--- a/Source/core/editing/markers/DocumentMarkerControllerTest.cpp |
+++ b/Source/core/editing/markers/DocumentMarkerControllerTest.cpp |
@@ -54,6 +54,7 @@ protected: |
PassRefPtrWillBeRawPtr<Text> createTextNode(const char*); |
void markNodeContents(PassRefPtrWillBeRawPtr<Node>); |
+ void markNodeContentsWithComposition(PassRefPtrWillBeRawPtr<Node>); |
void setBodyInnerHTML(const char*); |
private: |
@@ -82,6 +83,15 @@ void DocumentMarkerControllerTest::markNodeContents(PassRefPtrWillBeRawPtr<Node> |
markerController().addMarker(range.startPosition(), range.endPosition(), DocumentMarker::Spelling); |
} |
+void DocumentMarkerControllerTest::markNodeContentsWithComposition(PassRefPtrWillBeRawPtr<Node> node) |
+{ |
+ // Force layoutObjects to be created; TextIterator, which is used in |
+ // DocumentMarkerControllerTest::addMarker(), needs them. |
+ document().updateLayout(); |
+ auto range = EphemeralRange::rangeOfContents(*node); |
+ markerController().addCompositionMarker(range.startPosition(), range.endPosition(), Color::black, false, Color::black); |
+} |
+ |
void DocumentMarkerControllerTest::setBodyInnerHTML(const char* bodyContent) |
{ |
document().body()->setInnerHTML(String::fromUTF8(bodyContent), ASSERT_NO_EXCEPTION); |
@@ -217,4 +227,22 @@ TEST_F(DocumentMarkerControllerTest, UpdateRenderedRects) |
EXPECT_NE(renderedRects[0], newRenderedRects[0]); |
} |
+TEST_F(DocumentMarkerControllerTest, UpdateRenderedRectsForComposition) |
+{ |
+ IntRect invalidRect(RenderedDocumentMarker::create(DocumentMarker(0, 0, false))->renderedRect()); |
+ |
+ setBodyInnerHTML("<div style='margin: 100px'>foo</div>"); |
+ RefPtrWillBeRawPtr<Element> div = toElement(document().body()->firstChild()); |
+ markNodeContentsWithComposition(div); |
+ Vector<IntRect> renderedRects = markerController().renderedRectsForMarkers(DocumentMarker::Composition); |
+ EXPECT_EQ(1u, renderedRects.size()); |
+ EXPECT_NE(invalidRect, renderedRects[0]); |
+ |
+ div->setAttribute(HTMLNames::styleAttr, "margin: 200px"); |
+ document().updateLayout(); |
+ Vector<IntRect> newRenderedRects = markerController().renderedRectsForMarkers(DocumentMarker::Composition); |
+ EXPECT_EQ(1u, newRenderedRects.size()); |
+ EXPECT_NE(renderedRects[0], newRenderedRects[0]); |
+} |
+ |
} // namespace blink |