| // Copyright (c) 2015, 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. |
| |
| // @dart = 2.9 |
| |
| import 'package:expect/expect.dart'; |
| |
| class FunctionLike<T> { |
| T call(T arg) { |
| return arg; |
| } |
| } |
| |
| class Foo<T> { |
| testString() => new FunctionLike<String>() is T; |
| testInt() => new FunctionLike<int>() is T; |
| } |
| |
| class Bar<T> { |
| testString() { |
| Function f = new FunctionLike<String>(); |
| return f is T; |
| } |
| |
| testInt() { |
| Function f = new FunctionLike<int>(); |
| return f is T; |
| } |
| } |
| |
| typedef String ReturnString(Object arg); |
| typedef int ReturnInt(Object arg); |
| |
| main() { |
| { |
| var stringFoo = new Foo<ReturnString>(); |
| var intFoo = new Foo<ReturnInt>(); |
| Expect.isFalse(stringFoo.testString()); |
| Expect.isFalse(stringFoo.testInt()); |
| Expect.isFalse(intFoo.testString()); |
| Expect.isFalse(intFoo.testInt()); |
| } |
| |
| { |
| var stringBar = new Bar<ReturnString>(); |
| var intBar = new Bar<ReturnInt>(); |
| Expect.isTrue(stringBar.testString()); |
| Expect.isFalse(stringBar.testInt()); |
| Expect.isFalse(intBar.testString()); |
| Expect.isTrue(intBar.testInt()); |
| } |
| } |