| Index: tests/lib_strong/async/future_or_bad_type_test.dart
|
| diff --git a/tests/lib_strong/async/future_or_bad_type_test.dart b/tests/lib_strong/async/future_or_bad_type_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..eb0933ae544374ebf7d2408e0c7939de677caf63
|
| --- /dev/null
|
| +++ b/tests/lib_strong/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>);
|
| + Expect.isTrue(499 is FutureOr<Does<Not<Exist>>>); // //# 00: static type warning
|
| + Expect.isTrue(499 is FutureOr<A, A>); // //# 01: static type warning
|
| +
|
| + var a = new A();
|
| + Expect.isTrue(a.toString() is String);
|
| +}
|
|
|