blob: f0faf5373c246ae800d826f0d17df807c7d47fed [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);