Index: tests/lib/mirrors/type_variable_owner_test.dart |
diff --git a/tests/lib/mirrors/type_variable_owner_test.dart b/tests/lib/mirrors/type_variable_owner_test.dart |
index c71e39a909377f7e2f0b48928ca84f5e993182bd..282977d7199c032c5c3dad98e3ae652b1deda3fd 100644 |
--- a/tests/lib/mirrors/type_variable_owner_test.dart |
+++ b/tests/lib/mirrors/type_variable_owner_test.dart |
@@ -2,6 +2,9 @@ |
// 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. |
+// Owner of a type variable should be the declaration of the generic class or |
+// typedef, not an instantiation. |
+ |
library test.type_variable_owner; |
import "dart:mirrors"; |
@@ -11,7 +14,7 @@ import "package:expect/expect.dart"; |
class A<T> {} |
class B<R> extends A<R> {} |
-main() { |
+testTypeVariableOfClass() { |
ClassMirror aDecl = reflectClass(A); |
ClassMirror bDecl = reflectClass(B); |
ClassMirror aOfInt = reflect(new A<int>()).type; |
@@ -19,9 +22,6 @@ main() { |
ClassMirror bOfString = reflect(new B<String>()).type; |
ClassMirror aOfString = bOfString.superclass; |
- // Owner of a type variable should be the declaration of the generic class, |
- // not an instantiation. |
- |
Expect.equals(aDecl, aDecl.typeVariables[0].owner); |
Expect.equals(aDecl, aOfInt.typeVariables[0].owner); |
Expect.equals(aDecl, aOfR.typeVariables[0].owner); |
@@ -30,3 +30,25 @@ main() { |
Expect.equals(bDecl, bDecl.typeVariables[0].owner); |
Expect.equals(bDecl, bOfString.typeVariables[0].owner); |
} |
+ |
+typedef bool Predicate<T>(T t); |
+Predicate<List> somePredicateOfList; |
+ |
+testTypeVariableOfTypedef() { |
+ LibraryMirror thisLibrary = |
+ currentMirrorSystem().findLibrary(#test.type_variable_owner).single; |
+ |
+ TypedefMirror predicateOfDynamic = reflectType(Predicate); |
+ TypedefMirror predicateOfList = |
+ thisLibrary.variables[#somePredicateOfList].type; |
+ TypedefMirror predicateDecl = predicateOfList.originalDeclaration; |
+ |
+ Expect.equals(predicateDecl, predicateOfDynamic.typeVariables[0].owner); |
+ Expect.equals(predicateDecl, predicateOfList.typeVariables[0].owner); |
+ Expect.equals(predicateDecl, predicateDecl.typeVariables[0].owner); |
+} |
+ |
+main() { |
+ testTypeVariableOfClass(); |
+ testTypeVariableOfTypedef(); /// 01: ok |
+} |