Files
sdk/tests/language_strong/generic_methods_local_variable_declaration_test.dart
T
Dmitry Stefantsov e2c823a339 Add tests for generic methods in strong mode
The tests cover some basic cases of generic methods usage, so some tests
for corner cases may be added later. The tests are put into
'tests/language_strong' directory, and they are currently skipped by the
test system as described in the file 'language_strong.status'.

R=asgerf@google.com, eernst@google.com, floitsch@google.com, leafp@google.com

Review-Url: https://codereview.chromium.org/2737933002 .
2017-03-10 14:23:34 +01:00

51 lines
1.0 KiB
Dart

// 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");
}