| // 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. |
| |
| // Test that a type variable can be used to declare local variables, and that |
| // these local variables are of correct type. |
| |
| library generic_methods_local_variable_declaration_test; |
| |
| import "package:expect/expect.dart"; |
| |
| class X {} |
| |
| abstract class Generator<T> { |
| T generate(); |
| } |
| |
| class A implements Generator<A> { |
| generate() { |
| return new A(); |
| } |
| |
| String toString() => "instance of A"; |
| } |
| |
| class B implements Generator<B> { |
| generate() { |
| return new B(); |
| } |
| |
| String toString() => "instance of B"; |
| } |
| |
| String fun<T extends Generator<T>>(T t) { |
| T another = t.generate(); |
| String anotherName = "$another"; |
| |
| Expect.isTrue(another is T); |
| Expect.isTrue(another is Generator<T>); |
| |
| return anotherName; |
| } |
| |
| main() { |
| A a = new A(); |
| B b = new B(); |
| |
| Expect.equals(fun<A>(a), "instance of A"); |
| Expect.equals(fun<B>(b), "instance of B"); |
| } |