| Index: tests/lib/async/future_or_bad_type_test.dart
|
| diff --git a/tests/lib/async/future_or_bad_type_test.dart b/tests/lib/async/future_or_bad_type_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a74b30f6bd1b9d4831f343fabc98812113aeb37e
|
| --- /dev/null
|
| +++ b/tests/lib/async/future_or_bad_type_test.dart
|
| @@ -0,0 +1,27 @@
|
| +// Copyright (c) 2016, 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.
|
| +
|
| +// In non strong-mode, `FutureOr<T>` is dynamic, even if `T` doesn't exist.
|
| +// `FutureOr<T>` can not be used as superclass, mixin, nor can it be
|
| +// implemented (as interface).
|
| +
|
| +import 'dart:async';
|
| +import 'package:expect/expect.dart';
|
| +
|
| +class A
|
| + extends FutureOr<String> /// extends: compile-time error
|
| + extends Object with FutureOr<bool> /// with: compile-time error
|
| + implements FutureOr<int> /// implements: compile-time error
|
| +{
|
| +}
|
| +
|
| +main() {
|
| + // FutureOr<T> should be treated like `dynamic`. Dynamically the `T` is
|
| + // completely ignored. It can be a malformed type.
|
| + Expect.isTrue(499 is FutureOr<A>); /// 00: static type warning
|
| + Expect.isTrue(499 is FutureOr<Does<Not<Exist>>>); /// 01: static type warning
|
| +
|
| + var a = new A();
|
| + Expect.isTrue(a.toString() is String);
|
| +}
|
|
|