| Index: tests/compiler/dart2js_extra/consistent_index_error_string_test.dart
|
| diff --git a/tests/compiler/dart2js_extra/consistent_index_error_string_test.dart b/tests/compiler/dart2js_extra/consistent_index_error_string_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..836a13d7a2caf7115f55f3c2459fe5aa3238e0c7
|
| --- /dev/null
|
| +++ b/tests/compiler/dart2js_extra/consistent_index_error_string_test.dart
|
| @@ -0,0 +1,147 @@
|
| +// Copyright (c) 2015, 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.
|
| +
|
| +import "package:expect/expect.dart";
|
| +import "dart:typed_data";
|
| +
|
| +// Test that optimized indexing and slow path indexing produce the same error.
|
| +
|
| +@NoInline()
|
| +@AssumeDynamic()
|
| +confuse(x) => x;
|
| +
|
| +class TooHigh {
|
| + static load1() {
|
| + var a = confuse(true) ? 'AB' : 'ABCDE';
|
| + try {
|
| + return confuse(a)[3]; // dynamic receiver for indexer.
|
| + } catch (e) {
|
| + return e;
|
| + }
|
| + Expect.fail('unreached');
|
| + }
|
| +
|
| + static load2() {
|
| + try {
|
| + confuse(load2x)(3);
|
| + } catch (e) {
|
| + return e;
|
| + }
|
| + Expect.fail('unreached');
|
| + }
|
| + static load2x(i) {
|
| + var a = confuse(true) ? 'AB' : 'ABCDE';
|
| + return a[i]; // 'a' is String of unknown length.
|
| + }
|
| +
|
| + static test() {
|
| + var e1 = load1();
|
| + var e2 = load2();
|
| + print(" A: '$e1'\n B: '$e2'");
|
| + Expect.equals('$e1', '$e2');
|
| + }
|
| +}
|
| +
|
| +class Negative {
|
| + static load1() {
|
| + var a = confuse(true) ? 'AB' : 'ABCDE';
|
| + try {
|
| + return confuse(a)[-3]; // dynamic receiver for indexer.
|
| + } catch (e) {
|
| + return e;
|
| + }
|
| + Expect.fail('unreached');
|
| + }
|
| +
|
| + static load2() {
|
| + try {
|
| + confuse(load2x)(-3);
|
| + } catch (e) {
|
| + return e;
|
| + }
|
| + Expect.fail('unreached');
|
| + }
|
| + static load2x(i) {
|
| + var a = confuse(true) ? 'AB' : 'ABCDE';
|
| + return a[i]; // 'a' is String of unknown length.
|
| + }
|
| +
|
| + static test() {
|
| + var e1 = load1();
|
| + var e2 = load2();
|
| + print(" A: '$e1'\n B: '$e2'");
|
| + Expect.equals('$e1', '$e2');
|
| + }
|
| +}
|
| +
|
| +class Empty {
|
| + static load1() {
|
| + var a = confuse(true) ? '' : 'ABCDE';
|
| + try {
|
| + return confuse(a)[-3]; // dynamic receiver for indexer.
|
| + } catch (e) {
|
| + return e;
|
| + }
|
| + Expect.fail('unreached');
|
| + }
|
| +
|
| + static load2() {
|
| + try {
|
| + confuse(load2x)(-3);
|
| + } catch (e) {
|
| + return e;
|
| + }
|
| + Expect.fail('unreached');
|
| + }
|
| + static load2x(i) {
|
| + var a = confuse(true) ? '' : 'ABCDE';
|
| + return a[i]; // 'a' is String of unknown length.
|
| + }
|
| +
|
| + static test() {
|
| + var e1 = load1();
|
| + var e2 = load2();
|
| + print(" A: '$e1'\n B: '$e2'");
|
| + Expect.equals('$e1', '$e2');
|
| + }
|
| +}
|
| +
|
| +class BadType {
|
| + static load1() {
|
| + var a = confuse(true) ? 'AB' : 'ABCDE';
|
| + try {
|
| + return confuse(a)['a']; // dynamic receiver for indexer.
|
| + } catch (e) {
|
| + return e;
|
| + }
|
| + Expect.fail('unreached');
|
| + }
|
| +
|
| + static load2() {
|
| + try {
|
| + confuse(load2x)('a');
|
| + } catch (e) {
|
| + return e;
|
| + }
|
| + Expect.fail('unreached');
|
| + }
|
| + static load2x(i) {
|
| + var a = confuse(true) ? 'AB' : 'ABCDE';
|
| + return a[i]; // 'a' is String of unknown length.
|
| + }
|
| +
|
| + static test() {
|
| + var e1 = load1();
|
| + var e2 = load2();
|
| + print(" A: '$e1'\n B: '$e2'");
|
| + Expect.equals('$e1', '$e2');
|
| + }
|
| +}
|
| +
|
| +main() {
|
| + TooHigh.test();
|
| + Negative.test();
|
| + Empty.test();
|
| + BadType.test();
|
| +}
|
|
|