| Index: tests/language_2/covariant_tear_off_type_test.dart
|
| diff --git a/tests/language_2/covariant_tear_off_type_test.dart b/tests/language_2/covariant_tear_off_type_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c3a848c1f0fc13094b4c4773c74e372c2dc80cc1
|
| --- /dev/null
|
| +++ b/tests/language_2/covariant_tear_off_type_test.dart
|
| @@ -0,0 +1,27 @@
|
| +// Copyright (c) 2017, 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";
|
| +
|
| +typedef U F<T, U>(T x);
|
| +
|
| +class C<T> {
|
| + T f(List<T> x) {}
|
| +}
|
| +
|
| +F<List<num>, num> g(C<num> c) {
|
| + return c.f;
|
| +}
|
| +
|
| +void main() {
|
| + var tearoff = g(new C<int>());
|
| + // Since C.f's x parameter is covariant, its type is changed to Object when
|
| + // determining the type of the tearoff. So the type of the tearoff should be
|
| + // `(Object) -> int`. (Not, for example, `(List<Object>) -> int` or
|
| + // `(List<Object>) -> Object`)
|
| + Expect.isTrue(tearoff is F<Object, int>);
|
| + // Because the function accepts any object, we can pass strings to it. This
|
| + // will not work in Dart 1.
|
| + Expect.isTrue(tearoff is F<String, int>);
|
| +}
|
|
|