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

Side by Side Diff: Source/core/editing/markers/DocumentMarkerControllerTest.cpp

Issue 1325563002: Avoid style clobbering in setCompositionFromExistingText. (2nd land) (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Release Range on document detach and remove selectionStart/End Created 5 years, 3 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 /* 1 /*
2 * Copyright (c) 2013, Google Inc. All rights reserved. 2 * Copyright (c) 2013, Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 47
48 class DocumentMarkerControllerTest : public ::testing::Test { 48 class DocumentMarkerControllerTest : public ::testing::Test {
49 protected: 49 protected:
50 void SetUp() override; 50 void SetUp() override;
51 51
52 Document& document() const { return *m_document; } 52 Document& document() const { return *m_document; }
53 DocumentMarkerController& markerController() const { return m_document->mark ers(); } 53 DocumentMarkerController& markerController() const { return m_document->mark ers(); }
54 54
55 PassRefPtrWillBeRawPtr<Text> createTextNode(const char*); 55 PassRefPtrWillBeRawPtr<Text> createTextNode(const char*);
56 void markNodeContents(PassRefPtrWillBeRawPtr<Node>); 56 void markNodeContents(PassRefPtrWillBeRawPtr<Node>);
57 void markNodeContentsWithComposition(PassRefPtrWillBeRawPtr<Node>);
57 void setBodyInnerHTML(const char*); 58 void setBodyInnerHTML(const char*);
58 59
59 private: 60 private:
60 OwnPtr<DummyPageHolder> m_dummyPageHolder; 61 OwnPtr<DummyPageHolder> m_dummyPageHolder;
61 RefPtrWillBePersistent<Document> m_document; 62 RefPtrWillBePersistent<Document> m_document;
62 }; 63 };
63 64
64 void DocumentMarkerControllerTest::SetUp() 65 void DocumentMarkerControllerTest::SetUp()
65 { 66 {
66 m_dummyPageHolder = DummyPageHolder::create(IntSize(800, 600)); 67 m_dummyPageHolder = DummyPageHolder::create(IntSize(800, 600));
67 m_document = &m_dummyPageHolder->document(); 68 m_document = &m_dummyPageHolder->document();
68 ASSERT(m_document); 69 ASSERT(m_document);
69 } 70 }
70 71
71 PassRefPtrWillBeRawPtr<Text> DocumentMarkerControllerTest::createTextNode(const char* textContents) 72 PassRefPtrWillBeRawPtr<Text> DocumentMarkerControllerTest::createTextNode(const char* textContents)
72 { 73 {
73 return document().createTextNode(String::fromUTF8(textContents)); 74 return document().createTextNode(String::fromUTF8(textContents));
74 } 75 }
75 76
76 void DocumentMarkerControllerTest::markNodeContents(PassRefPtrWillBeRawPtr<Node> node) 77 void DocumentMarkerControllerTest::markNodeContents(PassRefPtrWillBeRawPtr<Node> node)
77 { 78 {
78 // Force layoutObjects to be created; TextIterator, which is used in 79 // Force layoutObjects to be created; TextIterator, which is used in
79 // DocumentMarkerControllerTest::addMarker(), needs them. 80 // DocumentMarkerControllerTest::addMarker(), needs them.
80 document().updateLayout(); 81 document().updateLayout();
81 auto range = EphemeralRange::rangeOfContents(*node); 82 auto range = EphemeralRange::rangeOfContents(*node);
82 markerController().addMarker(range.startPosition(), range.endPosition(), Doc umentMarker::Spelling); 83 markerController().addMarker(range.startPosition(), range.endPosition(), Doc umentMarker::Spelling);
83 } 84 }
84 85
86 void DocumentMarkerControllerTest::markNodeContentsWithComposition(PassRefPtrWil lBeRawPtr<Node> node)
87 {
88 // Force layoutObjects to be created; TextIterator, which is used in
89 // DocumentMarkerControllerTest::addMarker(), needs them.
90 document().updateLayout();
91 auto range = EphemeralRange::rangeOfContents(*node);
92 markerController().addCompositionMarker(range.startPosition(), range.endPosi tion(), Color::black, false, Color::black);
93 }
94
85 void DocumentMarkerControllerTest::setBodyInnerHTML(const char* bodyContent) 95 void DocumentMarkerControllerTest::setBodyInnerHTML(const char* bodyContent)
86 { 96 {
87 document().body()->setInnerHTML(String::fromUTF8(bodyContent), ASSERT_NO_EXC EPTION); 97 document().body()->setInnerHTML(String::fromUTF8(bodyContent), ASSERT_NO_EXC EPTION);
88 } 98 }
89 99
90 TEST_F(DocumentMarkerControllerTest, DidMoveToNewDocument) 100 TEST_F(DocumentMarkerControllerTest, DidMoveToNewDocument)
91 { 101 {
92 setBodyInnerHTML("<b><i>foo</i></b>"); 102 setBodyInnerHTML("<b><i>foo</i></b>");
93 RefPtrWillBeRawPtr<Element> parent = toElement(document().body()->firstChild ()->firstChild()); 103 RefPtrWillBeRawPtr<Element> parent = toElement(document().body()->firstChild ()->firstChild());
94 markNodeContents(parent.get()); 104 markNodeContents(parent.get());
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 EXPECT_EQ(1u, renderedRects.size()); 220 EXPECT_EQ(1u, renderedRects.size());
211 EXPECT_NE(invalidRect, renderedRects[0]); 221 EXPECT_NE(invalidRect, renderedRects[0]);
212 222
213 div->setAttribute(HTMLNames::styleAttr, "margin: 200px"); 223 div->setAttribute(HTMLNames::styleAttr, "margin: 200px");
214 document().updateLayout(); 224 document().updateLayout();
215 Vector<IntRect> newRenderedRects = markerController().renderedRectsForMarker s(DocumentMarker::Spelling); 225 Vector<IntRect> newRenderedRects = markerController().renderedRectsForMarker s(DocumentMarker::Spelling);
216 EXPECT_EQ(1u, newRenderedRects.size()); 226 EXPECT_EQ(1u, newRenderedRects.size());
217 EXPECT_NE(renderedRects[0], newRenderedRects[0]); 227 EXPECT_NE(renderedRects[0], newRenderedRects[0]);
218 } 228 }
219 229
230 TEST_F(DocumentMarkerControllerTest, UpdateRenderedRectsForComposition)
231 {
232 IntRect invalidRect(RenderedDocumentMarker::create(DocumentMarker(0, 0, fals e))->renderedRect());
233
234 setBodyInnerHTML("<div style='margin: 100px'>foo</div>");
235 RefPtrWillBeRawPtr<Element> div = toElement(document().body()->firstChild()) ;
236 markNodeContentsWithComposition(div);
237 Vector<IntRect> renderedRects = markerController().renderedRectsForMarkers(D ocumentMarker::Composition);
238 EXPECT_EQ(1u, renderedRects.size());
239 EXPECT_NE(invalidRect, renderedRects[0]);
240
241 div->setAttribute(HTMLNames::styleAttr, "margin: 200px");
242 document().updateLayout();
243 Vector<IntRect> newRenderedRects = markerController().renderedRectsForMarker s(DocumentMarker::Composition);
244 EXPECT_EQ(1u, newRenderedRects.size());
245 EXPECT_NE(renderedRects[0], newRenderedRects[0]);
246 }
247
220 } // namespace blink 248 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/editing/markers/DocumentMarkerController.cpp ('k') | Source/core/paint/InlineTextBoxPainter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698