|  | // 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"; | 
|  |  | 
|  | // Dart test for testing out of range exceptions on arrays, and the content | 
|  | // of range_error toString(). | 
|  |  | 
|  | void main() { | 
|  | testRead(); | 
|  | testWrite(); | 
|  | testToString(); | 
|  | } | 
|  |  | 
|  | void testRead() { | 
|  | testListRead([], 0); | 
|  | testListRead([], -1); | 
|  | testListRead([], 1); | 
|  |  | 
|  | var list = [1]; | 
|  | testListRead(list, -1); | 
|  | testListRead(list, 1); | 
|  |  | 
|  | list = new List(1); | 
|  | testListRead(list, -1); | 
|  | testListRead(list, 1); | 
|  |  | 
|  | list = new List(); | 
|  | testListRead(list, -1); | 
|  | testListRead(list, 0); | 
|  | testListRead(list, 1); | 
|  | } | 
|  |  | 
|  | void testWrite() { | 
|  | testListWrite([], 0); | 
|  | testListWrite([], -1); | 
|  | testListWrite([], 1); | 
|  |  | 
|  | var list = [1]; | 
|  | testListWrite(list, -1); | 
|  | testListWrite(list, 1); | 
|  |  | 
|  | list = new List(1); | 
|  | testListWrite(list, -1); | 
|  | testListWrite(list, 1); | 
|  |  | 
|  | list = new List(); | 
|  | testListWrite(list, -1); | 
|  | testListWrite(list, 0); | 
|  | testListWrite(list, 1); | 
|  | } | 
|  |  | 
|  | void testToString() { | 
|  | for (var name in [null, "THENAME"]) { | 
|  | for (var message in [null, "THEMESSAGE"]) { | 
|  | var value = 37; | 
|  | for (var re in [ | 
|  | new ArgumentError.value(value, name, message), | 
|  | new RangeError.value(value, name, message), | 
|  | new RangeError.index(value, [], name, message), | 
|  | new RangeError.range(value, 0, 24, name, message) | 
|  | ]) { | 
|  | var str = re.toString(); | 
|  | if (name != null) Expect.isTrue(str.contains(name), "$name in $str"); | 
|  | if (message != null) | 
|  | Expect.isTrue(str.contains(message), "$message in $str"); | 
|  | Expect.isTrue(str.contains("$value"), "$value in $str"); | 
|  | // No empty ':' separated parts - in that case the colon is omitted too. | 
|  | Expect.isFalse(str.contains(new RegExp(":\s*:"))); | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | void testListRead(list, index) { | 
|  | var exception = null; | 
|  | try { | 
|  | var e = list[index]; | 
|  | } on RangeError catch (e) { | 
|  | exception = e; | 
|  | } | 
|  | Expect.equals(true, exception != null); | 
|  | } | 
|  |  | 
|  | void testListWrite(list, index) { | 
|  | var exception = null; | 
|  | try { | 
|  | list[index] = null; | 
|  | } on RangeError catch (e) { | 
|  | exception = e; | 
|  | } | 
|  | Expect.equals(true, exception != null); | 
|  | } |