| // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| // @dart = 2.9 |
| |
| import "package:expect/expect.dart"; |
| |
| class ListIteratorsTest { |
| static void checkListIterator(List a) { |
| Iterator it = a.iterator; |
| Expect.isNull(it.current); |
| for (int i = 0; i < a.length; i++) { |
| Expect.isTrue(it.moveNext()); |
| var elem = it.current; |
| Expect.equals(a[i], elem); |
| } |
| Expect.isFalse(it.moveNext()); |
| Expect.isNull(it.current); |
| } |
| |
| static testMain() { |
| checkListIterator([]); |
| checkListIterator([1, 2]); |
| checkListIterator(new List(0)); |
| checkListIterator(new List(10)); |
| checkListIterator(new List()); |
| List g = new List(); |
| g.addAll([1, 2, 3]); |
| checkListIterator(g); |
| |
| // This is mostly undefined behavior. |
| Iterator it = g.iterator; |
| Expect.isTrue(it.moveNext()); |
| Expect.equals(1, it.current); |
| Expect.isTrue(it.moveNext()); |
| g[1] = 49; |
| // The iterator keeps the last value. |
| Expect.equals(2, it.current); |
| Expect.isTrue(it.moveNext()); |
| g.removeLast(); |
| // The iterator keeps the last value. |
| Expect.equals(3, it.current); |
| Expect.throws(it.moveNext, (e) => e is ConcurrentModificationError); |
| // No progress when throwing. |
| Expect.equals(3, it.current); |
| } |
| } |
| |
| main() { |
| ListIteratorsTest.testMain(); |
| } |