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