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

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

Issue 2806683002: Don't ever split DocumentMarkers on remove (Closed)
Patch Set: Rebase (no manual changes) 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
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 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 // Try to make active a marker that doesn't exist. 257 // Try to make active a marker that doesn't exist.
258 EXPECT_FALSE(MarkerController().SetMarkersActive(range, true)); 258 EXPECT_FALSE(MarkerController().SetMarkersActive(range, true));
259 259
260 // Add a marker and try it once more. 260 // Add a marker and try it once more.
261 MarkerController().AddTextMatchMarker(range, 261 MarkerController().AddTextMatchMarker(range,
262 DocumentMarker::MatchStatus::kInactive); 262 DocumentMarker::MatchStatus::kInactive);
263 EXPECT_EQ(1u, MarkerController().Markers().size()); 263 EXPECT_EQ(1u, MarkerController().Markers().size());
264 EXPECT_TRUE(MarkerController().SetMarkersActive(range, true)); 264 EXPECT_TRUE(MarkerController().SetMarkersActive(range, true));
265 } 265 }
266 266
267 TEST_F(DocumentMarkerControllerTest, 267 TEST_F(DocumentMarkerControllerTest, RemoveStartOfMarker) {
268 RemoveStartOfMarkerDoRemovePartiallyOverlapping) {
269 SetBodyInnerHTML("<b>abc</b>"); 268 SetBodyInnerHTML("<b>abc</b>");
270 GetDocument().UpdateStyleAndLayout(); 269 GetDocument().UpdateStyleAndLayout();
271 Node* b_element = GetDocument().body()->FirstChild(); 270 Node* b_element = GetDocument().body()->FirstChild();
272 Node* text = b_element->firstChild(); 271 Node* text = b_element->firstChild();
273 272
274 // Add marker under "abc" 273 // Add marker under "abc"
275 EphemeralRange marker_range = 274 EphemeralRange marker_range =
276 EphemeralRange(Position(text, 0), Position(text, 3)); 275 EphemeralRange(Position(text, 0), Position(text, 3));
277 GetDocument().Markers().AddTextMatchMarker( 276 GetDocument().Markers().AddTextMatchMarker(
278 marker_range, DocumentMarker::MatchStatus::kInactive); 277 marker_range, DocumentMarker::MatchStatus::kInactive);
279 278
280 // Remove markers that overlap "a" 279 // Remove markers that overlap "a"
281 marker_range = EphemeralRange(Position(text, 0), Position(text, 1)); 280 marker_range = EphemeralRange(Position(text, 0), Position(text, 1));
282 GetDocument().Markers().RemoveMarkers( 281 GetDocument().Markers().RemoveMarkers(marker_range,
283 marker_range, DocumentMarker::AllMarkers(), 282 DocumentMarker::AllMarkers());
284 DocumentMarkerController::kRemovePartiallyOverlappingMarker);
285 283
286 EXPECT_EQ(0u, MarkerController().Markers().size()); 284 EXPECT_EQ(0u, MarkerController().Markers().size());
287 } 285 }
288 286
289 TEST_F(DocumentMarkerControllerTest, 287 TEST_F(DocumentMarkerControllerTest, RemoveMiddleOfMarker) {
290 RemoveStartOfMarkerDontRemovePartiallyOverlapping) {
291 SetBodyInnerHTML("<b>abc</b>"); 288 SetBodyInnerHTML("<b>abc</b>");
292 GetDocument().UpdateStyleAndLayout(); 289 GetDocument().UpdateStyleAndLayout();
293 Node* b_element = GetDocument().body()->FirstChild(); 290 Node* b_element = GetDocument().body()->FirstChild();
294 Node* text = b_element->firstChild();
295
296 // Add marker under "abc"
297 EphemeralRange marker_range =
298 EphemeralRange(Position(text, 0), Position(text, 3));
299 GetDocument().Markers().AddTextMatchMarker(
300 marker_range, DocumentMarker::MatchStatus::kInactive);
301
302 // Remove portion of marker that overlaps "a"
303 marker_range = EphemeralRange(Position(text, 0), Position(text, 1));
304 GetDocument().Markers().RemoveMarkers(
305 marker_range, DocumentMarker::AllMarkers(),
306 DocumentMarkerController::kDoNotRemovePartiallyOverlappingMarker);
307
308 EXPECT_EQ(1u, MarkerController().Markers().size());
309
310 EXPECT_EQ(1u, MarkerController().Markers()[0]->StartOffset());
311 EXPECT_EQ(3u, MarkerController().Markers()[0]->EndOffset());
312 }
313
314 TEST_F(DocumentMarkerControllerTest,
315 RemoveMiddleOfMarkerDoRemovePartiallyOverlapping) {
316 SetBodyInnerHTML("<b>abc</b>");
317 GetDocument().UpdateStyleAndLayout();
318 Node* b_element = GetDocument().body()->FirstChild();
319 Node* text = b_element->firstChild(); 291 Node* text = b_element->firstChild();
320 292
321 // Add marker under "abc" 293 // Add marker under "abc"
322 EphemeralRange marker_range = 294 EphemeralRange marker_range =
323 EphemeralRange(Position(text, 0), Position(text, 3)); 295 EphemeralRange(Position(text, 0), Position(text, 3));
324 GetDocument().Markers().AddTextMatchMarker( 296 GetDocument().Markers().AddTextMatchMarker(
325 marker_range, DocumentMarker::MatchStatus::kInactive); 297 marker_range, DocumentMarker::MatchStatus::kInactive);
326 298
327 // Remove markers that overlap "b" 299 // Remove markers that overlap "b"
328 marker_range = EphemeralRange(Position(text, 1), Position(text, 2)); 300 marker_range = EphemeralRange(Position(text, 1), Position(text, 2));
329 GetDocument().Markers().RemoveMarkers( 301 GetDocument().Markers().RemoveMarkers(marker_range,
330 marker_range, DocumentMarker::AllMarkers(), 302 DocumentMarker::AllMarkers());
331 DocumentMarkerController::kRemovePartiallyOverlappingMarker);
332 303
333 EXPECT_EQ(0u, MarkerController().Markers().size()); 304 EXPECT_EQ(0u, MarkerController().Markers().size());
334 } 305 }
335 306
336 TEST_F(DocumentMarkerControllerTest, 307 TEST_F(DocumentMarkerControllerTest, RemoveEndOfMarker) {
337 RemoveMiddleOfMarkerDontRemovePartiallyOverlapping) {
338 SetBodyInnerHTML("<b>abc</b>"); 308 SetBodyInnerHTML("<b>abc</b>");
339 GetDocument().UpdateStyleAndLayout(); 309 GetDocument().UpdateStyleAndLayout();
340 Node* b_element = GetDocument().body()->FirstChild(); 310 Node* b_element = GetDocument().body()->FirstChild();
341 Node* text = b_element->firstChild();
342
343 // Add marker under "abc"
344 EphemeralRange marker_range =
345 EphemeralRange(Position(text, 0), Position(text, 3));
346 GetDocument().Markers().AddTextMatchMarker(
347 marker_range, DocumentMarker::MatchStatus::kInactive);
348
349 // Remove portion of marker that overlaps "b"
350 marker_range = EphemeralRange(Position(text, 1), Position(text, 2));
351 GetDocument().Markers().RemoveMarkers(
352 marker_range, DocumentMarker::AllMarkers(),
353 DocumentMarkerController::kDoNotRemovePartiallyOverlappingMarker);
354
355 EXPECT_EQ(2u, MarkerController().Markers().size());
356
357 EXPECT_EQ(0u, MarkerController().Markers()[0]->StartOffset());
358 EXPECT_EQ(1u, MarkerController().Markers()[0]->EndOffset());
359
360 EXPECT_EQ(2u, MarkerController().Markers()[1]->StartOffset());
361 EXPECT_EQ(3u, MarkerController().Markers()[1]->EndOffset());
362 }
363
364 TEST_F(DocumentMarkerControllerTest,
365 RemoveEndOfMarkerDoRemovePartiallyOverlapping) {
366 SetBodyInnerHTML("<b>abc</b>");
367 GetDocument().UpdateStyleAndLayout();
368 Node* b_element = GetDocument().body()->FirstChild();
369 Node* text = b_element->firstChild(); 311 Node* text = b_element->firstChild();
370 312
371 // Add marker under "abc" 313 // Add marker under "abc"
372 EphemeralRange marker_range = 314 EphemeralRange marker_range =
373 EphemeralRange(Position(text, 0), Position(text, 3)); 315 EphemeralRange(Position(text, 0), Position(text, 3));
374 GetDocument().Markers().AddTextMatchMarker( 316 GetDocument().Markers().AddTextMatchMarker(
375 marker_range, DocumentMarker::MatchStatus::kInactive); 317 marker_range, DocumentMarker::MatchStatus::kInactive);
376 318
377 // Remove markers that overlap "c" 319 // Remove markers that overlap "c"
378 marker_range = EphemeralRange(Position(text, 2), Position(text, 3)); 320 marker_range = EphemeralRange(Position(text, 2), Position(text, 3));
379 GetDocument().Markers().RemoveMarkers( 321 GetDocument().Markers().RemoveMarkers(marker_range,
380 marker_range, DocumentMarker::AllMarkers(), 322 DocumentMarker::AllMarkers());
381 DocumentMarkerController::kRemovePartiallyOverlappingMarker);
382 323
383 EXPECT_EQ(0u, MarkerController().Markers().size()); 324 EXPECT_EQ(0u, MarkerController().Markers().size());
384 } 325 }
385 326
386 TEST_F(DocumentMarkerControllerTest,
387 RemoveEndOfMarkerDontRemovePartiallyOverlapping) {
388 SetBodyInnerHTML("<b>abc</b>");
389 GetDocument().UpdateStyleAndLayout();
390 Node* b_element = GetDocument().body()->FirstChild();
391 Node* text = b_element->firstChild();
392
393 // Add marker under "abc"
394 EphemeralRange marker_range =
395 EphemeralRange(Position(text, 0), Position(text, 3));
396 GetDocument().Markers().AddTextMatchMarker(
397 marker_range, DocumentMarker::MatchStatus::kInactive);
398
399 // Remove portion of marker that overlaps "c"
400 marker_range = EphemeralRange(Position(text, 2), Position(text, 3));
401 GetDocument().Markers().RemoveMarkers(
402 marker_range, DocumentMarker::AllMarkers(),
403 DocumentMarkerController::kDoNotRemovePartiallyOverlappingMarker);
404
405 EXPECT_EQ(1u, MarkerController().Markers().size());
406
407 EXPECT_EQ(0u, MarkerController().Markers()[0]->StartOffset());
408 EXPECT_EQ(2u, MarkerController().Markers()[0]->EndOffset());
409 }
410
411 } // namespace blink 327 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698