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

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

Issue 2812723002: Add some tests for DocumentMarkerController::removeMarkers() (Closed)
Patch Set: Created 3 years, 8 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 12 matching lines...) Expand all
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30 30
31 #include "core/editing/markers/DocumentMarkerController.h" 31 #include "core/editing/markers/DocumentMarkerController.h"
32 32
33 #include <memory>
33 #include "bindings/core/v8/ExceptionState.h" 34 #include "bindings/core/v8/ExceptionState.h"
34 #include "core/dom/Document.h" 35 #include "core/dom/Document.h"
35 #include "core/dom/Range.h" 36 #include "core/dom/Range.h"
36 #include "core/dom/Text.h" 37 #include "core/dom/Text.h"
37 #include "core/editing/EphemeralRange.h" 38 #include "core/editing/EphemeralRange.h"
39 #include "core/editing/PlainTextRange.h"
Xiaocheng 2017/04/10 21:32:28 Could you set marker ranges directly, so that (at
38 #include "core/editing/markers/RenderedDocumentMarker.h" 40 #include "core/editing/markers/RenderedDocumentMarker.h"
39 #include "core/html/HTMLElement.h" 41 #include "core/html/HTMLElement.h"
40 #include "core/testing/DummyPageHolder.h" 42 #include "core/testing/DummyPageHolder.h"
41 #include "testing/gtest/include/gtest/gtest.h" 43 #include "testing/gtest/include/gtest/gtest.h"
42 #include "wtf/PassRefPtr.h" 44 #include "wtf/PassRefPtr.h"
43 #include "wtf/RefPtr.h" 45 #include "wtf/RefPtr.h"
44 #include <memory>
45 46
46 namespace blink { 47 namespace blink {
47 48
48 class DocumentMarkerControllerTest : public ::testing::Test { 49 class DocumentMarkerControllerTest : public ::testing::Test {
49 protected: 50 protected:
50 DocumentMarkerControllerTest() 51 DocumentMarkerControllerTest()
51 : dummy_page_holder_(DummyPageHolder::Create(IntSize(800, 600))) {} 52 : dummy_page_holder_(DummyPageHolder::Create(IntSize(800, 600))) {}
52 53
53 Document& GetDocument() const { return dummy_page_holder_->GetDocument(); } 54 Document& GetDocument() const { return dummy_page_holder_->GetDocument(); }
54 DocumentMarkerController& MarkerController() const { 55 DocumentMarkerController& MarkerController() const {
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 // Try to make active a marker that doesn't exist. 258 // Try to make active a marker that doesn't exist.
258 EXPECT_FALSE(MarkerController().SetMarkersActive(range, true)); 259 EXPECT_FALSE(MarkerController().SetMarkersActive(range, true));
259 260
260 // Add a marker and try it once more. 261 // Add a marker and try it once more.
261 MarkerController().AddTextMatchMarker(range, 262 MarkerController().AddTextMatchMarker(range,
262 DocumentMarker::MatchStatus::kInactive); 263 DocumentMarker::MatchStatus::kInactive);
263 EXPECT_EQ(1u, MarkerController().Markers().size()); 264 EXPECT_EQ(1u, MarkerController().Markers().size());
264 EXPECT_TRUE(MarkerController().SetMarkersActive(range, true)); 265 EXPECT_TRUE(MarkerController().SetMarkersActive(range, true));
265 } 266 }
266 267
268 TEST_F(DocumentMarkerControllerTest,
269 RemoveStartOfMarkerDoRemovePartiallyOverlapping) {
270 SetBodyInnerHTML("<b>abc</b>");
271 GetDocument().UpdateStyleAndLayout();
272 Element* b_element = ToElement(GetDocument().body()->FirstChild());
273
274 // Add marker under "abc"
275 EphemeralRange marker_range = PlainTextRange(0, 3).CreateRange(*b_element);
276 GetDocument().Markers().AddTextMatchMarker(
277 marker_range, DocumentMarker::MatchStatus::kInactive);
278
279 // Remove markers that overlap "a"
280 marker_range = PlainTextRange(0, 1).CreateRange(*b_element);
281 GetDocument().Markers().RemoveMarkers(
282 marker_range, DocumentMarker::AllMarkers(),
283 DocumentMarkerController::kRemovePartiallyOverlappingMarker);
284
285 EXPECT_EQ(0u, MarkerController().Markers().size());
286 }
287
288 TEST_F(DocumentMarkerControllerTest,
289 RemoveStartOfMarkerDontRemovePartiallyOverlapping) {
290 SetBodyInnerHTML("<b>abc</b>");
291 GetDocument().UpdateStyleAndLayout();
292 Element* b_element = ToElement(GetDocument().body()->FirstChild());
293
294 // Add marker under "abc"
295 EphemeralRange marker_range = PlainTextRange(0, 3).CreateRange(*b_element);
296 GetDocument().Markers().AddTextMatchMarker(
297 marker_range, DocumentMarker::MatchStatus::kInactive);
298
299 // Remove portion of marker that overlaps "a"
300 marker_range = PlainTextRange(0, 1).CreateRange(*b_element);
301 GetDocument().Markers().RemoveMarkers(
302 marker_range, DocumentMarker::AllMarkers(),
303 DocumentMarkerController::kDoNotRemovePartiallyOverlappingMarker);
304
305 EXPECT_EQ(1u, MarkerController().Markers().size());
306
307 EXPECT_EQ(1u, MarkerController().Markers()[0]->StartOffset());
308 EXPECT_EQ(3u, MarkerController().Markers()[0]->EndOffset());
309 }
310
311 TEST_F(DocumentMarkerControllerTest,
312 RemoveMiddleOfMarkerDoRemovePartiallyOverlapping) {
313 SetBodyInnerHTML("<b>abc</b>");
314 GetDocument().UpdateStyleAndLayout();
315 Element* b_element = ToElement(GetDocument().body()->FirstChild());
316
317 // Add marker under "abc"
318 EphemeralRange marker_range = PlainTextRange(0, 3).CreateRange(*b_element);
319 GetDocument().Markers().AddTextMatchMarker(
320 marker_range, DocumentMarker::MatchStatus::kInactive);
321
322 // Remove markers that overlap "b"
323 marker_range = PlainTextRange(1, 2).CreateRange(*b_element);
324 GetDocument().Markers().RemoveMarkers(
325 marker_range, DocumentMarker::AllMarkers(),
326 DocumentMarkerController::kRemovePartiallyOverlappingMarker);
327
328 EXPECT_EQ(0u, MarkerController().Markers().size());
329 }
330
331 TEST_F(DocumentMarkerControllerTest,
332 RemoveMiddleOfMarkerDontRemovePartiallyOverlapping) {
333 SetBodyInnerHTML("<b>abc</b>");
334 GetDocument().UpdateStyleAndLayout();
335 Element* b_element = ToElement(GetDocument().body()->FirstChild());
336
337 // Add marker under "abc"
338 EphemeralRange marker_range = PlainTextRange(0, 3).CreateRange(*b_element);
339 GetDocument().Markers().AddTextMatchMarker(
340 marker_range, DocumentMarker::MatchStatus::kInactive);
341
342 // Remove portion of marker that overlaps "b"
343 marker_range = PlainTextRange(1, 2).CreateRange(*b_element);
344 GetDocument().Markers().RemoveMarkers(
345 marker_range, DocumentMarker::AllMarkers(),
346 DocumentMarkerController::kDoNotRemovePartiallyOverlappingMarker);
347
348 EXPECT_EQ(2u, MarkerController().Markers().size());
349
350 EXPECT_EQ(0u, MarkerController().Markers()[0]->StartOffset());
351 EXPECT_EQ(1u, MarkerController().Markers()[0]->EndOffset());
352
353 EXPECT_EQ(2u, MarkerController().Markers()[1]->StartOffset());
354 EXPECT_EQ(3u, MarkerController().Markers()[1]->EndOffset());
355 }
356
357 TEST_F(DocumentMarkerControllerTest,
358 RemoveEndOfMarkerDoRemovePartiallyOverlapping) {
359 SetBodyInnerHTML("<b>abc</b>");
360 GetDocument().UpdateStyleAndLayout();
361 Element* b_element = ToElement(GetDocument().body()->FirstChild());
362
363 // Add marker under "abc"
364 EphemeralRange marker_range = PlainTextRange(0, 3).CreateRange(*b_element);
365 GetDocument().Markers().AddTextMatchMarker(
366 marker_range, DocumentMarker::MatchStatus::kInactive);
367
368 // Remove markers that overlap "c"
369 marker_range = PlainTextRange(2, 3).CreateRange(*b_element);
370 GetDocument().Markers().RemoveMarkers(
371 marker_range, DocumentMarker::AllMarkers(),
372 DocumentMarkerController::kRemovePartiallyOverlappingMarker);
373
374 EXPECT_EQ(0u, MarkerController().Markers().size());
375 }
376
377 TEST_F(DocumentMarkerControllerTest,
378 RemoveEndOfMarkerDontRemovePartiallyOverlapping) {
379 SetBodyInnerHTML("<b>abc</b>");
380 GetDocument().UpdateStyleAndLayout();
381 Element* b_element = ToElement(GetDocument().body()->FirstChild());
382
383 // Add marker under "abc"
384 EphemeralRange marker_range = PlainTextRange(0, 3).CreateRange(*b_element);
385 GetDocument().Markers().AddTextMatchMarker(
386 marker_range, DocumentMarker::MatchStatus::kInactive);
387
388 // Remove portion of marker that overlaps "c"
389 marker_range = PlainTextRange(2, 3).CreateRange(*b_element);
390 GetDocument().Markers().RemoveMarkers(
391 marker_range, DocumentMarker::AllMarkers(),
392 DocumentMarkerController::kDoNotRemovePartiallyOverlappingMarker);
393
394 EXPECT_EQ(1u, MarkerController().Markers().size());
395
396 EXPECT_EQ(0u, MarkerController().Markers()[0]->StartOffset());
397 EXPECT_EQ(2u, MarkerController().Markers()[0]->EndOffset());
398 }
399
267 } // namespace blink 400 } // namespace blink
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698