| Index: dart/tests/language/type_error_test.dart
|
| diff --git a/dart/tests/language/type_error_test.dart b/dart/tests/language/type_error_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..54a566d67aec0cfc2ff299d9c92c3e21d2ee6b03
|
| --- /dev/null
|
| +++ b/dart/tests/language/type_error_test.dart
|
| @@ -0,0 +1,194 @@
|
| +// Copyright (c) 2012, 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.
|
| +
|
| +// Test that various type errors doesn't invoke user-defined code
|
| +// during error reporting.
|
| +
|
| +class MyClass {}
|
| +
|
| +class IntTypeError {
|
| + toString() {
|
| + int value = wrap(this);
|
| + return super.toString();
|
| + }
|
| +}
|
| +
|
| +class StringTypeError {
|
| + toString() {
|
| + String value = wrap(this);
|
| + return super.toString();
|
| + }
|
| +}
|
| +
|
| +class DoubleTypeError {
|
| + toString() {
|
| + double value = wrap(this);
|
| + return super.toString();
|
| + }
|
| +}
|
| +
|
| +class NumTypeError {
|
| + toString() {
|
| + num value = wrap(this);
|
| + return super.toString();
|
| + }
|
| +}
|
| +
|
| +class BoolTypeError {
|
| + toString() {
|
| + bool value = wrap(this);
|
| + return super.toString();
|
| + }
|
| +}
|
| +
|
| +class FunctionTypeError {
|
| + toString() {
|
| + Function value = wrap(this);
|
| + return super.toString();
|
| + }
|
| +}
|
| +
|
| +class MyClassTypeError {
|
| + toString() {
|
| + MyClass value = wrap(this);
|
| + return super.toString();
|
| + }
|
| +}
|
| +
|
| +class ListTypeError {
|
| + toString() {
|
| + List value = wrap(this);
|
| + return super.toString();
|
| + }
|
| +}
|
| +
|
| +class IntCastError {
|
| + toString() {
|
| + wrap(this) as int;
|
| + return super.toString();
|
| + }
|
| +}
|
| +
|
| +class StringCastError {
|
| + toString() {
|
| + wrap(this) as String;
|
| + return super.toString();
|
| + }
|
| +}
|
| +
|
| +class DoubleCastError {
|
| + toString() {
|
| + wrap(this) as double;
|
| + return super.toString();
|
| + }
|
| +}
|
| +
|
| +class NumCastError {
|
| + toString() {
|
| + wrap(this) as num;
|
| + return super.toString();
|
| + }
|
| +}
|
| +
|
| +class BoolCastError {
|
| + toString() {
|
| + wrap(this) as bool;
|
| + return super.toString();
|
| + }
|
| +}
|
| +
|
| +class FunctionCastError {
|
| + toString() {
|
| + wrap(this) as Function;
|
| + return super.toString();
|
| + }
|
| +}
|
| +
|
| +class MyClassCastError {
|
| + toString() {
|
| + wrap(this) as MyClass;
|
| + return super.toString();
|
| + }
|
| +}
|
| +
|
| +class ListCastError {
|
| + toString() {
|
| + wrap(this) as List;
|
| + return super.toString();
|
| + }
|
| +}
|
| +
|
| +/// Defeat optimizations of type checks.
|
| +wrap(e) {
|
| + if (new Date.now().year == 1980) return null;
|
| + return e;
|
| +}
|
| +
|
| +checkTypeError(o) {
|
| + try {
|
| + print(o);
|
| + } on TypeError catch (e) {
|
| + print(e); // This might provoke an error.
|
| + if (assertionsEnabled) return; // Expected type error.
|
| + throw; // Rethrow unexpected type error.
|
| + }
|
| + if (assertionsEnabled) {
|
| + throw 'expected TypeError';
|
| + }
|
| +}
|
| +
|
| +checkAssert(o) {
|
| + try {
|
| + assert(o);
|
| + } on TypeError catch (e) {
|
| + print(e); // This might provoke an error.
|
| + if (!assertionsEnabled) throw; // Unexpected error.
|
| + }
|
| +}
|
| +
|
| +checkCastError(o) {
|
| + try {
|
| + print(o);
|
| + } on TypeError catch (e) {
|
| + print('unexpected type error: ${NoSuchMethodError.safeToString(e)}');
|
| + throw; // Unexpected type error.
|
| + } on CastException catch (e) {
|
| + print(e); // This might provoke an error.
|
| + return; // Expected a cast error.
|
| + }
|
| + throw 'expected CastException';
|
| +}
|
| +
|
| +bool assertionsEnabled = false;
|
| +
|
| +main() {
|
| + assert(assertionsEnabled = true);
|
| +
|
| + checkTypeError(new IntTypeError());
|
| + checkTypeError(new StringTypeError());
|
| + checkTypeError(new DoubleTypeError());
|
| + checkTypeError(new NumTypeError());
|
| + checkTypeError(new BoolTypeError());
|
| + checkTypeError(new FunctionTypeError());
|
| + checkTypeError(new MyClassTypeError());
|
| + checkTypeError(new ListTypeError());
|
| +
|
| + checkAssert(new IntTypeError());
|
| + checkAssert(new StringTypeError());
|
| + checkAssert(new DoubleTypeError());
|
| + checkAssert(new NumTypeError());
|
| + checkAssert(new BoolTypeError());
|
| + checkAssert(new FunctionTypeError());
|
| + checkAssert(new MyClassTypeError());
|
| + checkAssert(new ListTypeError());
|
| +
|
| + checkCastError(new IntCastError());
|
| + checkCastError(new StringCastError());
|
| + checkCastError(new DoubleCastError());
|
| + checkCastError(new NumCastError());
|
| + checkCastError(new BoolCastError());
|
| + checkCastError(new FunctionCastError());
|
| + checkCastError(new MyClassCastError());
|
| + checkCastError(new ListCastError());
|
| +}
|
|
|