blob: eb0933ae544374ebf7d2408e0c7939de677caf63 [file] [log] [blame]
// 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);
}