Chromium Code Reviews| OLD | NEW |
|---|---|
| (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 { | |
|
Xiaocheng
2017/03/25 00:05:35
This is not dummy enough. Let's have:
class DMLFo
| |
| 13 public: | |
| 14 DocumentMarkerListForTesting() : m_markersAreSorted(true) {} | |
| 15 | |
| 16 DocumentMarker::MarkerType allowedMarkerType() const final { | |
| 17 return DocumentMarker::Composition; | |
| 18 } | |
| 19 | |
| 20 void push_back(DocumentMarker* marker) final { | |
| 21 if (!m_markers.isEmpty() && | |
| 22 m_markers.back()->endOffset() > marker->startOffset()) | |
| 23 m_markersAreSorted = false; | |
| 24 | |
| 25 m_markers.push_back(marker); | |
| 26 } | |
| 27 | |
| 28 void clear() final { | |
| 29 m_markersAreSorted = true; | |
| 30 DocumentMarkerList::clear(); | |
| 31 } | |
| 32 | |
| 33 protected: | |
| 34 bool markerListIsSorted() const final { return m_markersAreSorted; } | |
| 35 | |
| 36 private: | |
| 37 bool m_markersAreSorted; | |
| 38 }; | |
| 39 | |
| 40 class DocumentMarkerListTest : public ::testing::Test { | |
| 41 protected: | |
| 42 DocumentMarkerListTest() : m_markerList(new DocumentMarkerListForTesting()) {} | |
| 43 | |
| 44 DocumentMarker* createMarker(unsigned startOffset, unsigned endOffset) { | |
| 45 return new DocumentMarker(startOffset, endOffset, Color::black, false, | |
| 46 Color::black); | |
| 47 } | |
| 48 | |
| 49 Persistent<DocumentMarkerListForTesting> m_markerList; | |
| 50 }; | |
| 51 | |
| 52 TEST_F(DocumentMarkerListTest, | |
| 53 RemoveMarkersSortedDoRemovePartiallyOverlapping) { | |
| 54 m_markerList->push_back(createMarker(0, 5)); | |
| 55 m_markerList->push_back(createMarker(10, 15)); | |
| 56 m_markerList->push_back(createMarker(20, 25)); | |
| 57 m_markerList->push_back(createMarker(30, 35)); | |
| 58 m_markerList->push_back(createMarker(40, 45)); | |
| 59 | |
| 60 EXPECT_EQ(5u, m_markerList->size()); | |
| 61 | |
| 62 bool didRemoveMarker = false; | |
| 63 | |
| 64 // test no-op remove | |
| 65 m_markerList->removeMarkers(100, 100, true, &didRemoveMarker); | |
| 66 EXPECT_EQ(didRemoveMarker, false); | |
| 67 EXPECT_EQ(5u, m_markerList->size()); | |
| 68 | |
| 69 // remove middle marker | |
| 70 m_markerList->removeMarkers(20, 2, true, &didRemoveMarker); | |
| 71 EXPECT_EQ(didRemoveMarker, true); | |
| 72 EXPECT_EQ(4u, m_markerList->size()); | |
| 73 | |
| 74 EXPECT_EQ(0u, m_markerList->at(0)->startOffset()); | |
| 75 EXPECT_EQ(5u, m_markerList->at(0)->endOffset()); | |
| 76 | |
| 77 EXPECT_EQ(10u, m_markerList->at(1)->startOffset()); | |
| 78 EXPECT_EQ(15u, m_markerList->at(1)->endOffset()); | |
| 79 | |
| 80 EXPECT_EQ(30u, m_markerList->at(2)->startOffset()); | |
| 81 EXPECT_EQ(35u, m_markerList->at(2)->endOffset()); | |
| 82 | |
| 83 EXPECT_EQ(40u, m_markerList->at(3)->startOffset()); | |
| 84 EXPECT_EQ(45u, m_markerList->at(3)->endOffset()); | |
| 85 | |
| 86 // remove middle two markers | |
| 87 didRemoveMarker = false; | |
| 88 m_markerList->removeMarkers(13, 19, true, &didRemoveMarker); | |
| 89 EXPECT_EQ(didRemoveMarker, true); | |
| 90 EXPECT_EQ(2u, m_markerList->size()); | |
| 91 | |
| 92 EXPECT_EQ(0u, m_markerList->at(0)->startOffset()); | |
| 93 EXPECT_EQ(5u, m_markerList->at(0)->endOffset()); | |
| 94 | |
| 95 EXPECT_EQ(40u, m_markerList->at(1)->startOffset()); | |
| 96 EXPECT_EQ(45u, m_markerList->at(1)->endOffset()); | |
| 97 } | |
| 98 | |
| 99 TEST_F(DocumentMarkerListTest, | |
| 100 RemoveMarkersUnsortedDoRemovePartiallyOverlapping) { | |
| 101 m_markerList->push_back(createMarker(40, 45)); | |
| 102 m_markerList->push_back(createMarker(30, 35)); | |
| 103 m_markerList->push_back(createMarker(20, 25)); | |
| 104 m_markerList->push_back(createMarker(10, 15)); | |
| 105 m_markerList->push_back(createMarker(0, 5)); | |
| 106 | |
| 107 EXPECT_EQ(5u, m_markerList->size()); | |
| 108 | |
| 109 bool didRemoveMarker = false; | |
| 110 | |
| 111 // test no-op remove | |
| 112 m_markerList->removeMarkers(100, 100, true, &didRemoveMarker); | |
| 113 EXPECT_EQ(didRemoveMarker, false); | |
| 114 EXPECT_EQ(5u, m_markerList->size()); | |
| 115 | |
| 116 // remove middle marker | |
| 117 m_markerList->removeMarkers(20, 2, true, &didRemoveMarker); | |
| 118 EXPECT_EQ(didRemoveMarker, true); | |
| 119 EXPECT_EQ(4u, m_markerList->size()); | |
| 120 | |
| 121 EXPECT_EQ(40u, m_markerList->at(0)->startOffset()); | |
| 122 EXPECT_EQ(45u, m_markerList->at(0)->endOffset()); | |
| 123 | |
| 124 EXPECT_EQ(30u, m_markerList->at(1)->startOffset()); | |
| 125 EXPECT_EQ(35u, m_markerList->at(1)->endOffset()); | |
| 126 | |
| 127 EXPECT_EQ(10u, m_markerList->at(2)->startOffset()); | |
| 128 EXPECT_EQ(15u, m_markerList->at(2)->endOffset()); | |
| 129 | |
| 130 EXPECT_EQ(0u, m_markerList->at(3)->startOffset()); | |
| 131 EXPECT_EQ(5u, m_markerList->at(3)->endOffset()); | |
| 132 | |
| 133 // remove middle two markers | |
| 134 didRemoveMarker = false; | |
| 135 m_markerList->removeMarkers(13, 19, true, &didRemoveMarker); | |
| 136 EXPECT_EQ(didRemoveMarker, true); | |
| 137 EXPECT_EQ(2u, m_markerList->size()); | |
| 138 | |
| 139 EXPECT_EQ(40u, m_markerList->at(0)->startOffset()); | |
| 140 EXPECT_EQ(45u, m_markerList->at(0)->endOffset()); | |
| 141 | |
| 142 EXPECT_EQ(0u, m_markerList->at(1)->startOffset()); | |
| 143 EXPECT_EQ(5u, m_markerList->at(1)->endOffset()); | |
| 144 } | |
| 145 | |
| 146 TEST_F(DocumentMarkerListTest, | |
| 147 RemoveMarkersSortedDontRemovePartiallyOverlapping) { | |
| 148 m_markerList->push_back(createMarker(0, 5)); | |
| 149 m_markerList->push_back(createMarker(10, 15)); | |
| 150 m_markerList->push_back(createMarker(20, 25)); | |
| 151 m_markerList->push_back(createMarker(30, 35)); | |
| 152 m_markerList->push_back(createMarker(40, 45)); | |
| 153 | |
| 154 EXPECT_EQ(5u, m_markerList->size()); | |
| 155 | |
| 156 bool didRemoveMarker = false; | |
| 157 | |
| 158 // test no-op remove | |
| 159 m_markerList->removeMarkers(100, 100, false, &didRemoveMarker); | |
| 160 EXPECT_EQ(didRemoveMarker, false); | |
| 161 EXPECT_EQ(5u, m_markerList->size()); | |
| 162 | |
| 163 // remove chunk from beginning of middle marker | |
| 164 m_markerList->removeMarkers(20, 2, false, &didRemoveMarker); | |
| 165 EXPECT_EQ(didRemoveMarker, true); | |
| 166 EXPECT_EQ(5u, m_markerList->size()); | |
| 167 | |
| 168 EXPECT_EQ(0u, m_markerList->at(0)->startOffset()); | |
| 169 EXPECT_EQ(5u, m_markerList->at(0)->endOffset()); | |
| 170 | |
| 171 EXPECT_EQ(10u, m_markerList->at(1)->startOffset()); | |
| 172 EXPECT_EQ(15u, m_markerList->at(1)->endOffset()); | |
| 173 | |
| 174 EXPECT_EQ(22u, m_markerList->at(2)->startOffset()); | |
| 175 EXPECT_EQ(25u, m_markerList->at(2)->endOffset()); | |
| 176 | |
| 177 EXPECT_EQ(30u, m_markerList->at(3)->startOffset()); | |
| 178 EXPECT_EQ(35u, m_markerList->at(3)->endOffset()); | |
| 179 | |
| 180 EXPECT_EQ(40u, m_markerList->at(4)->startOffset()); | |
| 181 EXPECT_EQ(45u, m_markerList->at(4)->endOffset()); | |
| 182 | |
| 183 // remove chunk from end of second marker | |
| 184 didRemoveMarker = false; | |
| 185 m_markerList->removeMarkers(13, 2, false, &didRemoveMarker); | |
| 186 EXPECT_EQ(didRemoveMarker, true); | |
| 187 EXPECT_EQ(5u, m_markerList->size()); | |
| 188 | |
| 189 EXPECT_EQ(0u, m_markerList->at(0)->startOffset()); | |
| 190 EXPECT_EQ(5u, m_markerList->at(0)->endOffset()); | |
| 191 | |
| 192 EXPECT_EQ(10u, m_markerList->at(1)->startOffset()); | |
| 193 EXPECT_EQ(13u, m_markerList->at(1)->endOffset()); | |
| 194 | |
| 195 EXPECT_EQ(22u, m_markerList->at(2)->startOffset()); | |
| 196 EXPECT_EQ(25u, m_markerList->at(2)->endOffset()); | |
| 197 | |
| 198 EXPECT_EQ(30u, m_markerList->at(3)->startOffset()); | |
| 199 EXPECT_EQ(35u, m_markerList->at(3)->endOffset()); | |
| 200 | |
| 201 EXPECT_EQ(40u, m_markerList->at(4)->startOffset()); | |
| 202 EXPECT_EQ(45u, m_markerList->at(4)->endOffset()); | |
| 203 | |
| 204 // remove chunk from middle of fourth marker | |
| 205 didRemoveMarker = false; | |
| 206 m_markerList->removeMarkers(31, 1, false, &didRemoveMarker); | |
| 207 EXPECT_EQ(didRemoveMarker, true); | |
| 208 EXPECT_EQ(6u, m_markerList->size()); | |
| 209 | |
| 210 EXPECT_EQ(0u, m_markerList->at(0)->startOffset()); | |
| 211 EXPECT_EQ(5u, m_markerList->at(0)->endOffset()); | |
| 212 | |
| 213 EXPECT_EQ(10u, m_markerList->at(1)->startOffset()); | |
| 214 EXPECT_EQ(13u, m_markerList->at(1)->endOffset()); | |
| 215 | |
| 216 EXPECT_EQ(22u, m_markerList->at(2)->startOffset()); | |
| 217 EXPECT_EQ(25u, m_markerList->at(2)->endOffset()); | |
| 218 | |
| 219 EXPECT_EQ(30u, m_markerList->at(3)->startOffset()); | |
| 220 EXPECT_EQ(31u, m_markerList->at(3)->endOffset()); | |
| 221 | |
| 222 EXPECT_EQ(32u, m_markerList->at(4)->startOffset()); | |
| 223 EXPECT_EQ(35u, m_markerList->at(4)->endOffset()); | |
| 224 | |
| 225 EXPECT_EQ(40u, m_markerList->at(5)->startOffset()); | |
| 226 EXPECT_EQ(45u, m_markerList->at(5)->endOffset()); | |
| 227 | |
| 228 // remove middle four markers | |
| 229 didRemoveMarker = false; | |
| 230 m_markerList->removeMarkers(10, 25, false, &didRemoveMarker); | |
| 231 EXPECT_EQ(didRemoveMarker, true); | |
| 232 EXPECT_EQ(2u, m_markerList->size()); | |
| 233 | |
| 234 EXPECT_EQ(0u, m_markerList->at(0)->startOffset()); | |
| 235 EXPECT_EQ(5u, m_markerList->at(0)->endOffset()); | |
| 236 | |
| 237 EXPECT_EQ(40u, m_markerList->at(1)->startOffset()); | |
| 238 EXPECT_EQ(45u, m_markerList->at(1)->endOffset()); | |
| 239 } | |
| 240 | |
| 241 TEST_F(DocumentMarkerListTest, | |
| 242 RemoveMarkersUnsortedDontRemovePartiallyOverlapping) { | |
| 243 m_markerList->push_back(createMarker(40, 45)); | |
| 244 m_markerList->push_back(createMarker(30, 35)); | |
| 245 m_markerList->push_back(createMarker(20, 25)); | |
| 246 m_markerList->push_back(createMarker(10, 15)); | |
| 247 m_markerList->push_back(createMarker(0, 5)); | |
| 248 | |
| 249 EXPECT_EQ(5u, m_markerList->size()); | |
| 250 | |
| 251 bool didRemoveMarker = false; | |
| 252 | |
| 253 // test no-op remove | |
| 254 m_markerList->removeMarkers(100, 100, false, &didRemoveMarker); | |
| 255 EXPECT_EQ(didRemoveMarker, false); | |
| 256 EXPECT_EQ(5u, m_markerList->size()); | |
| 257 | |
| 258 // remove chunk from beginning of middle marker | |
| 259 m_markerList->removeMarkers(20, 2, false, &didRemoveMarker); | |
| 260 EXPECT_EQ(didRemoveMarker, true); | |
| 261 EXPECT_EQ(5u, m_markerList->size()); | |
| 262 | |
| 263 EXPECT_EQ(40u, m_markerList->at(0)->startOffset()); | |
| 264 EXPECT_EQ(45u, m_markerList->at(0)->endOffset()); | |
| 265 | |
| 266 EXPECT_EQ(30u, m_markerList->at(1)->startOffset()); | |
| 267 EXPECT_EQ(35u, m_markerList->at(1)->endOffset()); | |
| 268 | |
| 269 EXPECT_EQ(10u, m_markerList->at(2)->startOffset()); | |
| 270 EXPECT_EQ(15u, m_markerList->at(2)->endOffset()); | |
| 271 | |
| 272 EXPECT_EQ(0u, m_markerList->at(3)->startOffset()); | |
| 273 EXPECT_EQ(5u, m_markerList->at(3)->endOffset()); | |
| 274 | |
| 275 EXPECT_EQ(22u, m_markerList->at(4)->startOffset()); | |
| 276 EXPECT_EQ(25u, m_markerList->at(4)->endOffset()); | |
| 277 | |
| 278 // remove chunk from end of middle marker | |
| 279 didRemoveMarker = false; | |
| 280 m_markerList->removeMarkers(13, 2, false, &didRemoveMarker); | |
| 281 EXPECT_EQ(didRemoveMarker, true); | |
| 282 EXPECT_EQ(5u, m_markerList->size()); | |
| 283 | |
| 284 EXPECT_EQ(40u, m_markerList->at(0)->startOffset()); | |
| 285 EXPECT_EQ(45u, m_markerList->at(0)->endOffset()); | |
| 286 | |
| 287 EXPECT_EQ(30u, m_markerList->at(1)->startOffset()); | |
| 288 EXPECT_EQ(35u, m_markerList->at(1)->endOffset()); | |
| 289 | |
| 290 EXPECT_EQ(0u, m_markerList->at(2)->startOffset()); | |
| 291 EXPECT_EQ(5u, m_markerList->at(2)->endOffset()); | |
| 292 | |
| 293 EXPECT_EQ(22u, m_markerList->at(3)->startOffset()); | |
| 294 EXPECT_EQ(25u, m_markerList->at(3)->endOffset()); | |
| 295 | |
| 296 EXPECT_EQ(10u, m_markerList->at(4)->startOffset()); | |
| 297 EXPECT_EQ(13u, m_markerList->at(4)->endOffset()); | |
| 298 | |
| 299 // remove chunk from middle of second marker | |
| 300 didRemoveMarker = false; | |
| 301 m_markerList->removeMarkers(31, 1, false, &didRemoveMarker); | |
| 302 EXPECT_EQ(didRemoveMarker, true); | |
| 303 EXPECT_EQ(6u, m_markerList->size()); | |
| 304 | |
| 305 EXPECT_EQ(40u, m_markerList->at(0)->startOffset()); | |
| 306 EXPECT_EQ(45u, m_markerList->at(0)->endOffset()); | |
| 307 | |
| 308 EXPECT_EQ(0u, m_markerList->at(1)->startOffset()); | |
| 309 EXPECT_EQ(5u, m_markerList->at(1)->endOffset()); | |
| 310 | |
| 311 EXPECT_EQ(22u, m_markerList->at(2)->startOffset()); | |
| 312 EXPECT_EQ(25u, m_markerList->at(2)->endOffset()); | |
| 313 | |
| 314 EXPECT_EQ(10u, m_markerList->at(3)->startOffset()); | |
| 315 EXPECT_EQ(13u, m_markerList->at(3)->endOffset()); | |
| 316 | |
| 317 EXPECT_EQ(30u, m_markerList->at(4)->startOffset()); | |
| 318 EXPECT_EQ(31u, m_markerList->at(4)->endOffset()); | |
| 319 | |
| 320 EXPECT_EQ(32u, m_markerList->at(5)->startOffset()); | |
| 321 EXPECT_EQ(35u, m_markerList->at(5)->endOffset()); | |
| 322 | |
| 323 // remove all markers except 0 to 5 and 40 to 45 | |
| 324 didRemoveMarker = false; | |
| 325 m_markerList->removeMarkers(5, 35, false, &didRemoveMarker); | |
| 326 EXPECT_EQ(didRemoveMarker, true); | |
| 327 EXPECT_EQ(2u, m_markerList->size()); | |
| 328 | |
| 329 EXPECT_EQ(40u, m_markerList->at(0)->startOffset()); | |
| 330 EXPECT_EQ(45u, m_markerList->at(0)->endOffset()); | |
| 331 | |
| 332 EXPECT_EQ(0u, m_markerList->at(1)->startOffset()); | |
| 333 EXPECT_EQ(5u, m_markerList->at(1)->endOffset()); | |
| 334 } | |
| 335 | |
| 336 TEST_F(DocumentMarkerListTest, ShiftMarkersDeletions) { | |
| 337 m_markerList->push_back(createMarker(0, 5)); | |
| 338 m_markerList->push_back(createMarker(10, 15)); | |
| 339 m_markerList->push_back(createMarker(20, 25)); | |
| 340 m_markerList->push_back(createMarker(30, 35)); | |
| 341 m_markerList->push_back(createMarker(40, 45)); | |
| 342 // delete end of second marker, entirety of third marker, and start of fourth | |
| 343 // marker | |
| 344 m_markerList->shiftMarkers(13, 19, 0); | |
| 345 | |
| 346 EXPECT_EQ(4u, m_markerList->size()); | |
| 347 | |
| 348 EXPECT_EQ(0u, m_markerList->at(0)->startOffset()); | |
| 349 EXPECT_EQ(5u, m_markerList->at(0)->endOffset()); | |
| 350 | |
| 351 EXPECT_EQ(10u, m_markerList->at(1)->startOffset()); | |
| 352 EXPECT_EQ(13u, m_markerList->at(1)->endOffset()); | |
| 353 | |
| 354 EXPECT_EQ(13u, m_markerList->at(2)->startOffset()); | |
| 355 EXPECT_EQ(16u, m_markerList->at(2)->endOffset()); | |
| 356 | |
| 357 EXPECT_EQ(21u, m_markerList->at(3)->startOffset()); | |
| 358 EXPECT_EQ(26u, m_markerList->at(3)->endOffset()); | |
| 359 | |
| 360 m_markerList->clear(); | |
| 361 m_markerList->push_back(createMarker(5, 10)); | |
| 362 // delete exactly on a marker | |
| 363 m_markerList->shiftMarkers(5, 5, 0); | |
| 364 EXPECT_EQ(0u, m_markerList->size()); | |
| 365 | |
| 366 m_markerList->push_back(createMarker(5, 10)); | |
| 367 // delete middle of marker | |
| 368 m_markerList->shiftMarkers(6, 3, 0); | |
| 369 EXPECT_EQ(1u, m_markerList->size()); | |
| 370 EXPECT_EQ(5u, m_markerList->at(0)->startOffset()); | |
| 371 EXPECT_EQ(7u, m_markerList->at(0)->endOffset()); | |
| 372 } | |
| 373 | |
| 374 TEST_F(DocumentMarkerListTest, ShiftMarkersInsertions) { | |
| 375 m_markerList->push_back(createMarker(0, 5)); | |
| 376 m_markerList->push_back(createMarker(10, 15)); | |
| 377 m_markerList->push_back(createMarker(20, 25)); | |
| 378 // insert in middle of second marker | |
| 379 m_markerList->shiftMarkers(12, 0, 5); | |
| 380 | |
| 381 EXPECT_EQ(3u, m_markerList->size()); | |
| 382 | |
| 383 EXPECT_EQ(0u, m_markerList->at(0)->startOffset()); | |
| 384 EXPECT_EQ(5u, m_markerList->at(0)->endOffset()); | |
| 385 | |
| 386 EXPECT_EQ(10u, m_markerList->at(1)->startOffset()); | |
| 387 EXPECT_EQ(20u, m_markerList->at(1)->endOffset()); | |
| 388 | |
| 389 EXPECT_EQ(25u, m_markerList->at(2)->startOffset()); | |
| 390 EXPECT_EQ(30u, m_markerList->at(2)->endOffset()); | |
| 391 | |
| 392 // insert right after first marker | |
| 393 m_markerList->shiftMarkers(5, 0, 5); | |
| 394 | |
| 395 EXPECT_EQ(3u, m_markerList->size()); | |
| 396 | |
| 397 EXPECT_EQ(0u, m_markerList->at(0)->startOffset()); | |
| 398 EXPECT_EQ(5u, m_markerList->at(0)->endOffset()); | |
| 399 | |
| 400 EXPECT_EQ(15u, m_markerList->at(1)->startOffset()); | |
| 401 EXPECT_EQ(25u, m_markerList->at(1)->endOffset()); | |
| 402 | |
| 403 EXPECT_EQ(30u, m_markerList->at(2)->startOffset()); | |
| 404 EXPECT_EQ(35u, m_markerList->at(2)->endOffset()); | |
| 405 | |
| 406 // insert right before second marker | |
| 407 m_markerList->shiftMarkers(15, 0, 5); | |
| 408 | |
| 409 EXPECT_EQ(3u, m_markerList->size()); | |
| 410 | |
| 411 EXPECT_EQ(0u, m_markerList->at(0)->startOffset()); | |
| 412 EXPECT_EQ(5u, m_markerList->at(0)->endOffset()); | |
| 413 | |
| 414 EXPECT_EQ(20u, m_markerList->at(1)->startOffset()); | |
| 415 EXPECT_EQ(30u, m_markerList->at(1)->endOffset()); | |
| 416 | |
| 417 EXPECT_EQ(35u, m_markerList->at(2)->startOffset()); | |
| 418 EXPECT_EQ(40u, m_markerList->at(2)->endOffset()); | |
| 419 } | |
| 420 | |
| 421 TEST_F(DocumentMarkerListTest, ShiftMarkersReplacements) { | |
| 422 m_markerList->push_back(createMarker(0, 5)); | |
| 423 m_markerList->push_back(createMarker(10, 15)); | |
| 424 m_markerList->push_back(createMarker(20, 25)); | |
| 425 m_markerList->push_back(createMarker(30, 35)); | |
| 426 m_markerList->push_back(createMarker(40, 45)); | |
| 427 | |
| 428 // Replace entirely of third marker and portions of second and fourth | |
| 429 m_markerList->shiftMarkers(13, 19, 1); | |
| 430 | |
| 431 EXPECT_EQ(4u, m_markerList->size()); | |
| 432 | |
| 433 EXPECT_EQ(0u, m_markerList->at(0)->startOffset()); | |
| 434 EXPECT_EQ(5u, m_markerList->at(0)->endOffset()); | |
| 435 | |
| 436 EXPECT_EQ(10u, m_markerList->at(1)->startOffset()); | |
| 437 EXPECT_EQ(13u, m_markerList->at(1)->endOffset()); | |
| 438 | |
| 439 EXPECT_EQ(14u, m_markerList->at(2)->startOffset()); | |
| 440 EXPECT_EQ(17u, m_markerList->at(2)->endOffset()); | |
| 441 | |
| 442 EXPECT_EQ(22u, m_markerList->at(3)->startOffset()); | |
| 443 EXPECT_EQ(27u, m_markerList->at(3)->endOffset()); | |
| 444 | |
| 445 // Replace end of first marker | |
| 446 m_markerList->shiftMarkers(3, 2, 1); | |
| 447 | |
| 448 EXPECT_EQ(4u, m_markerList->size()); | |
| 449 | |
| 450 EXPECT_EQ(0u, m_markerList->at(0)->startOffset()); | |
| 451 EXPECT_EQ(4u, m_markerList->at(0)->endOffset()); | |
| 452 | |
| 453 EXPECT_EQ(9u, m_markerList->at(1)->startOffset()); | |
| 454 EXPECT_EQ(12u, m_markerList->at(1)->endOffset()); | |
| 455 | |
| 456 EXPECT_EQ(13u, m_markerList->at(2)->startOffset()); | |
| 457 EXPECT_EQ(16u, m_markerList->at(2)->endOffset()); | |
| 458 | |
| 459 EXPECT_EQ(21u, m_markerList->at(3)->startOffset()); | |
| 460 EXPECT_EQ(26u, m_markerList->at(3)->endOffset()); | |
| 461 | |
| 462 // Replace beginning of fourth marker | |
| 463 m_markerList->shiftMarkers(13, 2, 1); | |
| 464 | |
| 465 EXPECT_EQ(4u, m_markerList->size()); | |
| 466 | |
| 467 EXPECT_EQ(0u, m_markerList->at(0)->startOffset()); | |
| 468 EXPECT_EQ(4u, m_markerList->at(0)->endOffset()); | |
| 469 | |
| 470 EXPECT_EQ(9u, m_markerList->at(1)->startOffset()); | |
| 471 EXPECT_EQ(12u, m_markerList->at(1)->endOffset()); | |
| 472 | |
| 473 EXPECT_EQ(13u, m_markerList->at(2)->startOffset()); | |
| 474 EXPECT_EQ(15u, m_markerList->at(2)->endOffset()); | |
| 475 | |
| 476 EXPECT_EQ(20u, m_markerList->at(3)->startOffset()); | |
| 477 EXPECT_EQ(25u, m_markerList->at(3)->endOffset()); | |
| 478 } | |
| 479 | |
| 480 TEST_F(DocumentMarkerListTest, CopyMarkers) { | |
| 481 m_markerList->push_back(createMarker(1, 2)); | |
| 482 m_markerList->push_back(createMarker(3, 4)); | |
| 483 m_markerList->push_back(createMarker(5, 6)); | |
| 484 m_markerList->push_back(createMarker(7, 8)); | |
| 485 | |
| 486 DocumentMarkerListForTesting* dstList = new DocumentMarkerListForTesting(); | |
| 487 | |
| 488 // Copy all markers that intersect the range 2 through 5, i.e. the first three | |
| 489 m_markerList->copyMarkers(2, 4, dstList, -1); | |
| 490 | |
| 491 EXPECT_EQ(3u, dstList->size()); | |
| 492 | |
| 493 // Markers are clamped to the range 2 through 5, so the first and third | |
| 494 // markers are now length 0 | |
|
Xiaocheng
2017/03/25 00:05:35
Though this matches the current behavior, it doesn
| |
| 495 EXPECT_EQ(1u, dstList->at(0)->startOffset()); | |
| 496 EXPECT_EQ(1u, dstList->at(0)->endOffset()); | |
| 497 | |
| 498 EXPECT_EQ(2u, dstList->at(1)->startOffset()); | |
| 499 EXPECT_EQ(3u, dstList->at(1)->endOffset()); | |
| 500 | |
| 501 EXPECT_EQ(4u, dstList->at(2)->startOffset()); | |
| 502 EXPECT_EQ(4u, dstList->at(2)->endOffset()); | |
| 503 } | |
| 504 | |
| 505 } // namespace blink | |
| OLD | NEW |