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/unsorted_document_marker_list_editor.h"
6 
7 #include "testing/gtest/include/gtest/gtest.h"
8 #include "third_party/blink/renderer/core/editing/markers/marker_test_utilities.h"
9 #include "third_party/blink/renderer/core/editing/markers/suggestion_marker.h"
10 #include "third_party/blink/renderer/core/editing/markers/suggestion_marker_list_impl.h"
11 #include "third_party/blink/renderer/core/editing/markers/suggestion_marker_properties.h"
12 #include "third_party/blink/renderer/platform/heap/persistent.h"
13 
14 namespace blink {
15 
16 class UnsortedDocumentMarkerListEditorTest : public testing::Test {
17  public:
UnsortedDocumentMarkerListEditorTest()18   UnsortedDocumentMarkerListEditorTest()
19       : marker_list_(
20             MakeGarbageCollected<HeapVector<Member<DocumentMarker>>>()) {}
21 
22  protected:
CreateMarker(unsigned start_offset,unsigned end_offset)23   DocumentMarker* CreateMarker(unsigned start_offset, unsigned end_offset) {
24     return MakeGarbageCollected<SuggestionMarker>(start_offset, end_offset,
25                                                   SuggestionMarkerProperties());
26   }
27 
28   Persistent<HeapVector<Member<DocumentMarker>>> marker_list_;
29 };
30 
TEST_F(UnsortedDocumentMarkerListEditorTest,MoveMarkers)31 TEST_F(UnsortedDocumentMarkerListEditorTest, MoveMarkers) {
32   marker_list_->push_back(CreateMarker(30, 40));
33   marker_list_->push_back(CreateMarker(0, 30));
34   marker_list_->push_back(CreateMarker(10, 40));
35   marker_list_->push_back(CreateMarker(0, 20));
36   marker_list_->push_back(CreateMarker(0, 40));
37   marker_list_->push_back(CreateMarker(20, 40));
38   marker_list_->push_back(CreateMarker(20, 30));
39   marker_list_->push_back(CreateMarker(0, 10));
40   marker_list_->push_back(CreateMarker(10, 30));
41   marker_list_->push_back(CreateMarker(10, 20));
42   marker_list_->push_back(CreateMarker(11, 21));
43 
44   DocumentMarkerList* dst_list =
45       MakeGarbageCollected<SuggestionMarkerListImpl>();
46   // The markers with start and end offset < 11 should be moved to dst_list.
47   // Markers that start before 11 and end at 11 or later should be removed.
48   // Markers that start at 11 or later should not be moved.
49   UnsortedDocumentMarkerListEditor::MoveMarkers(marker_list_, 11, dst_list);
50 
51   std::sort(marker_list_->begin(), marker_list_->end(), compare_markers);
52 
53   EXPECT_EQ(4u, marker_list_->size());
54 
55   EXPECT_EQ(11u, marker_list_->at(0)->StartOffset());
56   EXPECT_EQ(21u, marker_list_->at(0)->EndOffset());
57 
58   EXPECT_EQ(20u, marker_list_->at(1)->StartOffset());
59   EXPECT_EQ(30u, marker_list_->at(1)->EndOffset());
60 
61   EXPECT_EQ(20u, marker_list_->at(2)->StartOffset());
62   EXPECT_EQ(40u, marker_list_->at(2)->EndOffset());
63 
64   EXPECT_EQ(30u, marker_list_->at(3)->StartOffset());
65   EXPECT_EQ(40u, marker_list_->at(3)->EndOffset());
66 
67   DocumentMarkerVector dst_list_markers = dst_list->GetMarkers();
68   std::sort(dst_list_markers.begin(), dst_list_markers.end(), compare_markers);
69 
70   // Markers
71   EXPECT_EQ(1u, dst_list_markers.size());
72 
73   EXPECT_EQ(0u, dst_list_markers[0]->StartOffset());
74   EXPECT_EQ(10u, dst_list_markers[0]->EndOffset());
75 }
76 
TEST_F(UnsortedDocumentMarkerListEditorTest,RemoveMarkersEmptyList)77 TEST_F(UnsortedDocumentMarkerListEditorTest, RemoveMarkersEmptyList) {
78   EXPECT_FALSE(
79       UnsortedDocumentMarkerListEditor::RemoveMarkers(marker_list_, 0, 10));
80   EXPECT_EQ(0u, marker_list_->size());
81 }
82 
TEST_F(UnsortedDocumentMarkerListEditorTest,RemoveMarkersTouchingEndpoints)83 TEST_F(UnsortedDocumentMarkerListEditorTest, RemoveMarkersTouchingEndpoints) {
84   marker_list_->push_back(CreateMarker(30, 40));
85   marker_list_->push_back(CreateMarker(40, 50));
86   marker_list_->push_back(CreateMarker(10, 20));
87   marker_list_->push_back(CreateMarker(0, 10));
88   marker_list_->push_back(CreateMarker(20, 30));
89 
90   EXPECT_TRUE(
91       UnsortedDocumentMarkerListEditor::RemoveMarkers(marker_list_, 20, 10));
92 
93   std::sort(marker_list_->begin(), marker_list_->end(), compare_markers);
94 
95   EXPECT_EQ(4u, marker_list_->size());
96 
97   EXPECT_EQ(0u, marker_list_->at(0)->StartOffset());
98   EXPECT_EQ(10u, marker_list_->at(0)->EndOffset());
99 
100   EXPECT_EQ(10u, marker_list_->at(1)->StartOffset());
101   EXPECT_EQ(20u, marker_list_->at(1)->EndOffset());
102 
103   EXPECT_EQ(30u, marker_list_->at(2)->StartOffset());
104   EXPECT_EQ(40u, marker_list_->at(2)->EndOffset());
105 
106   EXPECT_EQ(40u, marker_list_->at(3)->StartOffset());
107   EXPECT_EQ(50u, marker_list_->at(3)->EndOffset());
108 }
109 
TEST_F(UnsortedDocumentMarkerListEditorTest,RemoveMarkersOneCharacterIntoInterior)110 TEST_F(UnsortedDocumentMarkerListEditorTest,
111        RemoveMarkersOneCharacterIntoInterior) {
112   marker_list_->push_back(CreateMarker(30, 40));
113   marker_list_->push_back(CreateMarker(40, 50));
114   marker_list_->push_back(CreateMarker(10, 20));
115   marker_list_->push_back(CreateMarker(0, 10));
116   marker_list_->push_back(CreateMarker(20, 30));
117 
118   EXPECT_TRUE(
119       UnsortedDocumentMarkerListEditor::RemoveMarkers(marker_list_, 19, 12));
120 
121   std::sort(marker_list_->begin(), marker_list_->end(), compare_markers);
122 
123   EXPECT_EQ(2u, marker_list_->size());
124 
125   EXPECT_EQ(0u, marker_list_->at(0)->StartOffset());
126   EXPECT_EQ(10u, marker_list_->at(0)->EndOffset());
127 
128   EXPECT_EQ(40u, marker_list_->at(1)->StartOffset());
129   EXPECT_EQ(50u, marker_list_->at(1)->EndOffset());
130 }
131 
TEST_F(UnsortedDocumentMarkerListEditorTest,ContentIndependentMarker_ReplaceStartOfMarker)132 TEST_F(UnsortedDocumentMarkerListEditorTest,
133        ContentIndependentMarker_ReplaceStartOfMarker) {
134   UnsortedDocumentMarkerListEditor::MarkerList markers;
135   markers.push_back(CreateMarker(0, 10));
136 
137   // Replace with shorter text
138   UnsortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 0,
139                                                                    5, 4);
140 
141   EXPECT_EQ(1u, markers.size());
142   EXPECT_EQ(0u, markers[0]->StartOffset());
143   EXPECT_EQ(9u, markers[0]->EndOffset());
144 
145   // Replace with longer text
146   UnsortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 0,
147                                                                    4, 5);
148 
149   EXPECT_EQ(1u, markers.size());
150   EXPECT_EQ(0u, markers[0]->StartOffset());
151   EXPECT_EQ(10u, markers[0]->EndOffset());
152 
153   // Replace with text of same length
154   UnsortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 0,
155                                                                    5, 5);
156 
157   EXPECT_EQ(1u, markers.size());
158   EXPECT_EQ(0u, markers[0]->StartOffset());
159   EXPECT_EQ(10u, markers[0]->EndOffset());
160 }
161 
TEST_F(UnsortedDocumentMarkerListEditorTest,ContentIndependentMarker_ReplaceContainsStartOfMarker)162 TEST_F(UnsortedDocumentMarkerListEditorTest,
163        ContentIndependentMarker_ReplaceContainsStartOfMarker) {
164   UnsortedDocumentMarkerListEditor::MarkerList markers;
165   markers.push_back(CreateMarker(5, 15));
166 
167   UnsortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 0,
168                                                                    10, 10);
169 
170   EXPECT_EQ(1u, markers.size());
171   EXPECT_EQ(10u, markers[0]->StartOffset());
172   EXPECT_EQ(15u, markers[0]->EndOffset());
173 }
174 
TEST_F(UnsortedDocumentMarkerListEditorTest,ContentIndependentMarker_ReplaceEndOfMarker)175 TEST_F(UnsortedDocumentMarkerListEditorTest,
176        ContentIndependentMarker_ReplaceEndOfMarker) {
177   UnsortedDocumentMarkerListEditor::MarkerList markers;
178   markers.push_back(CreateMarker(0, 10));
179 
180   // Replace with shorter text
181   UnsortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 5,
182                                                                    5, 4);
183 
184   EXPECT_EQ(1u, markers.size());
185   EXPECT_EQ(0u, markers[0]->StartOffset());
186   EXPECT_EQ(9u, markers[0]->EndOffset());
187 
188   // Replace with longer text
189   UnsortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 5,
190                                                                    4, 5);
191 
192   EXPECT_EQ(1u, markers.size());
193   EXPECT_EQ(0u, markers[0]->StartOffset());
194   EXPECT_EQ(10u, markers[0]->EndOffset());
195 
196   // Replace with text of same length
197   UnsortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 5,
198                                                                    5, 5);
199 
200   EXPECT_EQ(1u, markers.size());
201   EXPECT_EQ(0u, markers[0]->StartOffset());
202   EXPECT_EQ(10u, markers[0]->EndOffset());
203 }
204 
TEST_F(UnsortedDocumentMarkerListEditorTest,ContentIndependentMarker_ReplaceContainsEndOfMarker)205 TEST_F(UnsortedDocumentMarkerListEditorTest,
206        ContentIndependentMarker_ReplaceContainsEndOfMarker) {
207   UnsortedDocumentMarkerListEditor::MarkerList markers;
208   markers.push_back(CreateMarker(0, 10));
209 
210   UnsortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 5,
211                                                                    10, 10);
212 
213   EXPECT_EQ(1u, markers.size());
214   EXPECT_EQ(0u, markers[0]->StartOffset());
215   EXPECT_EQ(5u, markers[0]->EndOffset());
216 }
217 
TEST_F(UnsortedDocumentMarkerListEditorTest,ContentIndependentMarker_ReplaceEntireMarker)218 TEST_F(UnsortedDocumentMarkerListEditorTest,
219        ContentIndependentMarker_ReplaceEntireMarker) {
220   UnsortedDocumentMarkerListEditor::MarkerList markers;
221   markers.push_back(CreateMarker(0, 10));
222 
223   // Replace with shorter text
224   UnsortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 0,
225                                                                    10, 9);
226 
227   EXPECT_EQ(1u, markers.size());
228   EXPECT_EQ(0u, markers[0]->StartOffset());
229   EXPECT_EQ(9u, markers[0]->EndOffset());
230 
231   // Replace with longer text
232   UnsortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 0,
233                                                                    9, 10);
234 
235   EXPECT_EQ(1u, markers.size());
236   EXPECT_EQ(0u, markers[0]->StartOffset());
237   EXPECT_EQ(10u, markers[0]->EndOffset());
238 
239   // Replace with text of same length
240   UnsortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 0,
241                                                                    10, 10);
242 
243   EXPECT_EQ(1u, markers.size());
244   EXPECT_EQ(0u, markers[0]->StartOffset());
245   EXPECT_EQ(10u, markers[0]->EndOffset());
246 }
247 
TEST_F(UnsortedDocumentMarkerListEditorTest,ContentIndependentMarker_ReplaceTextWithMarkerAtBeginning)248 TEST_F(UnsortedDocumentMarkerListEditorTest,
249        ContentIndependentMarker_ReplaceTextWithMarkerAtBeginning) {
250   UnsortedDocumentMarkerListEditor::MarkerList markers;
251   markers.push_back(CreateMarker(0, 10));
252 
253   UnsortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 0,
254                                                                    15, 15);
255 
256   EXPECT_EQ(0u, markers.size());
257 }
258 
TEST_F(UnsortedDocumentMarkerListEditorTest,ContentIndependentMarker_ReplaceTextWithMarkerAtEnd)259 TEST_F(UnsortedDocumentMarkerListEditorTest,
260        ContentIndependentMarker_ReplaceTextWithMarkerAtEnd) {
261   UnsortedDocumentMarkerListEditor::MarkerList markers;
262   markers.push_back(CreateMarker(5, 15));
263 
264   UnsortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 0,
265                                                                    15, 15);
266 
267   EXPECT_EQ(0u, markers.size());
268 }
269 
TEST_F(UnsortedDocumentMarkerListEditorTest,ContentIndependentMarker_Deletions)270 TEST_F(UnsortedDocumentMarkerListEditorTest,
271        ContentIndependentMarker_Deletions) {
272   UnsortedDocumentMarkerListEditor::MarkerList markers;
273   markers.push_back(CreateMarker(0, 5));
274   markers.push_back(CreateMarker(5, 10));
275   markers.push_back(CreateMarker(10, 15));
276   markers.push_back(CreateMarker(15, 20));
277   markers.push_back(CreateMarker(20, 25));
278 
279   // Delete range containing the end of the second marker, the entire third
280   // marker, and the start of the fourth marker
281   UnsortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 8,
282                                                                    9, 0);
283 
284   EXPECT_EQ(4u, markers.size());
285 
286   EXPECT_EQ(0u, markers[0]->StartOffset());
287   EXPECT_EQ(5u, markers[0]->EndOffset());
288 
289   EXPECT_EQ(5u, markers[1]->StartOffset());
290   EXPECT_EQ(8u, markers[1]->EndOffset());
291 
292   EXPECT_EQ(8u, markers[2]->StartOffset());
293   EXPECT_EQ(11u, markers[2]->EndOffset());
294 
295   EXPECT_EQ(11u, markers[3]->StartOffset());
296   EXPECT_EQ(16u, markers[3]->EndOffset());
297 }
298 
TEST_F(UnsortedDocumentMarkerListEditorTest,ContentIndependentMarker_DeleteExactlyOnMarker)299 TEST_F(UnsortedDocumentMarkerListEditorTest,
300        ContentIndependentMarker_DeleteExactlyOnMarker) {
301   UnsortedDocumentMarkerListEditor::MarkerList markers;
302   markers.push_back(CreateMarker(0, 10));
303 
304   UnsortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 0,
305                                                                    10, 0);
306 
307   EXPECT_EQ(0u, markers.size());
308 }
309 
TEST_F(UnsortedDocumentMarkerListEditorTest,ContentIndependentMarker_InsertInMarkerInterior)310 TEST_F(UnsortedDocumentMarkerListEditorTest,
311        ContentIndependentMarker_InsertInMarkerInterior) {
312   UnsortedDocumentMarkerListEditor::MarkerList markers;
313   markers.push_back(CreateMarker(0, 5));
314   markers.push_back(CreateMarker(5, 10));
315   markers.push_back(CreateMarker(10, 15));
316 
317   // insert in middle of second marker
318   UnsortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 7,
319                                                                    0, 5);
320 
321   EXPECT_EQ(3u, markers.size());
322 
323   EXPECT_EQ(0u, markers[0]->StartOffset());
324   EXPECT_EQ(5u, markers[0]->EndOffset());
325 
326   EXPECT_EQ(5u, markers[1]->StartOffset());
327   EXPECT_EQ(15u, markers[1]->EndOffset());
328 
329   EXPECT_EQ(15u, markers[2]->StartOffset());
330   EXPECT_EQ(20u, markers[2]->EndOffset());
331 }
332 
TEST_F(UnsortedDocumentMarkerListEditorTest,ContentIndependentMarker_InsertBetweenMarkers)333 TEST_F(UnsortedDocumentMarkerListEditorTest,
334        ContentIndependentMarker_InsertBetweenMarkers) {
335   UnsortedDocumentMarkerListEditor::MarkerList markers;
336   markers.push_back(CreateMarker(0, 5));
337   markers.push_back(CreateMarker(5, 10));
338   markers.push_back(CreateMarker(10, 15));
339 
340   // insert before second marker
341   UnsortedDocumentMarkerListEditor::ShiftMarkersContentIndependent(&markers, 5,
342                                                                    0, 5);
343 
344   EXPECT_EQ(3u, markers.size());
345 
346   EXPECT_EQ(0u, markers[0]->StartOffset());
347   EXPECT_EQ(5u, markers[0]->EndOffset());
348 
349   EXPECT_EQ(10u, markers[1]->StartOffset());
350   EXPECT_EQ(15u, markers[1]->EndOffset());
351 
352   EXPECT_EQ(15u, markers[2]->StartOffset());
353   EXPECT_EQ(20u, markers[2]->EndOffset());
354 }
355 
TEST_F(UnsortedDocumentMarkerListEditorTest,FirstMarkerIntersectingRange_Empty)356 TEST_F(UnsortedDocumentMarkerListEditorTest,
357        FirstMarkerIntersectingRange_Empty) {
358   DocumentMarker* marker =
359       UnsortedDocumentMarkerListEditor::FirstMarkerIntersectingRange(
360           *marker_list_, 0, 10);
361   EXPECT_EQ(nullptr, marker);
362 }
363 
TEST_F(UnsortedDocumentMarkerListEditorTest,FirstMarkerIntersectingRange_RangeContainingNoMarkers)364 TEST_F(UnsortedDocumentMarkerListEditorTest,
365        FirstMarkerIntersectingRange_RangeContainingNoMarkers) {
366   UnsortedDocumentMarkerListEditor::MarkerList markers;
367   markers.push_back(CreateMarker(0, 5));
368   DocumentMarker* marker =
369       UnsortedDocumentMarkerListEditor::FirstMarkerIntersectingRange(markers, 5,
370                                                                      15);
371   EXPECT_EQ(nullptr, marker);
372 }
373 
TEST_F(UnsortedDocumentMarkerListEditorTest,FirstMarkerIntersectingRange_TouchingStart)374 TEST_F(UnsortedDocumentMarkerListEditorTest,
375        FirstMarkerIntersectingRange_TouchingStart) {
376   marker_list_->push_back(CreateMarker(1, 10));
377   marker_list_->push_back(CreateMarker(0, 10));
378 
379   DocumentMarker* marker =
380       UnsortedDocumentMarkerListEditor::FirstMarkerIntersectingRange(
381           *marker_list_, 0, 1);
382 
383   EXPECT_NE(nullptr, marker);
384   EXPECT_EQ(0u, marker->StartOffset());
385   EXPECT_EQ(10u, marker->EndOffset());
386 }
387 
TEST_F(UnsortedDocumentMarkerListEditorTest,FirstMarkerIntersectingRange_TouchingEnd)388 TEST_F(UnsortedDocumentMarkerListEditorTest,
389        FirstMarkerIntersectingRange_TouchingEnd) {
390   marker_list_->push_back(CreateMarker(0, 9));
391   marker_list_->push_back(CreateMarker(0, 10));
392 
393   DocumentMarker* marker =
394       UnsortedDocumentMarkerListEditor::FirstMarkerIntersectingRange(
395           *marker_list_, 9, 10);
396 
397   EXPECT_NE(nullptr, marker);
398   EXPECT_EQ(0u, marker->StartOffset());
399   EXPECT_EQ(10u, marker->EndOffset());
400 }
401 
TEST_F(UnsortedDocumentMarkerListEditorTest,FirstMarkerIntersectingRange_CollapsedRange)402 TEST_F(UnsortedDocumentMarkerListEditorTest,
403        FirstMarkerIntersectingRange_CollapsedRange) {
404   marker_list_->push_back(CreateMarker(5, 10));
405 
406   DocumentMarker* marker =
407       UnsortedDocumentMarkerListEditor::FirstMarkerIntersectingRange(
408           *marker_list_, 7, 7);
409 
410   EXPECT_NE(nullptr, marker);
411   EXPECT_EQ(5u, marker->StartOffset());
412   EXPECT_EQ(10u, marker->EndOffset());
413 }
414 
TEST_F(UnsortedDocumentMarkerListEditorTest,MarkersIntersectingRange_RangeContainingNoMarkers)415 TEST_F(UnsortedDocumentMarkerListEditorTest,
416        MarkersIntersectingRange_RangeContainingNoMarkers) {
417   UnsortedDocumentMarkerListEditor::MarkerList markers;
418   markers.push_back(CreateMarker(0, 10));
419 
420   UnsortedDocumentMarkerListEditor::MarkerList markers_intersecting_range =
421       UnsortedDocumentMarkerListEditor::MarkersIntersectingRange(markers, 10,
422                                                                  15);
423   EXPECT_EQ(0u, markers_intersecting_range.size());
424 }
425 
TEST_F(UnsortedDocumentMarkerListEditorTest,MarkersIntersectingRange_TouchingStart)426 TEST_F(UnsortedDocumentMarkerListEditorTest,
427        MarkersIntersectingRange_TouchingStart) {
428   marker_list_->push_back(CreateMarker(0, 9));
429   marker_list_->push_back(CreateMarker(1, 9));
430   marker_list_->push_back(CreateMarker(0, 10));
431   marker_list_->push_back(CreateMarker(1, 10));
432 
433   UnsortedDocumentMarkerListEditor::MarkerList markers_intersecting_range =
434       UnsortedDocumentMarkerListEditor::MarkersIntersectingRange(*marker_list_,
435                                                                  0, 1);
436 
437   EXPECT_EQ(2u, markers_intersecting_range.size());
438 
439   EXPECT_EQ(0u, markers_intersecting_range[0]->StartOffset());
440   EXPECT_EQ(9u, markers_intersecting_range[0]->EndOffset());
441 
442   EXPECT_EQ(0u, markers_intersecting_range[1]->StartOffset());
443   EXPECT_EQ(10u, markers_intersecting_range[1]->EndOffset());
444 }
445 
TEST_F(UnsortedDocumentMarkerListEditorTest,MarkersIntersectingRange_TouchingEnd)446 TEST_F(UnsortedDocumentMarkerListEditorTest,
447        MarkersIntersectingRange_TouchingEnd) {
448   marker_list_->push_back(CreateMarker(0, 9));
449   marker_list_->push_back(CreateMarker(1, 9));
450   marker_list_->push_back(CreateMarker(0, 10));
451   marker_list_->push_back(CreateMarker(1, 10));
452 
453   UnsortedDocumentMarkerListEditor::MarkerList markers_intersecting_range =
454       UnsortedDocumentMarkerListEditor::MarkersIntersectingRange(*marker_list_,
455                                                                  9, 10);
456 
457   EXPECT_EQ(2u, markers_intersecting_range.size());
458 
459   EXPECT_EQ(0u, markers_intersecting_range[0]->StartOffset());
460   EXPECT_EQ(10u, markers_intersecting_range[0]->EndOffset());
461 
462   EXPECT_EQ(1u, markers_intersecting_range[1]->StartOffset());
463   EXPECT_EQ(10u, markers_intersecting_range[1]->EndOffset());
464 }
465 
TEST_F(UnsortedDocumentMarkerListEditorTest,MarkersIntersectingRange_CollapsedRange)466 TEST_F(UnsortedDocumentMarkerListEditorTest,
467        MarkersIntersectingRange_CollapsedRange) {
468   UnsortedDocumentMarkerListEditor::MarkerList markers;
469   markers.push_back(CreateMarker(5, 10));
470 
471   UnsortedDocumentMarkerListEditor::MarkerList markers_intersecting_range =
472       UnsortedDocumentMarkerListEditor::MarkersIntersectingRange(markers, 7, 7);
473   EXPECT_EQ(1u, markers_intersecting_range.size());
474 
475   EXPECT_EQ(5u, markers_intersecting_range[0]->StartOffset());
476   EXPECT_EQ(10u, markers_intersecting_range[0]->EndOffset());
477 }
478 
479 }  // namespace blink
480