OLD | NEW |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 import "dart:collection"; | 5 import "dart:collection"; |
6 import "dart:typed_data"; | 6 import "dart:typed_data"; |
7 import "package:expect/expect.dart"; | 7 import "package:expect/expect.dart"; |
8 | 8 |
9 void main() { | 9 void main() { |
10 // Typed lists - fixed length and can only contain integers. | 10 // Typed lists - fixed length and can only contain integers. |
(...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
369 | 369 |
370 list.replaceRange(2, 3, [5, 5, 5]); | 370 list.replaceRange(2, 3, [5, 5, 5]); |
371 Expect.listEquals([1, 2, 5, 5, 5, 0, 0, 7, 2, 3, 2, 1], list); | 371 Expect.listEquals([1, 2, 5, 5, 5, 0, 0, 7, 2, 3, 2, 1], list); |
372 | 372 |
373 list.replaceRange(2, 4, [6, 6]); | 373 list.replaceRange(2, 4, [6, 6]); |
374 Expect.listEquals([1, 2, 6, 6, 5, 0, 0, 7, 2, 3, 2, 1], list); | 374 Expect.listEquals([1, 2, 6, 6, 5, 0, 0, 7, 2, 3, 2, 1], list); |
375 | 375 |
376 list.replaceRange(6, 8, []); | 376 list.replaceRange(6, 8, []); |
377 Expect.listEquals([1, 2, 6, 6, 5, 0, 2, 3, 2, 1], list); | 377 Expect.listEquals([1, 2, 6, 6, 5, 0, 2, 3, 2, 1], list); |
378 | 378 |
379 // Operations that change the length may cause ConcurrentModificationError. | 379 // Operations that change the length cause ConcurrentModificationError. |
380 // Reducing the length may cause a RangeError before the | |
381 // ConcurrentModificationError in production mode. | |
382 bool checkedMode = false; | |
383 assert((checkedMode = true)); | |
384 | |
385 void testConcurrentModification(action()) { | 380 void testConcurrentModification(action()) { |
386 testIterator(int when) { | 381 testIterator(int when) { |
387 list.length = 4; | 382 list.length = 4; |
388 list.setAll(0, [0, 1, 2, 3]); | 383 list.setAll(0, [0, 1, 2, 3]); |
389 Expect.throws(() { | 384 Expect.throws(() { |
390 for (var element in list) { | 385 for (var element in list) { |
391 if (element == when) { | 386 if (element == when) action(); |
392 when = -1; // Prevent triggering more than once. | |
393 action(); | |
394 } | |
395 } | 387 } |
396 }, (e) => !checkedMode || e is ConcurrentModificationError); | 388 }, (e) => e is ConcurrentModificationError); |
397 } | 389 } |
398 testForEach(int when) { | 390 testForEach(int when) { |
399 list.length = 4; | 391 list.length = 4; |
400 list.setAll(0, [0, 1, 2, 3]); | 392 list.setAll(0, [0, 1, 2, 3]); |
401 Expect.throws(() { | 393 Expect.throws(() { |
402 list.forEach((var element) { | 394 list.forEach((var element) { |
403 if (element == when) { | 395 if (element == when) action(); |
404 when = -1; | |
405 action(); | |
406 } | |
407 }); | 396 }); |
408 }, (e) => e is ConcurrentModificationError); | 397 }, (e) => e is ConcurrentModificationError); |
409 } | 398 } |
410 // Test the change at different points of the iteration. | 399 // Test the change at different points of the iteration. |
411 testIterator(0); | 400 testIterator(0); |
412 testIterator(1); | 401 testIterator(1); |
413 testIterator(3); | 402 testIterator(3); |
414 testForEach(0); | 403 testForEach(0); |
415 testForEach(1); | 404 testForEach(1); |
416 testForEach(3); | 405 testForEach(3); |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
508 | 497 |
509 void testListConstructor() { | 498 void testListConstructor() { |
510 Expect.throws(() { new List(0).add(4); }); // Is fixed-length. | 499 Expect.throws(() { new List(0).add(4); }); // Is fixed-length. |
511 Expect.throws(() { new List(-2); }); // Not negative. /// 01: ok | 500 Expect.throws(() { new List(-2); }); // Not negative. /// 01: ok |
512 Expect.throws(() { new List(null); }); // Not null. | 501 Expect.throws(() { new List(null); }); // Not null. |
513 Expect.listEquals([4], new List()..add(4)); | 502 Expect.listEquals([4], new List()..add(4)); |
514 Expect.throws(() { new List.filled(0, 42).add(4); }); // Is fixed-length. | 503 Expect.throws(() { new List.filled(0, 42).add(4); }); // Is fixed-length. |
515 Expect.throws(() { new List.filled(-2, 42); }); // Not negative. | 504 Expect.throws(() { new List.filled(-2, 42); }); // Not negative. |
516 Expect.throws(() { new List.filled(null, 42); }); // Not null. | 505 Expect.throws(() { new List.filled(null, 42); }); // Not null. |
517 } | 506 } |
OLD | NEW |