// Copyright (c) 2011, 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. import "package:expect/expect.dart"; // Checks that a method with an instantiated return type can override a method // with a generic return type. typedef V RemoveFunctionType(K key); class MapBase { K remove(K key) { throw 'Must be implemented'; } void tests() { Expect.isTrue(this is MapBase); // `remove` takes an argument which is covariant-by-class, so // the tear-off has dynamic type `int Function(Object)`. Expect.isTrue(remove is RemoveFunctionType); Expect.isTrue(remove is RemoveFunctionType); Expect.isTrue(remove is RemoveFunctionType); Expect.isTrue(remove is RemoveFunctionType, int>); } } class MethodOverrideTest extends MapBase { String remove(String key) { throw 'Must be implemented'; } void tests() { Expect.isTrue(this is MethodOverrideTest); Expect.isTrue(this is MapBase); // `remove` takes an argument which is covariant-by-class because // an overridden method does so, and hence the tear-off has dynamic // type `String Function(Object)`; so does `super.remove`. Expect.isTrue(remove is RemoveFunctionType); Expect.isTrue(remove is RemoveFunctionType); Expect.isTrue(remove is! RemoveFunctionType); Expect.isTrue(super.remove is RemoveFunctionType); Expect.isTrue(super.remove is RemoveFunctionType); Expect.isTrue(super.remove is! RemoveFunctionType); } } main() { new MapBase().tests(); new MethodOverrideTest().tests(); }