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 class ListIteratorsTest { | 5 class ListIteratorsTest { |
6 static void checkListIterator(List a) { | 6 static void checkListIterator(List a) { |
7 Iterator it = a.iterator(); | 7 Iterator it = a.iterator; |
8 Expect.equals(false, it.hasNext == a.isEmpty); | |
9 for (int i = 0; i < a.length; i++) { | 8 for (int i = 0; i < a.length; i++) { |
10 Expect.equals(true, it.hasNext); | 9 Expect.isTrue(it.moveNext()); |
11 var elem = it.next(); | 10 var elem = it.current; |
| 11 Expect.equals(a[i], elem); |
12 } | 12 } |
13 Expect.equals(false, it.hasNext); | 13 Expect.isFalse(it.moveNext()); |
14 bool exceptionCaught = false; | 14 Expect.isNull(it.current); |
15 try { | |
16 var eleme = it.next(); | |
17 } on StateError catch (e) { | |
18 exceptionCaught = true; | |
19 } | |
20 Expect.equals(true, exceptionCaught); | |
21 } | 15 } |
22 | 16 |
23 static testMain() { | 17 static testMain() { |
24 checkListIterator([]); | 18 checkListIterator([]); |
25 checkListIterator([1, 2]); | 19 checkListIterator([1, 2]); |
26 checkListIterator(new List(0)); | 20 checkListIterator(new List.fixedLength(0)); |
27 checkListIterator(new List(10)); | 21 checkListIterator(new List.fixedLength(10)); |
28 checkListIterator(new List()); | 22 checkListIterator(new List()); |
29 List g = new List(); | 23 List g = new List(); |
30 g.addAll([1, 2]); | 24 g.addAll([1, 2, 3]); |
31 checkListIterator(g); | 25 checkListIterator(g); |
32 | 26 |
33 Iterator it = g.iterator(); | 27 // This is mostly undefined behavior. |
34 Expect.equals(true, it.hasNext); | 28 Iterator it = g.iterator; |
| 29 Expect.isTrue(it.moveNext()); |
35 g.removeLast(); | 30 g.removeLast(); |
36 Expect.equals(true, it.hasNext); | 31 Expect.equals(1, it.current); |
| 32 Expect.isTrue(it.moveNext()); |
| 33 g[1] = 49; |
| 34 // The iterator keeps the last value. |
| 35 Expect.equals(2, it.current); |
37 g.removeLast(); | 36 g.removeLast(); |
38 Expect.equals(false, it.hasNext); | 37 // The iterator keeps the last value. |
| 38 Expect.equals(2, it.current); |
| 39 Expect.isFalse(it.moveNext()); |
| 40 Expect.isNull(it.current); |
39 | 41 |
| 42 g.clear(); |
40 g.addAll([10, 20]); | 43 g.addAll([10, 20]); |
41 int sum = 0; | 44 int sum = 0; |
42 for (var elem in g) { | 45 for (var elem in g) { |
43 sum += elem; | 46 sum += elem; |
44 // Iterator must realize that g has no more elements. | 47 // Iterator must realize that g has no more elements. |
45 g.removeLast(); | 48 g.removeLast(); |
46 } | 49 } |
47 Expect.equals(10, sum); | 50 Expect.equals(10, sum); |
48 } | 51 } |
49 } | 52 } |
50 | 53 |
51 main() { | 54 main() { |
52 ListIteratorsTest.testMain(); | 55 ListIteratorsTest.testMain(); |
53 } | 56 } |
OLD | NEW |