Index: tests/corelib_2/list_test.dart |
diff --git a/tests/corelib_2/list_test.dart b/tests/corelib_2/list_test.dart |
index 0323c1de89dafea2cfaaed3e26a917b21e4e4433..dcc646a8d6b93a300520b87e40c4f121cc9b74b0 100644 |
--- a/tests/corelib_2/list_test.dart |
+++ b/tests/corelib_2/list_test.dart |
@@ -22,22 +22,22 @@ void main() { |
testTypedList(new Int32List(4).toList(growable: false)); |
// Fixed length lists, length 4. |
- testFixedLengthList(new List(4)); |
- testFixedLengthList(new List(4).toList(growable: false)); |
- testFixedLengthList((new List()..length = 4).toList(growable: false)); |
+ testFixedLengthList(<T>() => new List(4)); |
+ testFixedLengthList(<T>() => new List<T>(4).toList(growable: false)); |
+ testFixedLengthList(<T>() => (new List<T>()..length = 4).toList(growable: false)); |
// ListBase implementation of List. |
- testFixedLengthList(new MyFixedList(new List(4))); |
- testFixedLengthList(new MyFixedList(new List(4)).toList(growable: false)); |
+ testFixedLengthList(<T>() => new MyFixedList(new List(4))); |
+ testFixedLengthList(<T>() => new MyFixedList<T>(new List(4)).toList(growable: false)); |
// Growable lists. Initial length 0. |
- testGrowableList(new List()); |
- testGrowableList(new List().toList()); |
- testGrowableList(new List(0).toList()); |
- testGrowableList(new List.filled(0, null, growable: true)); |
- testGrowableList([]); |
- testGrowableList((const []).toList()); |
- testGrowableList(new MyList([])); |
- testGrowableList(new MyList([]).toList()); |
+ testGrowableList(<T>() => new List()); |
+ testGrowableList(<T>() => new List<T>().toList()); |
+ testGrowableList(<T>() => new List<T>(0).toList()); |
+ testGrowableList(<T>() => new List.filled(0, null, growable: true)); |
+ testGrowableList(<T>() => []); |
+ testGrowableList(<T>() => new List.from(const [])); |
+ testGrowableList(<T>() => new MyList([])); |
+ testGrowableList(<T>() => new MyList<T>([]).toList()); |
testTypedGrowableList(new Uint8List(0).toList()); |
testTypedGrowableList(new Int8List(0).toList()); |
@@ -140,7 +140,7 @@ void testLength(int length, List list) { |
(length != 0 ? Expect.isTrue : Expect.isFalse)(list.isNotEmpty); |
} |
-void testTypedLengthInvariantOperations(List list) { |
+void testTypedLengthInvariantOperations(List<int> list) { |
// length |
Expect.equals(list.length, 4); |
// operators [], []=. |
@@ -257,8 +257,7 @@ void testTypedLengthInvariantOperations(List list) { |
// so it's moved to the method below for now. |
} |
-void testLengthInvariantOperations(List list) { |
- testTypedLengthInvariantOperations(list); |
+void testUntypedListTests(List list) { |
// Tests that need untyped lists. |
list.setAll(0, [0, 1, 2, 3]); |
Expect.equals(-1, list.indexOf(100)); |
@@ -275,6 +274,14 @@ void testLengthInvariantOperations(List list) { |
list[3] = 3; |
Expect.equals(-1, list.indexOf(100)); |
Expect.equals(-1, list.lastIndexOf(100)); |
+} |
+ |
+void testLengthInvariantOperations(List<int> list) { |
+ testTypedLengthInvariantOperations(list); |
+ |
+ Expect.throws(() { |
+ testUntypedListTests(list); |
+ }, (e) => e is TypeError, 'List<int> cannot store non-ints'); |
// Argument errors on bad indices. List is still [0, 1, 2, 3]. |
testArgumentError(action()) { |
@@ -311,21 +318,22 @@ void testLengthInvariantOperations(List list) { |
testArgumentError(() => list.fillRange(4, 2)); |
} |
-void testTypedList(List list) { |
+void testTypedList(List<int> list) { |
testTypedLengthInvariantOperations(list); |
testCannotChangeLength(list); |
} |
-void testFixedLengthList(List list) { |
- testLengthInvariantOperations(list); |
- testCannotChangeLength(list); |
+void testFixedLengthList(List<T> Function<T>() createList) { |
+ testLengthInvariantOperations(createList()); |
+ testCannotChangeLength(createList()); |
+ testUntypedListTests(createList()); |
} |
-void testCannotChangeLength(List list) { |
+void testCannotChangeLength(List<int> list) { |
isUnsupported(action()) { |
Expect.throws(action, (e) => e is UnsupportedError); |
} |
- |
+ list.setAll(0, [0, 1, 2, 3]); |
isUnsupported(() => list.add(0)); |
isUnsupported(() => list.addAll([0])); |
isUnsupported(() => list.removeLast()); |
@@ -338,7 +346,7 @@ void testCannotChangeLength(List list) { |
isUnsupported(() => list.replaceRange(0, 1, [])); |
} |
-void testTypedGrowableList(List list) { |
+void testTypedGrowableList(List<int> list) { |
testLength(0, list); |
// set length. |
list.length = 4; |
@@ -349,18 +357,24 @@ void testTypedGrowableList(List list) { |
testGrowableListOperations(list); |
} |
-void testGrowableList(List list) { |
+void testGrowableList(List<T> Function<T>() createList) { |
+ List<int> list = createList(); |
testLength(0, list); |
- // set length. |
list.length = 4; |
testLength(4, list); |
testLengthInvariantOperations(list); |
- |
testGrowableListOperations(list); |
+ |
+ List listDynamic = createList(); |
+ testLength(0, listDynamic); |
+ listDynamic.length = 4; |
+ testLength(4, listDynamic); |
+ |
+ testUntypedListTests(listDynamic); |
} |
-void testGrowableListOperations(List list) { |
+void testGrowableListOperations(List<int> list) { |
// add, removeLast. |
list.clear(); |
testLength(0, list); |
@@ -475,51 +489,6 @@ void testGrowableListOperations(List list) { |
list.replaceRange(6, 8, []); |
Expect.listEquals([1, 2, 6, 6, 5, 0, 2, 3, 2, 1], list); |
- // Operations that change the length cause ConcurrentModificationError. |
- void testConcurrentModification(action()) { |
- testIterator(int when) { |
- list.length = 4; |
- list.setAll(0, [0, 1, 2, 3]); |
- Expect.throws(() { |
- for (var element in list) { |
- if (element == when) action(); |
- } |
- }, (e) => e is ConcurrentModificationError); |
- } |
- |
- testForEach(int when) { |
- list.length = 4; |
- list.setAll(0, [0, 1, 2, 3]); |
- Expect.throws(() { |
- list.forEach((var element) { |
- if (element == when) action(); |
- }); |
- }, (e) => e is ConcurrentModificationError); |
- } |
- |
- // Test the change at different points of the iteration. |
- testIterator(0); |
- testIterator(1); |
- testIterator(3); |
- testForEach(0); |
- testForEach(1); |
- testForEach(3); |
- } |
- |
- testConcurrentModification(() => list.add(5)); |
- testConcurrentModification(() => list.addAll([5, 6])); |
- testConcurrentModification(() => list.removeLast()); |
- for (int i = 0; i < 4; i++) { |
- testConcurrentModification(() => list.remove(i)); |
- testConcurrentModification(() => list.removeAt(i)); |
- testConcurrentModification(() => list.removeWhere((x) => x == i)); |
- testConcurrentModification(() => list.retainWhere((x) => x != i)); |
- testConcurrentModification(() => list.insert(i, 5)); |
- testConcurrentModification(() => list.insertAll(i, [5, 6])); |
- testConcurrentModification(() => list.removeRange(i, i + 1)); |
- testConcurrentModification(() => list.replaceRange(i, i + 1, [5, 6])); |
- } |
- |
// Any operation that doesn't change the length should be safe for iteration. |
testSafeConcurrentModification(action()) { |
list.length = 4; |