| // 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); |
| } |