OLD | NEW |
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 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
50 DocumentMarkerControllerTest() | 50 DocumentMarkerControllerTest() |
51 : dummy_page_holder_(DummyPageHolder::Create(IntSize(800, 600))) {} | 51 : dummy_page_holder_(DummyPageHolder::Create(IntSize(800, 600))) {} |
52 | 52 |
53 Document& GetDocument() const { return dummy_page_holder_->GetDocument(); } | 53 Document& GetDocument() const { return dummy_page_holder_->GetDocument(); } |
54 DocumentMarkerController& MarkerController() const { | 54 DocumentMarkerController& MarkerController() const { |
55 return GetDocument().Markers(); | 55 return GetDocument().Markers(); |
56 } | 56 } |
57 | 57 |
58 Text* CreateTextNode(const char*); | 58 Text* CreateTextNode(const char*); |
59 void MarkNodeContents(Node*); | 59 void MarkNodeContents(Node*); |
60 void MarkNodeContentsWithComposition(Node*); | |
61 void SetBodyInnerHTML(const char*); | 60 void SetBodyInnerHTML(const char*); |
62 | 61 |
63 private: | 62 private: |
64 std::unique_ptr<DummyPageHolder> dummy_page_holder_; | 63 std::unique_ptr<DummyPageHolder> dummy_page_holder_; |
65 }; | 64 }; |
66 | 65 |
67 Text* DocumentMarkerControllerTest::CreateTextNode(const char* text_contents) { | 66 Text* DocumentMarkerControllerTest::CreateTextNode(const char* text_contents) { |
68 return GetDocument().createTextNode(String::FromUTF8(text_contents)); | 67 return GetDocument().createTextNode(String::FromUTF8(text_contents)); |
69 } | 68 } |
70 | 69 |
71 void DocumentMarkerControllerTest::MarkNodeContents(Node* node) { | 70 void DocumentMarkerControllerTest::MarkNodeContents(Node* node) { |
72 // Force layoutObjects to be created; TextIterator, which is used in | 71 // Force layoutObjects to be created; TextIterator, which is used in |
73 // DocumentMarkerControllerTest::addMarker(), needs them. | 72 // DocumentMarkerControllerTest::addMarker(), needs them. |
74 GetDocument().UpdateStyleAndLayout(); | 73 GetDocument().UpdateStyleAndLayout(); |
75 auto range = EphemeralRange::RangeOfContents(*node); | 74 auto range = EphemeralRange::RangeOfContents(*node); |
76 MarkerController().AddMarker(range.StartPosition(), range.EndPosition(), | 75 MarkerController().AddMarker(range.StartPosition(), range.EndPosition(), |
77 DocumentMarker::kSpelling); | 76 DocumentMarker::kSpelling); |
78 } | 77 } |
79 | 78 |
80 void DocumentMarkerControllerTest::MarkNodeContentsWithComposition(Node* node) { | |
81 // Force layoutObjects to be created; TextIterator, which is used in | |
82 // DocumentMarkerControllerTest::addMarker(), needs them. | |
83 GetDocument().UpdateStyleAndLayout(); | |
84 auto range = EphemeralRange::RangeOfContents(*node); | |
85 MarkerController().AddCompositionMarker(range.StartPosition(), | |
86 range.EndPosition(), Color::kBlack, | |
87 false, Color::kBlack); | |
88 } | |
89 | |
90 void DocumentMarkerControllerTest::SetBodyInnerHTML(const char* body_content) { | 79 void DocumentMarkerControllerTest::SetBodyInnerHTML(const char* body_content) { |
91 GetDocument().body()->setInnerHTML(String::FromUTF8(body_content)); | 80 GetDocument().body()->setInnerHTML(String::FromUTF8(body_content)); |
92 } | 81 } |
93 | 82 |
94 TEST_F(DocumentMarkerControllerTest, DidMoveToNewDocument) { | 83 TEST_F(DocumentMarkerControllerTest, DidMoveToNewDocument) { |
95 SetBodyInnerHTML("<b><i>foo</i></b>"); | 84 SetBodyInnerHTML("<b><i>foo</i></b>"); |
96 Element* parent = ToElement(GetDocument().body()->firstChild()->firstChild()); | 85 Element* parent = ToElement(GetDocument().body()->firstChild()->firstChild()); |
97 MarkNodeContents(parent); | 86 MarkNodeContents(parent); |
98 EXPECT_EQ(1u, MarkerController().Markers().size()); | 87 EXPECT_EQ(1u, MarkerController().Markers().size()); |
99 Persistent<Document> another_document = Document::Create(); | 88 Persistent<Document> another_document = Document::Create(); |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
210 EXPECT_EQ(1u, rendered_rects.size()); | 199 EXPECT_EQ(1u, rendered_rects.size()); |
211 | 200 |
212 div->setAttribute(HTMLNames::styleAttr, "margin: 200px"); | 201 div->setAttribute(HTMLNames::styleAttr, "margin: 200px"); |
213 GetDocument().UpdateStyleAndLayout(); | 202 GetDocument().UpdateStyleAndLayout(); |
214 Vector<IntRect> new_rendered_rects = | 203 Vector<IntRect> new_rendered_rects = |
215 MarkerController().RenderedRectsForMarkers(DocumentMarker::kSpelling); | 204 MarkerController().RenderedRectsForMarkers(DocumentMarker::kSpelling); |
216 EXPECT_EQ(1u, new_rendered_rects.size()); | 205 EXPECT_EQ(1u, new_rendered_rects.size()); |
217 EXPECT_NE(rendered_rects[0], new_rendered_rects[0]); | 206 EXPECT_NE(rendered_rects[0], new_rendered_rects[0]); |
218 } | 207 } |
219 | 208 |
220 TEST_F(DocumentMarkerControllerTest, UpdateRenderedRectsForComposition) { | |
221 SetBodyInnerHTML("<div style='margin: 100px'>foo</div>"); | |
222 Element* div = ToElement(GetDocument().body()->firstChild()); | |
223 MarkNodeContentsWithComposition(div); | |
224 Vector<IntRect> rendered_rects = | |
225 MarkerController().RenderedRectsForMarkers(DocumentMarker::kComposition); | |
226 EXPECT_EQ(1u, rendered_rects.size()); | |
227 | |
228 div->setAttribute(HTMLNames::styleAttr, "margin: 200px"); | |
229 GetDocument().UpdateStyleAndLayout(); | |
230 Vector<IntRect> new_rendered_rects = | |
231 MarkerController().RenderedRectsForMarkers(DocumentMarker::kComposition); | |
232 EXPECT_EQ(1u, new_rendered_rects.size()); | |
233 EXPECT_NE(rendered_rects[0], new_rendered_rects[0]); | |
234 } | |
235 | |
236 TEST_F(DocumentMarkerControllerTest, CompositionMarkersNotMerged) { | 209 TEST_F(DocumentMarkerControllerTest, CompositionMarkersNotMerged) { |
237 SetBodyInnerHTML("<div style='margin: 100px'>foo</div>"); | 210 SetBodyInnerHTML("<div style='margin: 100px'>foo</div>"); |
238 Node* text = GetDocument().body()->firstChild()->firstChild(); | 211 Node* text = GetDocument().body()->firstChild()->firstChild(); |
239 GetDocument().UpdateStyleAndLayout(); | 212 GetDocument().UpdateStyleAndLayout(); |
240 MarkerController().AddCompositionMarker(Position(text, 0), Position(text, 1), | 213 MarkerController().AddCompositionMarker(Position(text, 0), Position(text, 1), |
241 Color::kBlack, false, Color::kBlack); | 214 Color::kBlack, false, Color::kBlack); |
242 MarkerController().AddCompositionMarker(Position(text, 1), Position(text, 3), | 215 MarkerController().AddCompositionMarker(Position(text, 1), Position(text, 3), |
243 Color::kBlack, true, Color::kBlack); | 216 Color::kBlack, true, Color::kBlack); |
244 | 217 |
245 EXPECT_EQ(2u, MarkerController().Markers().size()); | 218 EXPECT_EQ(2u, MarkerController().Markers().size()); |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
342 | 315 |
343 // RemoveSpellingMarkersUnderWords does not remove text match marker. | 316 // RemoveSpellingMarkersUnderWords does not remove text match marker. |
344 ASSERT_EQ(1u, MarkerController().Markers().size()); | 317 ASSERT_EQ(1u, MarkerController().Markers().size()); |
345 const DocumentMarker& marker = *MarkerController().Markers()[0]; | 318 const DocumentMarker& marker = *MarkerController().Markers()[0]; |
346 EXPECT_EQ(0u, marker.StartOffset()); | 319 EXPECT_EQ(0u, marker.StartOffset()); |
347 EXPECT_EQ(3u, marker.EndOffset()); | 320 EXPECT_EQ(3u, marker.EndOffset()); |
348 EXPECT_EQ(DocumentMarker::kTextMatch, marker.GetType()); | 321 EXPECT_EQ(DocumentMarker::kTextMatch, marker.GetType()); |
349 } | 322 } |
350 | 323 |
351 } // namespace blink | 324 } // namespace blink |
OLD | NEW |