Files
sdk/tests/language_2/method/override_test.dart
T
Robert Nystrom fc1b1ecc71 Move files under language_2 into subdirectories.
Change-Id: Idbcc965a27e9ffeedf5e0a1068b019de4193070f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127745
Commit-Queue: Bob Nystrom <rnystrom@google.com>
Reviewed-by: Alexander Thomas <athom@google.com>
2019-12-11 19:18:00 +00:00

56 lines
1.8 KiB
Dart

// 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, V>(K key);
class MapBase<K, V> {
K remove(K key) {
throw 'Must be implemented';
}
void tests() {
Expect.isTrue(this is MapBase<int, int>);
// `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<int, int>);
Expect.isTrue(remove is RemoveFunctionType<String, int>);
Expect.isTrue(remove is RemoveFunctionType<MapBase<int, int>, int>);
}
}
class MethodOverrideTest extends MapBase<String, String> {
String remove(String key) {
throw 'Must be implemented';
}
void tests() {
Expect.isTrue(this is MethodOverrideTest);
Expect.isTrue(this is MapBase<String, String>);
// `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<String, String>);
Expect.isTrue(remove is! RemoveFunctionType<int, int>);
Expect.isTrue(super.remove is RemoveFunctionType);
Expect.isTrue(super.remove is RemoveFunctionType<String, String>);
Expect.isTrue(super.remove is! RemoveFunctionType<int, int>);
}
}
main() {
new MapBase<int, int>().tests();
new MethodOverrideTest().tests();
}