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

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

Issue 2773343003: Add DocumentMarkerList in preparation for DocumentMarkerController refactor (Closed)
Patch Set: Add getShiftedMarkerPosition() test cases Created 3 years, 9 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
(Empty)
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 "core/editing/markers/DocumentMarkerList.h"
6
7 #include "platform/heap/Handle.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9
10 namespace blink {
11
12 class DocumentMarkerListForTesting : public DocumentMarkerList {
13 public:
14 DocumentMarkerListForTesting() {}
15
16 DocumentMarker::MarkerType allowedMarkerType() const final {
17 return DocumentMarker::Composition;
18 }
19
20 protected:
21 bool markerListIsSorted() const final { return false; }
22 };
23
24 class SortedDocumentMarkerListForTesting : public DocumentMarkerList {
25 public:
26 SortedDocumentMarkerListForTesting() {}
27
28 DocumentMarker::MarkerType allowedMarkerType() const final {
29 return DocumentMarker::Composition;
30 }
31
32 protected:
33 bool markerListIsSorted() const final { return true; }
34 };
35
36 class DocumentMarkerListTest : public ::testing::Test {
37 protected:
38 DocumentMarkerListTest()
39 : m_markerList(new DocumentMarkerListForTesting()),
40 m_sortedMarkerList(new SortedDocumentMarkerListForTesting()) {}
41
42 DocumentMarker* createMarker(unsigned startOffset, unsigned endOffset) {
43 return new DocumentMarker(startOffset, endOffset, Color::black, false,
44 Color::black);
45 }
46
47 Persistent<DocumentMarkerListForTesting> m_markerList;
48 Persistent<SortedDocumentMarkerListForTesting> m_sortedMarkerList;
49 };
50
51 TEST_F(DocumentMarkerListTest,
52 RemoveMarkersSortedDoRemovePartiallyOverlapping) {
Xiaocheng 2017/03/27 22:38:20 Could you break it into independent test cases?
53 m_sortedMarkerList->add(createMarker(0, 5));
54 m_sortedMarkerList->add(createMarker(10, 15));
55 m_sortedMarkerList->add(createMarker(20, 25));
56 m_sortedMarkerList->add(createMarker(30, 35));
57 m_sortedMarkerList->add(createMarker(40, 45));
58
59 EXPECT_EQ(5u, m_sortedMarkerList->size());
60
61 // test no-op remove
62 EXPECT_EQ(DocumentMarkerList::DidNotRemoveMarker,
63 m_sortedMarkerList->removeMarkers(100, 100, true));
64 EXPECT_EQ(5u, m_sortedMarkerList->size());
65
66 // remove middle marker
67 EXPECT_EQ(DocumentMarkerList::DidRemoveMarker,
68 m_sortedMarkerList->removeMarkers(20, 2, true));
69 EXPECT_EQ(4u, m_sortedMarkerList->size());
70
71 EXPECT_EQ(0u, m_sortedMarkerList->at(0)->startOffset());
72 EXPECT_EQ(5u, m_sortedMarkerList->at(0)->endOffset());
73
74 EXPECT_EQ(10u, m_sortedMarkerList->at(1)->startOffset());
75 EXPECT_EQ(15u, m_sortedMarkerList->at(1)->endOffset());
76
77 EXPECT_EQ(30u, m_sortedMarkerList->at(2)->startOffset());
78 EXPECT_EQ(35u, m_sortedMarkerList->at(2)->endOffset());
79
80 EXPECT_EQ(40u, m_sortedMarkerList->at(3)->startOffset());
81 EXPECT_EQ(45u, m_sortedMarkerList->at(3)->endOffset());
82
83 // remove middle two markers
84 EXPECT_EQ(DocumentMarkerList::DidRemoveMarker,
85 m_sortedMarkerList->removeMarkers(13, 19, true));
86 EXPECT_EQ(2u, m_sortedMarkerList->size());
87
88 EXPECT_EQ(0u, m_sortedMarkerList->at(0)->startOffset());
89 EXPECT_EQ(5u, m_sortedMarkerList->at(0)->endOffset());
90
91 EXPECT_EQ(40u, m_sortedMarkerList->at(1)->startOffset());
92 EXPECT_EQ(45u, m_sortedMarkerList->at(1)->endOffset());
93 }
94
95 TEST_F(DocumentMarkerListTest,
96 RemoveMarkersUnsortedDoRemovePartiallyOverlapping) {
Xiaocheng 2017/03/27 22:38:20 Could you break it into independent test cases?
97 m_markerList->add(createMarker(40, 45));
98 m_markerList->add(createMarker(30, 35));
99 m_markerList->add(createMarker(20, 25));
100 m_markerList->add(createMarker(10, 15));
101 m_markerList->add(createMarker(0, 5));
102
103 EXPECT_EQ(5u, m_markerList->size());
104
105 // test no-op remove
106 EXPECT_EQ(DocumentMarkerList::DidNotRemoveMarker,
107 m_markerList->removeMarkers(100, 100, true));
108 EXPECT_EQ(5u, m_markerList->size());
109
110 // remove middle marker
111 EXPECT_EQ(DocumentMarkerList::DidRemoveMarker,
112 m_markerList->removeMarkers(20, 2, true));
113 EXPECT_EQ(4u, m_markerList->size());
114
115 EXPECT_EQ(40u, m_markerList->at(0)->startOffset());
116 EXPECT_EQ(45u, m_markerList->at(0)->endOffset());
117
118 EXPECT_EQ(30u, m_markerList->at(1)->startOffset());
119 EXPECT_EQ(35u, m_markerList->at(1)->endOffset());
120
121 EXPECT_EQ(10u, m_markerList->at(2)->startOffset());
122 EXPECT_EQ(15u, m_markerList->at(2)->endOffset());
123
124 EXPECT_EQ(0u, m_markerList->at(3)->startOffset());
125 EXPECT_EQ(5u, m_markerList->at(3)->endOffset());
126
127 // remove middle two markers
128 EXPECT_EQ(DocumentMarkerList::DidRemoveMarker,
129 m_markerList->removeMarkers(13, 19, true));
130 EXPECT_EQ(2u, m_markerList->size());
131
132 EXPECT_EQ(40u, m_markerList->at(0)->startOffset());
133 EXPECT_EQ(45u, m_markerList->at(0)->endOffset());
134
135 EXPECT_EQ(0u, m_markerList->at(1)->startOffset());
136 EXPECT_EQ(5u, m_markerList->at(1)->endOffset());
137 }
138
139 TEST_F(DocumentMarkerListTest,
140 RemoveMarkersSortedDontRemovePartiallyOverlapping) {
Xiaocheng 2017/03/27 22:38:20 Could you break it into independent test cases?
141 m_sortedMarkerList->add(createMarker(0, 5));
142 m_sortedMarkerList->add(createMarker(10, 15));
143 m_sortedMarkerList->add(createMarker(20, 25));
144 m_sortedMarkerList->add(createMarker(30, 35));
145 m_sortedMarkerList->add(createMarker(40, 45));
146
147 EXPECT_EQ(5u, m_sortedMarkerList->size());
148
149 // test no-op remove
150 EXPECT_EQ(DocumentMarkerList::DidNotRemoveMarker,
151 m_sortedMarkerList->removeMarkers(100, 100, false));
152 EXPECT_EQ(5u, m_sortedMarkerList->size());
153
154 // remove chunk from beginning of middle marker
155 EXPECT_EQ(DocumentMarkerList::DidRemoveMarker,
156 m_sortedMarkerList->removeMarkers(20, 2, false));
157 EXPECT_EQ(5u, m_sortedMarkerList->size());
158
159 EXPECT_EQ(0u, m_sortedMarkerList->at(0)->startOffset());
160 EXPECT_EQ(5u, m_sortedMarkerList->at(0)->endOffset());
161
162 EXPECT_EQ(10u, m_sortedMarkerList->at(1)->startOffset());
163 EXPECT_EQ(15u, m_sortedMarkerList->at(1)->endOffset());
164
165 EXPECT_EQ(22u, m_sortedMarkerList->at(2)->startOffset());
166 EXPECT_EQ(25u, m_sortedMarkerList->at(2)->endOffset());
167
168 EXPECT_EQ(30u, m_sortedMarkerList->at(3)->startOffset());
169 EXPECT_EQ(35u, m_sortedMarkerList->at(3)->endOffset());
170
171 EXPECT_EQ(40u, m_sortedMarkerList->at(4)->startOffset());
172 EXPECT_EQ(45u, m_sortedMarkerList->at(4)->endOffset());
173
174 // remove chunk from end of second marker
175 EXPECT_EQ(DocumentMarkerList::DidRemoveMarker,
176 m_sortedMarkerList->removeMarkers(13, 2, false));
177 EXPECT_EQ(5u, m_sortedMarkerList->size());
178
179 EXPECT_EQ(0u, m_sortedMarkerList->at(0)->startOffset());
180 EXPECT_EQ(5u, m_sortedMarkerList->at(0)->endOffset());
181
182 EXPECT_EQ(10u, m_sortedMarkerList->at(1)->startOffset());
183 EXPECT_EQ(13u, m_sortedMarkerList->at(1)->endOffset());
184
185 EXPECT_EQ(22u, m_sortedMarkerList->at(2)->startOffset());
186 EXPECT_EQ(25u, m_sortedMarkerList->at(2)->endOffset());
187
188 EXPECT_EQ(30u, m_sortedMarkerList->at(3)->startOffset());
189 EXPECT_EQ(35u, m_sortedMarkerList->at(3)->endOffset());
190
191 EXPECT_EQ(40u, m_sortedMarkerList->at(4)->startOffset());
192 EXPECT_EQ(45u, m_sortedMarkerList->at(4)->endOffset());
193
194 // remove chunk from middle of fourth marker
195 EXPECT_EQ(DocumentMarkerList::DidRemoveMarker,
196 m_sortedMarkerList->removeMarkers(31, 1, false));
197 EXPECT_EQ(6u, m_sortedMarkerList->size());
198
199 EXPECT_EQ(0u, m_sortedMarkerList->at(0)->startOffset());
200 EXPECT_EQ(5u, m_sortedMarkerList->at(0)->endOffset());
201
202 EXPECT_EQ(10u, m_sortedMarkerList->at(1)->startOffset());
203 EXPECT_EQ(13u, m_sortedMarkerList->at(1)->endOffset());
204
205 EXPECT_EQ(22u, m_sortedMarkerList->at(2)->startOffset());
206 EXPECT_EQ(25u, m_sortedMarkerList->at(2)->endOffset());
207
208 EXPECT_EQ(30u, m_sortedMarkerList->at(3)->startOffset());
209 EXPECT_EQ(31u, m_sortedMarkerList->at(3)->endOffset());
210
211 EXPECT_EQ(32u, m_sortedMarkerList->at(4)->startOffset());
212 EXPECT_EQ(35u, m_sortedMarkerList->at(4)->endOffset());
213
214 EXPECT_EQ(40u, m_sortedMarkerList->at(5)->startOffset());
215 EXPECT_EQ(45u, m_sortedMarkerList->at(5)->endOffset());
216
217 // remove middle four markers
218 EXPECT_EQ(DocumentMarkerList::DidRemoveMarker,
219 m_sortedMarkerList->removeMarkers(10, 25, false));
220 EXPECT_EQ(2u, m_sortedMarkerList->size());
221
222 EXPECT_EQ(0u, m_sortedMarkerList->at(0)->startOffset());
223 EXPECT_EQ(5u, m_sortedMarkerList->at(0)->endOffset());
224
225 EXPECT_EQ(40u, m_sortedMarkerList->at(1)->startOffset());
226 EXPECT_EQ(45u, m_sortedMarkerList->at(1)->endOffset());
227 }
228
229 TEST_F(DocumentMarkerListTest,
230 RemoveMarkersUnsortedDontRemovePartiallyOverlapping) {
Xiaocheng 2017/03/27 22:38:20 Could you break it into independent test cases?
231 m_markerList->add(createMarker(40, 45));
232 m_markerList->add(createMarker(30, 35));
233 m_markerList->add(createMarker(20, 25));
234 m_markerList->add(createMarker(10, 15));
235 m_markerList->add(createMarker(0, 5));
236
237 EXPECT_EQ(5u, m_markerList->size());
238
239 // test no-op remove
240 EXPECT_EQ(DocumentMarkerList::DidNotRemoveMarker,
241 m_markerList->removeMarkers(100, 100, false));
242 EXPECT_EQ(5u, m_markerList->size());
243
244 // remove chunk from beginning of middle marker
245 EXPECT_EQ(DocumentMarkerList::DidRemoveMarker,
246 m_markerList->removeMarkers(20, 2, false));
247 EXPECT_EQ(5u, m_markerList->size());
248
249 EXPECT_EQ(40u, m_markerList->at(0)->startOffset());
250 EXPECT_EQ(45u, m_markerList->at(0)->endOffset());
251
252 EXPECT_EQ(30u, m_markerList->at(1)->startOffset());
253 EXPECT_EQ(35u, m_markerList->at(1)->endOffset());
254
255 EXPECT_EQ(10u, m_markerList->at(2)->startOffset());
256 EXPECT_EQ(15u, m_markerList->at(2)->endOffset());
257
258 EXPECT_EQ(0u, m_markerList->at(3)->startOffset());
259 EXPECT_EQ(5u, m_markerList->at(3)->endOffset());
260
261 EXPECT_EQ(22u, m_markerList->at(4)->startOffset());
262 EXPECT_EQ(25u, m_markerList->at(4)->endOffset());
263
264 // remove chunk from end of middle marker
265 EXPECT_EQ(DocumentMarkerList::DidRemoveMarker,
266 m_markerList->removeMarkers(13, 2, false));
267 EXPECT_EQ(5u, m_markerList->size());
268
269 EXPECT_EQ(40u, m_markerList->at(0)->startOffset());
270 EXPECT_EQ(45u, m_markerList->at(0)->endOffset());
271
272 EXPECT_EQ(30u, m_markerList->at(1)->startOffset());
273 EXPECT_EQ(35u, m_markerList->at(1)->endOffset());
274
275 EXPECT_EQ(0u, m_markerList->at(2)->startOffset());
276 EXPECT_EQ(5u, m_markerList->at(2)->endOffset());
277
278 EXPECT_EQ(22u, m_markerList->at(3)->startOffset());
279 EXPECT_EQ(25u, m_markerList->at(3)->endOffset());
280
281 EXPECT_EQ(10u, m_markerList->at(4)->startOffset());
282 EXPECT_EQ(13u, m_markerList->at(4)->endOffset());
283
284 // remove chunk from middle of second marker
285 EXPECT_EQ(DocumentMarkerList::DidRemoveMarker,
286 m_markerList->removeMarkers(31, 1, false));
287 EXPECT_EQ(6u, m_markerList->size());
288
289 EXPECT_EQ(40u, m_markerList->at(0)->startOffset());
290 EXPECT_EQ(45u, m_markerList->at(0)->endOffset());
291
292 EXPECT_EQ(0u, m_markerList->at(1)->startOffset());
293 EXPECT_EQ(5u, m_markerList->at(1)->endOffset());
294
295 EXPECT_EQ(22u, m_markerList->at(2)->startOffset());
296 EXPECT_EQ(25u, m_markerList->at(2)->endOffset());
297
298 EXPECT_EQ(10u, m_markerList->at(3)->startOffset());
299 EXPECT_EQ(13u, m_markerList->at(3)->endOffset());
300
301 EXPECT_EQ(30u, m_markerList->at(4)->startOffset());
302 EXPECT_EQ(31u, m_markerList->at(4)->endOffset());
303
304 EXPECT_EQ(32u, m_markerList->at(5)->startOffset());
305 EXPECT_EQ(35u, m_markerList->at(5)->endOffset());
306
307 // remove all markers except 0 to 5 and 40 to 45
308 EXPECT_EQ(DocumentMarkerList::DidRemoveMarker,
309 m_markerList->removeMarkers(5, 35, false));
310 EXPECT_EQ(2u, m_markerList->size());
311
312 EXPECT_EQ(40u, m_markerList->at(0)->startOffset());
313 EXPECT_EQ(45u, m_markerList->at(0)->endOffset());
314
315 EXPECT_EQ(0u, m_markerList->at(1)->startOffset());
316 EXPECT_EQ(5u, m_markerList->at(1)->endOffset());
317 }
318
319 TEST_F(DocumentMarkerListTest, ShiftMarkersNoChange) {
320 m_markerList->add(createMarker(0, 5));
321
322 EXPECT_EQ(false, m_markerList->shiftMarkers(10, 0, 5));
Xiaocheng 2017/03/27 22:38:20 The result is an enum.
323 EXPECT_EQ(1u, m_markerList->size());
324
325 EXPECT_EQ(0u, m_markerList->at(0)->startOffset());
326 EXPECT_EQ(5u, m_markerList->at(0)->endOffset());
327 }
328
329 TEST_F(DocumentMarkerListTest, ShiftMarkersMarkerShifted) {
330 m_markerList->add(createMarker(0, 5));
331
332 EXPECT_EQ(true, m_markerList->shiftMarkers(0, 0, 5));
Xiaocheng 2017/03/27 22:38:20 The result is an enum.
333 EXPECT_EQ(1u, m_markerList->size());
334
335 EXPECT_EQ(5u, m_markerList->at(0)->startOffset());
336 EXPECT_EQ(10u, m_markerList->at(0)->endOffset());
337 }
338
339 TEST_F(DocumentMarkerListTest, ShiftMarkersMarkerRemoved) {
340 m_markerList->add(createMarker(0, 5));
341
342 EXPECT_EQ(true, m_markerList->shiftMarkers(0, 5, 0));
343 EXPECT_EQ(0u, m_markerList->size());
344 }
345
346 TEST_F(DocumentMarkerListTest, CopyMarkers) {
347 m_markerList->add(createMarker(1, 2));
348 m_markerList->add(createMarker(3, 4));
349 m_markerList->add(createMarker(5, 6));
350 m_markerList->add(createMarker(7, 8));
351
352 DocumentMarkerListForTesting* dstList = new DocumentMarkerListForTesting();
353
354 // Copy all markers that intersect the range 2 through 5, i.e. the first three
355 m_markerList->copyMarkers(2, 4, dstList, -1);
Xiaocheng 2017/03/27 22:38:20 Please check return value.
356
357 EXPECT_EQ(3u, dstList->size());
358
359 // Markers are clamped to the range 2 through 5, so the first and third
360 // markers are now length 0
361 // TODO(rlanday): should we change this behavior to remove the zero-length
362 // markers?
363 EXPECT_EQ(1u, dstList->at(0)->startOffset());
364 EXPECT_EQ(1u, dstList->at(0)->endOffset());
365
366 EXPECT_EQ(2u, dstList->at(1)->startOffset());
367 EXPECT_EQ(3u, dstList->at(1)->endOffset());
368
369 EXPECT_EQ(4u, dstList->at(2)->startOffset());
370 EXPECT_EQ(4u, dstList->at(2)->endOffset());
371 }
372
373 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698