1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "third_party/blink/renderer/core/editing/markers/sorted_document_marker_list_editor.h"
6
7 #include "testing/gtest/include/gtest/gtest.h"
8 #include "third_party/blink/renderer/core/editing/markers/text_match_marker.h"
9
10 namespace blink {
11
12 class SortedDocumentMarkerListEditorTest : public testing::Test {
13 protected:
CreateMarker(unsigned startOffset,unsigned endOffset)14 DocumentMarker* CreateMarker(unsigned startOffset, unsigned endOffset) {
15 return MakeGarbageCollected<TextMatchMarker>(
16 startOffset, endOffset, TextMatchMarker::MatchStatus::kInactive);
17 }
18 };
19
TEST_F(SortedDocumentMarkerListEditorTest,RemoveMarkersEmptyList)20 TEST_F(SortedDocumentMarkerListEditorTest, RemoveMarkersEmptyList) {
21 SortedDocumentMarkerListEditor::MarkerList markers;
22 SortedDocumentMarkerListEditor::RemoveMarkers(&markers, 0, 10);
23 EXPECT_EQ(0u, markers.size());
24 }
25
TEST_F(SortedDocumentMarkerListEditorTest,RemoveMarkersTouchingEndpoints)26 TEST_F(SortedDocumentMarkerListEditorTest, RemoveMarkersTouchingEndpoints) {
27 SortedDocumentMarkerListEditor::MarkerList markers;
28 markers.push_back(CreateMarker(0, 10));
29 markers.push_back(CreateMarker(10, 20));
30 markers.push_back(CreateMarker(20, 30));
31
32 SortedDocumentMarkerListEditor::RemoveMarkers(&markers, 10, 10);
33
34 EXPECT_EQ(2u, markers.size());
35
36 EXPECT_EQ(0u, markers[0]->StartOffset());
37 EXPECT_EQ(10u, markers[0]->EndOffset());
38
39 EXPECT_EQ(20u, markers[1]->StartOffset());
40 EXPECT_EQ(30u, markers[1]->EndOffset());
41 }
42
TEST_F(SortedDocumentMarkerListEditorTest,RemoveMarkersOneCharacterIntoInterior)43 TEST_F(SortedDocumentMarkerListEditorTest,
44 RemoveMarkersOneCharacterIntoInterior) {
45 SortedDocumentMarkerListEditor::MarkerList markers;
46 markers.push_back(CreateMarker(0, 10));
47 markers.push_back(CreateMarker(10, 20));
48 markers.push_back(CreateMarker(20, 30));
49
50 SortedDocumentMarkerListEditor::RemoveMarkers(&markers, 9, 12);
51
52 EXPECT_EQ(0u, markers.size());
53 }
54
TEST_F(SortedDocumentMarkerListEditorTest,ContentDependentMarker_ReplaceStartOfMarker)55 TEST_F(SortedDocumentMarkerListEditorTest,
56 ContentDependentMarker_ReplaceStartOfMarker) {
57 SortedDocumentMarkerListEditor::MarkerList markers;
58 markers.push_back(CreateMarker(0, 10));
59
60 SortedDocumentMarkerListEditor::ShiftMarkersContentDependent(&markers, 0, 5,
61 5);
62
63 EXPECT_EQ(0u, markers.size());
64 }
65
TEST_F(SortedDocumentMarkerListEditorTest,ContentIndependentMarker_ReplaceStartOfMarker)66 TEST_F(SortedDocumentMarkerListEditorTest,
67 ContentIndependentMarker_ReplaceStartOfMarker) {
68 SortedDocumentMarkerListEditor::MarkerList markers;
69 markers.push_back(CreateMarker(0, 10));
70
71 // Replace with shorter text
72 SortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 0, 5,
73 4);
74
75 EXPECT_EQ(1u, markers.size());
76 EXPECT_EQ(0u, markers[0]->StartOffset());
77 EXPECT_EQ(9u, markers[0]->EndOffset());
78
79 // Replace with longer text
80 SortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 0, 4,
81 5);
82
83 EXPECT_EQ(1u, markers.size());
84 EXPECT_EQ(0u, markers[0]->StartOffset());
85 EXPECT_EQ(10u, markers[0]->EndOffset());
86
87 // Replace with text of same length
88 SortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 0, 5,
89 5);
90
91 EXPECT_EQ(1u, markers.size());
92 EXPECT_EQ(0u, markers[0]->StartOffset());
93 EXPECT_EQ(10u, markers[0]->EndOffset());
94 }
95
TEST_F(SortedDocumentMarkerListEditorTest,ContentDependentMarker_ReplaceContainsStartOfMarker)96 TEST_F(SortedDocumentMarkerListEditorTest,
97 ContentDependentMarker_ReplaceContainsStartOfMarker) {
98 SortedDocumentMarkerListEditor::MarkerList markers;
99 markers.push_back(CreateMarker(5, 15));
100
101 SortedDocumentMarkerListEditor::ShiftMarkersContentDependent(&markers, 0, 10,
102 10);
103
104 EXPECT_EQ(0u, markers.size());
105 }
106
TEST_F(SortedDocumentMarkerListEditorTest,ContentIndependentMarker_ReplaceContainsStartOfMarker)107 TEST_F(SortedDocumentMarkerListEditorTest,
108 ContentIndependentMarker_ReplaceContainsStartOfMarker) {
109 SortedDocumentMarkerListEditor::MarkerList markers;
110 markers.push_back(CreateMarker(5, 15));
111
112 SortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 0,
113 10, 10);
114
115 EXPECT_EQ(1u, markers.size());
116 EXPECT_EQ(10u, markers[0]->StartOffset());
117 EXPECT_EQ(15u, markers[0]->EndOffset());
118 }
119
TEST_F(SortedDocumentMarkerListEditorTest,ContentDependentMarker_ReplaceEndOfMarker)120 TEST_F(SortedDocumentMarkerListEditorTest,
121 ContentDependentMarker_ReplaceEndOfMarker) {
122 SortedDocumentMarkerListEditor::MarkerList markers;
123 markers.push_back(CreateMarker(0, 10));
124
125 SortedDocumentMarkerListEditor::ShiftMarkersContentDependent(&markers, 5, 5,
126 5);
127
128 EXPECT_EQ(0u, markers.size());
129 }
130
TEST_F(SortedDocumentMarkerListEditorTest,ContentIndependentMarker_ReplaceEndOfMarker)131 TEST_F(SortedDocumentMarkerListEditorTest,
132 ContentIndependentMarker_ReplaceEndOfMarker) {
133 SortedDocumentMarkerListEditor::MarkerList markers;
134 markers.push_back(CreateMarker(0, 10));
135
136 // Replace with shorter text
137 SortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 5, 5,
138 4);
139
140 EXPECT_EQ(1u, markers.size());
141 EXPECT_EQ(0u, markers[0]->StartOffset());
142 EXPECT_EQ(9u, markers[0]->EndOffset());
143
144 // Replace with longer text
145 SortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 5, 4,
146 5);
147
148 EXPECT_EQ(1u, markers.size());
149 EXPECT_EQ(0u, markers[0]->StartOffset());
150 EXPECT_EQ(10u, markers[0]->EndOffset());
151
152 // Replace with text of same length
153 SortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 5, 5,
154 5);
155
156 EXPECT_EQ(1u, markers.size());
157 EXPECT_EQ(0u, markers[0]->StartOffset());
158 EXPECT_EQ(10u, markers[0]->EndOffset());
159 }
160
TEST_F(SortedDocumentMarkerListEditorTest,ContentDependentMarker_ReplaceContainsEndOfMarker)161 TEST_F(SortedDocumentMarkerListEditorTest,
162 ContentDependentMarker_ReplaceContainsEndOfMarker) {
163 SortedDocumentMarkerListEditor::MarkerList markers;
164 markers.push_back(CreateMarker(0, 10));
165
166 SortedDocumentMarkerListEditor::ShiftMarkersContentDependent(&markers, 5, 10,
167 10);
168
169 EXPECT_EQ(0u, markers.size());
170 }
171
TEST_F(SortedDocumentMarkerListEditorTest,ContentIndependentMarker_ReplaceContainsEndOfMarker)172 TEST_F(SortedDocumentMarkerListEditorTest,
173 ContentIndependentMarker_ReplaceContainsEndOfMarker) {
174 SortedDocumentMarkerListEditor::MarkerList markers;
175 markers.push_back(CreateMarker(0, 10));
176
177 SortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 5,
178 10, 10);
179
180 EXPECT_EQ(1u, markers.size());
181 EXPECT_EQ(0u, markers[0]->StartOffset());
182 EXPECT_EQ(5u, markers[0]->EndOffset());
183 }
184
TEST_F(SortedDocumentMarkerListEditorTest,ContentDependentMarker_ReplaceEntireMarker)185 TEST_F(SortedDocumentMarkerListEditorTest,
186 ContentDependentMarker_ReplaceEntireMarker) {
187 SortedDocumentMarkerListEditor::MarkerList markers;
188 markers.push_back(CreateMarker(0, 10));
189
190 SortedDocumentMarkerListEditor::ShiftMarkersContentDependent(&markers, 0, 10,
191 10);
192
193 EXPECT_EQ(0u, markers.size());
194 }
195
TEST_F(SortedDocumentMarkerListEditorTest,ContentIndependentMarker_ReplaceEntireMarker)196 TEST_F(SortedDocumentMarkerListEditorTest,
197 ContentIndependentMarker_ReplaceEntireMarker) {
198 SortedDocumentMarkerListEditor::MarkerList markers;
199 markers.push_back(CreateMarker(0, 10));
200
201 // Replace with shorter text
202 SortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 0,
203 10, 9);
204
205 EXPECT_EQ(1u, markers.size());
206 EXPECT_EQ(0u, markers[0]->StartOffset());
207 EXPECT_EQ(9u, markers[0]->EndOffset());
208
209 // Replace with longer text
210 SortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 0, 9,
211 10);
212
213 EXPECT_EQ(1u, markers.size());
214 EXPECT_EQ(0u, markers[0]->StartOffset());
215 EXPECT_EQ(10u, markers[0]->EndOffset());
216
217 // Replace with text of same length
218 SortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 0,
219 10, 10);
220
221 EXPECT_EQ(1u, markers.size());
222 EXPECT_EQ(0u, markers[0]->StartOffset());
223 EXPECT_EQ(10u, markers[0]->EndOffset());
224 }
225
TEST_F(SortedDocumentMarkerListEditorTest,ContentDependentMarker_ReplaceTextWithMarkerAtBeginning)226 TEST_F(SortedDocumentMarkerListEditorTest,
227 ContentDependentMarker_ReplaceTextWithMarkerAtBeginning) {
228 SortedDocumentMarkerListEditor::MarkerList markers;
229 markers.push_back(CreateMarker(0, 10));
230
231 SortedDocumentMarkerListEditor::ShiftMarkersContentDependent(&markers, 0, 15,
232 15);
233
234 EXPECT_EQ(0u, markers.size());
235 }
236
TEST_F(SortedDocumentMarkerListEditorTest,ContentIndependentMarker_ReplaceTextWithMarkerAtBeginning)237 TEST_F(SortedDocumentMarkerListEditorTest,
238 ContentIndependentMarker_ReplaceTextWithMarkerAtBeginning) {
239 SortedDocumentMarkerListEditor::MarkerList markers;
240 markers.push_back(CreateMarker(0, 10));
241
242 SortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 0,
243 15, 15);
244
245 EXPECT_EQ(0u, markers.size());
246 }
247
TEST_F(SortedDocumentMarkerListEditorTest,ContentDependentMarker_ReplaceTextWithMarkerAtEnd)248 TEST_F(SortedDocumentMarkerListEditorTest,
249 ContentDependentMarker_ReplaceTextWithMarkerAtEnd) {
250 SortedDocumentMarkerListEditor::MarkerList markers;
251 markers.push_back(CreateMarker(5, 15));
252
253 SortedDocumentMarkerListEditor::ShiftMarkersContentDependent(&markers, 0, 15,
254 15);
255
256 EXPECT_EQ(0u, markers.size());
257 }
258
TEST_F(SortedDocumentMarkerListEditorTest,ContentIndependentMarker_ReplaceTextWithMarkerAtEnd)259 TEST_F(SortedDocumentMarkerListEditorTest,
260 ContentIndependentMarker_ReplaceTextWithMarkerAtEnd) {
261 SortedDocumentMarkerListEditor::MarkerList markers;
262 markers.push_back(CreateMarker(5, 15));
263
264 SortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 0,
265 15, 15);
266
267 EXPECT_EQ(0u, markers.size());
268 }
269
TEST_F(SortedDocumentMarkerListEditorTest,ContentDependentMarker_Deletions)270 TEST_F(SortedDocumentMarkerListEditorTest, ContentDependentMarker_Deletions) {
271 SortedDocumentMarkerListEditor::MarkerList markers;
272 markers.push_back(CreateMarker(0, 5));
273 markers.push_back(CreateMarker(5, 10));
274 markers.push_back(CreateMarker(10, 15));
275 markers.push_back(CreateMarker(15, 20));
276 markers.push_back(CreateMarker(20, 25));
277
278 // Delete range containing the end of the second marker, the entire third
279 // marker, and the start of the fourth marker
280 SortedDocumentMarkerListEditor::ShiftMarkersContentDependent(&markers, 8, 9,
281 0);
282
283 EXPECT_EQ(2u, markers.size());
284
285 EXPECT_EQ(0u, markers[0]->StartOffset());
286 EXPECT_EQ(5u, markers[0]->EndOffset());
287
288 EXPECT_EQ(11u, markers[1]->StartOffset());
289 EXPECT_EQ(16u, markers[1]->EndOffset());
290 }
291
TEST_F(SortedDocumentMarkerListEditorTest,ContentIndependentMarker_Deletions)292 TEST_F(SortedDocumentMarkerListEditorTest, ContentIndependentMarker_Deletions) {
293 SortedDocumentMarkerListEditor::MarkerList markers;
294 markers.push_back(CreateMarker(0, 5));
295 markers.push_back(CreateMarker(5, 10));
296 markers.push_back(CreateMarker(10, 15));
297 markers.push_back(CreateMarker(15, 20));
298 markers.push_back(CreateMarker(20, 25));
299
300 // Delete range containing the end of the second marker, the entire third
301 // marker, and the start of the fourth marker
302 SortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 8, 9,
303 0);
304
305 EXPECT_EQ(4u, markers.size());
306
307 EXPECT_EQ(0u, markers[0]->StartOffset());
308 EXPECT_EQ(5u, markers[0]->EndOffset());
309
310 EXPECT_EQ(5u, markers[1]->StartOffset());
311 EXPECT_EQ(8u, markers[1]->EndOffset());
312
313 EXPECT_EQ(8u, markers[2]->StartOffset());
314 EXPECT_EQ(11u, markers[2]->EndOffset());
315
316 EXPECT_EQ(11u, markers[3]->StartOffset());
317 EXPECT_EQ(16u, markers[3]->EndOffset());
318 }
319
TEST_F(SortedDocumentMarkerListEditorTest,ContentDependentMarker_DeleteExactlyOnMarker)320 TEST_F(SortedDocumentMarkerListEditorTest,
321 ContentDependentMarker_DeleteExactlyOnMarker) {
322 SortedDocumentMarkerListEditor::MarkerList markers;
323 markers.push_back(CreateMarker(0, 10));
324
325 SortedDocumentMarkerListEditor::ShiftMarkersContentDependent(&markers, 0, 10,
326 0);
327
328 EXPECT_EQ(0u, markers.size());
329 }
330
TEST_F(SortedDocumentMarkerListEditorTest,ContentIndependentMarker_DeleteExactlyOnMarker)331 TEST_F(SortedDocumentMarkerListEditorTest,
332 ContentIndependentMarker_DeleteExactlyOnMarker) {
333 SortedDocumentMarkerListEditor::MarkerList markers;
334 markers.push_back(CreateMarker(0, 10));
335
336 SortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 0,
337 10, 0);
338
339 EXPECT_EQ(0u, markers.size());
340 }
341
TEST_F(SortedDocumentMarkerListEditorTest,ContentDependentMarker_InsertInMarkerInterior)342 TEST_F(SortedDocumentMarkerListEditorTest,
343 ContentDependentMarker_InsertInMarkerInterior) {
344 SortedDocumentMarkerListEditor::MarkerList markers;
345 markers.push_back(CreateMarker(0, 5));
346 markers.push_back(CreateMarker(5, 10));
347 markers.push_back(CreateMarker(10, 15));
348
349 // insert in middle of second marker
350 SortedDocumentMarkerListEditor::ShiftMarkersContentDependent(&markers, 7, 0,
351 5);
352
353 EXPECT_EQ(2u, markers.size());
354
355 EXPECT_EQ(0u, markers[0]->StartOffset());
356 EXPECT_EQ(5u, markers[0]->EndOffset());
357
358 EXPECT_EQ(15u, markers[1]->StartOffset());
359 EXPECT_EQ(20u, markers[1]->EndOffset());
360 }
361
TEST_F(SortedDocumentMarkerListEditorTest,ContentIndependentMarker_InsertInMarkerInterior)362 TEST_F(SortedDocumentMarkerListEditorTest,
363 ContentIndependentMarker_InsertInMarkerInterior) {
364 SortedDocumentMarkerListEditor::MarkerList markers;
365 markers.push_back(CreateMarker(0, 5));
366 markers.push_back(CreateMarker(5, 10));
367 markers.push_back(CreateMarker(10, 15));
368
369 // insert in middle of second marker
370 SortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 7, 0,
371 5);
372
373 EXPECT_EQ(3u, markers.size());
374
375 EXPECT_EQ(0u, markers[0]->StartOffset());
376 EXPECT_EQ(5u, markers[0]->EndOffset());
377
378 EXPECT_EQ(5u, markers[1]->StartOffset());
379 EXPECT_EQ(15u, markers[1]->EndOffset());
380
381 EXPECT_EQ(15u, markers[2]->StartOffset());
382 EXPECT_EQ(20u, markers[2]->EndOffset());
383 }
384
TEST_F(SortedDocumentMarkerListEditorTest,ContentDependentMarker_InsertBetweenMarkers)385 TEST_F(SortedDocumentMarkerListEditorTest,
386 ContentDependentMarker_InsertBetweenMarkers) {
387 SortedDocumentMarkerListEditor::MarkerList markers;
388 markers.push_back(CreateMarker(0, 5));
389 markers.push_back(CreateMarker(5, 10));
390 markers.push_back(CreateMarker(10, 15));
391
392 // insert before second marker
393 SortedDocumentMarkerListEditor::ShiftMarkersContentDependent(&markers, 5, 0,
394 5);
395
396 EXPECT_EQ(3u, markers.size());
397
398 EXPECT_EQ(0u, markers[0]->StartOffset());
399 EXPECT_EQ(5u, markers[0]->EndOffset());
400
401 EXPECT_EQ(10u, markers[1]->StartOffset());
402 EXPECT_EQ(15u, markers[1]->EndOffset());
403
404 EXPECT_EQ(15u, markers[2]->StartOffset());
405 EXPECT_EQ(20u, markers[2]->EndOffset());
406 }
407
TEST_F(SortedDocumentMarkerListEditorTest,ContentIndependentMarker_InsertBetweenMarkers)408 TEST_F(SortedDocumentMarkerListEditorTest,
409 ContentIndependentMarker_InsertBetweenMarkers) {
410 SortedDocumentMarkerListEditor::MarkerList markers;
411 markers.push_back(CreateMarker(0, 5));
412 markers.push_back(CreateMarker(5, 10));
413 markers.push_back(CreateMarker(10, 15));
414
415 // insert before second marker
416 SortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 5, 0,
417 5);
418
419 EXPECT_EQ(3u, markers.size());
420
421 EXPECT_EQ(0u, markers[0]->StartOffset());
422 EXPECT_EQ(5u, markers[0]->EndOffset());
423
424 EXPECT_EQ(10u, markers[1]->StartOffset());
425 EXPECT_EQ(15u, markers[1]->EndOffset());
426
427 EXPECT_EQ(15u, markers[2]->StartOffset());
428 EXPECT_EQ(20u, markers[2]->EndOffset());
429 }
430
TEST_F(SortedDocumentMarkerListEditorTest,FirstMarkerIntersectingRange_Empty)431 TEST_F(SortedDocumentMarkerListEditorTest, FirstMarkerIntersectingRange_Empty) {
432 SortedDocumentMarkerListEditor::MarkerList markers;
433 markers.push_back(CreateMarker(0, 5));
434
435 DocumentMarker* marker =
436 SortedDocumentMarkerListEditor::FirstMarkerIntersectingRange(markers, 10,
437 15);
438 EXPECT_EQ(nullptr, marker);
439 }
440
TEST_F(SortedDocumentMarkerListEditorTest,FirstMarkerIntersectingRange_TouchingAfter)441 TEST_F(SortedDocumentMarkerListEditorTest,
442 FirstMarkerIntersectingRange_TouchingAfter) {
443 SortedDocumentMarkerListEditor::MarkerList markers;
444 markers.push_back(CreateMarker(0, 5));
445
446 DocumentMarker* marker =
447 SortedDocumentMarkerListEditor::FirstMarkerIntersectingRange(markers, 5,
448 10);
449 EXPECT_EQ(nullptr, marker);
450 }
451
TEST_F(SortedDocumentMarkerListEditorTest,FirstMarkerIntersectingRange_TouchingBefore)452 TEST_F(SortedDocumentMarkerListEditorTest,
453 FirstMarkerIntersectingRange_TouchingBefore) {
454 SortedDocumentMarkerListEditor::MarkerList markers;
455 markers.push_back(CreateMarker(5, 10));
456
457 DocumentMarker* marker =
458 SortedDocumentMarkerListEditor::FirstMarkerIntersectingRange(markers, 0,
459 5);
460 EXPECT_EQ(nullptr, marker);
461 }
462
TEST_F(SortedDocumentMarkerListEditorTest,FirstMarkerIntersectingRange_IntersectingAfter)463 TEST_F(SortedDocumentMarkerListEditorTest,
464 FirstMarkerIntersectingRange_IntersectingAfter) {
465 SortedDocumentMarkerListEditor::MarkerList markers;
466 markers.push_back(CreateMarker(5, 10));
467
468 DocumentMarker* marker =
469 SortedDocumentMarkerListEditor::FirstMarkerIntersectingRange(markers, 0,
470 6);
471 EXPECT_NE(nullptr, marker);
472
473 EXPECT_EQ(5u, marker->StartOffset());
474 EXPECT_EQ(10u, marker->EndOffset());
475 }
476
TEST_F(SortedDocumentMarkerListEditorTest,FirstMarkerIntersectingRange_IntersectingBefore)477 TEST_F(SortedDocumentMarkerListEditorTest,
478 FirstMarkerIntersectingRange_IntersectingBefore) {
479 SortedDocumentMarkerListEditor::MarkerList markers;
480 markers.push_back(CreateMarker(5, 10));
481
482 DocumentMarker* marker =
483 SortedDocumentMarkerListEditor::FirstMarkerIntersectingRange(markers, 9,
484 15);
485 EXPECT_NE(nullptr, marker);
486
487 EXPECT_EQ(5u, marker->StartOffset());
488 EXPECT_EQ(10u, marker->EndOffset());
489 }
490
TEST_F(SortedDocumentMarkerListEditorTest,FirstMarkerIntersectingRange_MultipleMarkers)491 TEST_F(SortedDocumentMarkerListEditorTest,
492 FirstMarkerIntersectingRange_MultipleMarkers) {
493 SortedDocumentMarkerListEditor::MarkerList markers;
494 markers.push_back(CreateMarker(0, 5));
495 markers.push_back(CreateMarker(5, 10));
496 markers.push_back(CreateMarker(10, 15));
497 markers.push_back(CreateMarker(15, 20));
498 markers.push_back(CreateMarker(20, 25));
499
500 DocumentMarker* marker =
501 SortedDocumentMarkerListEditor::FirstMarkerIntersectingRange(markers, 7,
502 17);
503 EXPECT_NE(nullptr, marker);
504
505 EXPECT_EQ(5u, marker->StartOffset());
506 EXPECT_EQ(10u, marker->EndOffset());
507 }
508
TEST_F(SortedDocumentMarkerListEditorTest,MarkersIntersectingRange_Empty)509 TEST_F(SortedDocumentMarkerListEditorTest, MarkersIntersectingRange_Empty) {
510 SortedDocumentMarkerListEditor::MarkerList markers;
511 markers.push_back(CreateMarker(0, 5));
512
513 SortedDocumentMarkerListEditor::MarkerList markers_intersecting_range =
514 SortedDocumentMarkerListEditor::MarkersIntersectingRange(markers, 10, 15);
515 EXPECT_EQ(0u, markers_intersecting_range.size());
516 }
517
TEST_F(SortedDocumentMarkerListEditorTest,MarkersIntersectingRange_TouchingAfter)518 TEST_F(SortedDocumentMarkerListEditorTest,
519 MarkersIntersectingRange_TouchingAfter) {
520 SortedDocumentMarkerListEditor::MarkerList markers;
521 markers.push_back(CreateMarker(0, 5));
522
523 SortedDocumentMarkerListEditor::MarkerList markers_intersecting_range =
524 SortedDocumentMarkerListEditor::MarkersIntersectingRange(markers, 5, 10);
525 EXPECT_EQ(0u, markers_intersecting_range.size());
526 }
527
TEST_F(SortedDocumentMarkerListEditorTest,MarkersIntersectingRange_TouchingBefore)528 TEST_F(SortedDocumentMarkerListEditorTest,
529 MarkersIntersectingRange_TouchingBefore) {
530 SortedDocumentMarkerListEditor::MarkerList markers;
531 markers.push_back(CreateMarker(5, 10));
532
533 SortedDocumentMarkerListEditor::MarkerList markers_intersecting_range =
534 SortedDocumentMarkerListEditor::MarkersIntersectingRange(markers, 0, 5);
535 EXPECT_EQ(0u, markers_intersecting_range.size());
536 }
537
TEST_F(SortedDocumentMarkerListEditorTest,MarkersIntersectingRange_IntersectingAfter)538 TEST_F(SortedDocumentMarkerListEditorTest,
539 MarkersIntersectingRange_IntersectingAfter) {
540 SortedDocumentMarkerListEditor::MarkerList markers;
541 markers.push_back(CreateMarker(5, 10));
542
543 SortedDocumentMarkerListEditor::MarkerList markers_intersecting_range =
544 SortedDocumentMarkerListEditor::MarkersIntersectingRange(markers, 0, 6);
545 EXPECT_EQ(1u, markers_intersecting_range.size());
546
547 EXPECT_EQ(5u, markers_intersecting_range[0]->StartOffset());
548 EXPECT_EQ(10u, markers_intersecting_range[0]->EndOffset());
549 }
550
TEST_F(SortedDocumentMarkerListEditorTest,MarkersIntersectingRange_IntersectingBefore)551 TEST_F(SortedDocumentMarkerListEditorTest,
552 MarkersIntersectingRange_IntersectingBefore) {
553 SortedDocumentMarkerListEditor::MarkerList markers;
554 markers.push_back(CreateMarker(5, 10));
555
556 SortedDocumentMarkerListEditor::MarkerList markers_intersecting_range =
557 SortedDocumentMarkerListEditor::MarkersIntersectingRange(markers, 9, 15);
558 EXPECT_EQ(1u, markers_intersecting_range.size());
559
560 EXPECT_EQ(5u, markers_intersecting_range[0]->StartOffset());
561 EXPECT_EQ(10u, markers_intersecting_range[0]->EndOffset());
562 }
563
TEST_F(SortedDocumentMarkerListEditorTest,MarkersIntersectingRange_CollapsedRange)564 TEST_F(SortedDocumentMarkerListEditorTest,
565 MarkersIntersectingRange_CollapsedRange) {
566 SortedDocumentMarkerListEditor::MarkerList markers;
567 markers.push_back(CreateMarker(5, 10));
568
569 SortedDocumentMarkerListEditor::MarkerList markers_intersecting_range =
570 SortedDocumentMarkerListEditor::MarkersIntersectingRange(markers, 7, 7);
571 EXPECT_EQ(1u, markers_intersecting_range.size());
572
573 EXPECT_EQ(5u, markers_intersecting_range[0]->StartOffset());
574 EXPECT_EQ(10u, markers_intersecting_range[0]->EndOffset());
575 }
576
TEST_F(SortedDocumentMarkerListEditorTest,MarkersIntersectingRange_MultipleMarkers)577 TEST_F(SortedDocumentMarkerListEditorTest,
578 MarkersIntersectingRange_MultipleMarkers) {
579 SortedDocumentMarkerListEditor::MarkerList markers;
580 markers.push_back(CreateMarker(0, 5));
581 markers.push_back(CreateMarker(5, 10));
582 markers.push_back(CreateMarker(10, 15));
583 markers.push_back(CreateMarker(15, 20));
584 markers.push_back(CreateMarker(20, 25));
585
586 SortedDocumentMarkerListEditor::MarkerList markers_intersecting_range =
587 SortedDocumentMarkerListEditor::MarkersIntersectingRange(markers, 7, 17);
588 EXPECT_EQ(3u, markers_intersecting_range.size());
589
590 EXPECT_EQ(5u, markers_intersecting_range[0]->StartOffset());
591 EXPECT_EQ(10u, markers_intersecting_range[0]->EndOffset());
592
593 EXPECT_EQ(10u, markers_intersecting_range[1]->StartOffset());
594 EXPECT_EQ(15u, markers_intersecting_range[1]->EndOffset());
595
596 EXPECT_EQ(15u, markers_intersecting_range[2]->StartOffset());
597 EXPECT_EQ(20u, markers_intersecting_range[2]->EndOffset());
598 }
599
600 } // namespace blink
601