Chromium Code Reviews| Index: tests/corelib/list_test.dart |
| diff --git a/tests/corelib/list_test.dart b/tests/corelib/list_test.dart |
| index 5187ee84ccce4cb210548b52923e1db406914798..b075cbd80d0c28b9f78e8b56c902aabdb7dbcd21 100644 |
| --- a/tests/corelib/list_test.dart |
| +++ b/tests/corelib/list_test.dart |
| @@ -46,6 +46,65 @@ void main() { |
| testTypedGrowableList(new Int32List(0).toList()); |
| testListConstructor(); |
| + |
| + // Regression for issue http://dartbug.com/24295 |
| + testIndex(list, name) { |
| + try { |
| + list[list.length]; |
|
sra1
2015/09/09 17:16:05
Could also test that an index outside the 2^32 ran
Lasse Reichstein Nielsen
2015/09/10 10:08:54
Good point.
|
| + } catch (err, s) { |
| + Expect.isTrue(err is RangeError, name); |
| + Expect.equals(list.length, err.invalidValue, "$name value"); |
| + Expect.equals(list.length - 1, err.end, "$name end"); |
| + Expect.equals(0, err.start, "$name start"); |
| + } |
| + } |
| + // Slices. |
| + testSlice(list, name) { |
| + try { |
| + list.sublist(0, list.length + 1); |
| + } catch (err) { |
| + Expect.isTrue(err is RangeError, "$name[0:l+1] is-error: $err"); |
| + Expect.equals("end", err.name, "$name[0:l+1] name"); |
| + Expect.equals(list.length + 1, err.invalidValue, "$name[0:l+1] value"); |
| + Expect.equals(0, err.start, "$name[0:l+1] start"); |
| + Expect.equals(list.length, err.end, "$name[0:l+1] end"); |
| + } |
| + try { |
| + list.sublist(list.length + 1, list.length + 1); |
| + } catch (err) { |
| + Expect.isTrue(err is RangeError, "$name[l+1:l+1] is-error: $err"); |
| + Expect.equals("start", err.name, "$name[l+1:l+1] name"); |
| + Expect.equals(list.length + 1, err.invalidValue, "$name[l+1:l+1] value"); |
| + Expect.equals(0, err.start, "$name[l+1:l+1] start"); |
| + Expect.equals(list.length, err.end, "$name[l+1:l+1] end"); |
| + } |
| + if (list.length == 0) return; |
| + try { |
| + list.sublist(1, list.length + 1); |
| + } catch (err) { |
| + Expect.isTrue(err is RangeError, "$name[1:l+1] is-error: $err"); |
| + Expect.equals("end", err.name, "$name[1:l+1] name"); |
| + Expect.equals(list.length + 1, err.invalidValue, "$name[1:l+1] value"); |
| + Expect.equals(1, err.start, "$name[1:l+1] start"); |
| + Expect.equals(list.length, err.end, "$name[1:l+1] end"); |
| + } |
| + } |
| + testRangeErrors(list, name) { |
| + testIndex(list, "$name#${list.length} index"); |
| + testSlice(list, "$name#${list.length} slice"); |
| + } |
| + // Empty lists. |
| + testRangeErrors([], "list"); |
| + testRangeErrors(new List(0), "fixed-list"); |
| + testRangeErrors(const [], "const-list"); |
|
sra1
2015/09/09 17:16:05
Also new List.unmodifiable([])
Lasse Reichstein Nielsen
2015/09/10 10:08:54
Good idea. Done.
|
| + testRangeErrors(new Uint8List(0), "typed-list"); |
| + testRangeErrors([1, 2, 3].sublist(1, 1), "sub-list"); |
| + // Non-empty lists. |
| + testRangeErrors([1, 2, 3], "list"); |
| + testRangeErrors(new List(3), "fixed-list"); |
| + testRangeErrors(const [1, 2, 3], "const-list"); |
| + testRangeErrors(new Uint8List(3), "typed-list"); |
| + testRangeErrors([1, 2, 3, 4, 5].sublist(1, 3), "sub-list"); |
| } |
| void testLength(int length, List list) { |
| @@ -475,6 +534,7 @@ void testGrowableListOperations(List list) { |
| class Yes { |
| operator ==(var other) => true; |
| + int get hashCode => 0; |
| } |
| class MyList<E> extends ListBase<E> { |