Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(963)

Side by Side Diff: tests/lib/mirrors/generics_test.dart

Issue 24197003: Support typeVariables in ClassMirror. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Addressed comments. Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « sdk/lib/_internal/lib/js_mirrors.dart ('k') | tests/lib/mirrors/mirrors_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library test.type_arguments_test; 5 library test.type_arguments_test;
6 6
7 import 'dart:mirrors'; 7 import 'dart:mirrors';
8 8
9 import 'package:expect/expect.dart'; 9 import 'package:expect/expect.dart';
10 10
11 class A<T> {} 11 class A<T> {}
12 class Z<T> {}
12 class B extends A {} // Same as class B extends A<dynamic>. 13 class B extends A {} // Same as class B extends A<dynamic>.
13 class C extends A 14 class C extends A
14 <num, int> // TODO(zarah): Should be "01: static warning". 15 <num, int> // TODO(zarah): Should be "01: static warning".
15 {} // Same as class C extends A<dynamic>. 16 {} // Same as class C extends A<dynamic>.
16 class D extends A<int> {} 17 class D extends A<int> {}
17 class E<S> extends A<S> {} 18 class E<S> extends A<S> {}
18 class F<R> extends A<int> {} 19 class F<R> extends A<int> {}
19 class G {} 20 class G {}
20 class H<A,B,C> {} 21 class H<A,B,C> {}
22 class I extends G {}
21 23
22 typeParameters(mirror, parameterNames) { 24 typeParameters(mirror, parameterNames) {
23 Expect.listEquals(parameterNames.map((n) => new Symbol(n)).toList(), 25 Expect.listEquals(parameterNames.map((n) => new Symbol(n)).toList(),
24 mirror.typeVariables.map((v) => v.simpleName).toList()); 26 mirror.typeVariables.map((v) => v.simpleName).toList());
25 } 27 }
26 28
27 typeArguments(mirror, argumentMirrors) { 29 typeArguments(mirror, argumentMirrors) {
28 Expect.listEquals(argumentMirrors, mirror.typeArguments); 30 Expect.listEquals(argumentMirrors, mirror.typeArguments);
29 } 31 }
30 32
31 main() { 33 main() {
32 // Declarations. 34 // Declarations.
33 typeParameters(reflectClass(A), ['T']); /// 01: ok 35 typeParameters(reflectClass(A), ['T']);
34 typeParameters(reflectClass(B), []); /// 01: ok 36 typeParameters(reflectClass(G), []);
35 typeParameters(reflectClass(C), []); /// 01: ok 37 typeParameters(reflectClass(B), []);
36 typeParameters(reflectClass(D), []); /// 01: ok 38 typeParameters(reflectClass(C), []);
37 typeParameters(reflectClass(E), ['S']); /// 01: ok 39 typeParameters(reflectClass(D), []);
38 typeParameters(reflectClass(F), ['R']); /// 01: ok 40 typeParameters(reflectClass(E), ['S']);
39 typeParameters(reflectClass(G), []); /// 01: ok 41 typeParameters(reflectClass(F), ['R']);
42 typeParameters(reflectClass(G), []);
43 typeParameters(reflectClass(H), ['A', 'B', 'C']);
44 typeParameters(reflectClass(I), []);
40 45
41 typeArguments(reflectClass(A), []); 46 typeArguments(reflectClass(A), []);
42 typeArguments(reflectClass(B), []); 47 typeArguments(reflectClass(B), []);
43 typeArguments(reflectClass(C), []); 48 typeArguments(reflectClass(C), []);
44 typeArguments(reflectClass(D), []); 49 typeArguments(reflectClass(D), []);
45 typeArguments(reflectClass(E), []); 50 typeArguments(reflectClass(E), []);
46 typeArguments(reflectClass(F), []); 51 typeArguments(reflectClass(F), []);
47 typeArguments(reflectClass(G), []); 52 typeArguments(reflectClass(G), []);
53 typeArguments(reflectClass(H), []);
54 typeArguments(reflectClass(I), []);
48 55
49 Expect.isTrue(reflectClass(A).isOriginalDeclaration); 56 Expect.isTrue(reflectClass(A).isOriginalDeclaration);
50 Expect.isTrue(reflectClass(B).isOriginalDeclaration); 57 Expect.isTrue(reflectClass(B).isOriginalDeclaration);
51 Expect.isTrue(reflectClass(C).isOriginalDeclaration); 58 Expect.isTrue(reflectClass(C).isOriginalDeclaration);
52 Expect.isTrue(reflectClass(D).isOriginalDeclaration); 59 Expect.isTrue(reflectClass(D).isOriginalDeclaration);
53 Expect.isTrue(reflectClass(E).isOriginalDeclaration); 60 Expect.isTrue(reflectClass(E).isOriginalDeclaration);
54 Expect.isTrue(reflectClass(F).isOriginalDeclaration); 61 Expect.isTrue(reflectClass(F).isOriginalDeclaration);
55 Expect.isTrue(reflectClass(G).isOriginalDeclaration); 62 Expect.isTrue(reflectClass(G).isOriginalDeclaration);
63 Expect.isTrue(reflectClass(H).isOriginalDeclaration);
64 Expect.isTrue(reflectClass(I).isOriginalDeclaration);
56 65
57 Expect.equals(reflectClass(A), reflectClass(A).originalDeclaration); 66 Expect.equals(reflectClass(A), reflectClass(A).originalDeclaration);
58 Expect.equals(reflectClass(B), reflectClass(B).originalDeclaration); 67 Expect.equals(reflectClass(B), reflectClass(B).originalDeclaration);
59 Expect.equals(reflectClass(C), reflectClass(C).originalDeclaration); 68 Expect.equals(reflectClass(C), reflectClass(C).originalDeclaration);
60 Expect.equals(reflectClass(D), reflectClass(D).originalDeclaration); 69 Expect.equals(reflectClass(D), reflectClass(D).originalDeclaration);
61 Expect.equals(reflectClass(E), reflectClass(E).originalDeclaration); 70 Expect.equals(reflectClass(E), reflectClass(E).originalDeclaration);
62 Expect.equals(reflectClass(F), reflectClass(F).originalDeclaration); 71 Expect.equals(reflectClass(F), reflectClass(F).originalDeclaration);
63 Expect.equals(reflectClass(G), reflectClass(G).originalDeclaration); 72 Expect.equals(reflectClass(G), reflectClass(G).originalDeclaration);
73 Expect.equals(reflectClass(H), reflectClass(H).originalDeclaration);
74 Expect.equals(reflectClass(I), reflectClass(I).originalDeclaration);
64 75
65 // Instantiations. 76 // Instantiations.
66 typeParameters(reflect(new A<num>()).type, ['T']); /// 01: ok 77 typeParameters(reflect(new A<num>()).type, ['T']);
67 typeParameters(reflect(new B<num>()).type, []); /// 01: ok 78 typeParameters(reflect(new B<num>()).type, []);
68 typeParameters(reflect(new C()).type, []); /// 01: ok 79 typeParameters(reflect(new C()).type, []);
69 typeParameters(reflect(new D()).type, []); /// 01: ok 80 typeParameters(reflect(new D()).type, []);
70 typeParameters(reflect(new E()).type, ['S']); /// 01: ok 81 typeParameters(reflect(new E()).type, ['S']);
71 typeParameters(reflect(new F<num>()).type, ['R']); /// 01: ok 82 typeParameters(reflect(new F<num>()).type, ['R']);
72 typeParameters(reflect(new G()).type, []); /// 01: ok 83 typeParameters(reflect(new G()).type, []);
73 typeParameters(reflect(new H()).type, ['A', 'B', 'C']); /// 01: ok 84 typeParameters(reflect(new H()).type, ['A', 'B', 'C']);
85 typeParameters(reflect(new I()).type, []);
74 86
75 var numMirror = reflectClass(num); 87 var numMirror = reflectClass(num);
76 var dynamicMirror = currentMirrorSystem().dynamicType; 88 var dynamicMirror = currentMirrorSystem().dynamicType;
77 typeArguments(reflect(new A<num>()).type, [numMirror]); 89 typeArguments(reflect(new A<num>()).type, [numMirror]);
78 typeArguments(reflect(new A<dynamic>()).type, [dynamicMirror]); /// 01: ok 90 typeArguments(reflect(new A<dynamic>()).type, [dynamicMirror]); /// 01: ok
79 typeArguments(reflect(new A()).type, [dynamicMirror]); /// 01: ok 91 typeArguments(reflect(new A()).type, [dynamicMirror]); /// 01: ok
80 typeArguments(reflect(new B()).type, []); 92 typeArguments(reflect(new B()).type, []);
81 typeArguments(reflect(new C()).type, []); 93 typeArguments(reflect(new C()).type, []);
82 typeArguments(reflect(new D()).type, []); 94 typeArguments(reflect(new D()).type, []);
83 typeArguments(reflect(new E<num>()).type, [numMirror]); 95 typeArguments(reflect(new E<num>()).type, [numMirror]);
84 typeArguments(reflect(new E<dynamic>()).type, [dynamicMirror]); /// 01: ok 96 typeArguments(reflect(new E<dynamic>()).type, [dynamicMirror]); /// 01: ok
85 typeArguments(reflect(new E()).type, [dynamicMirror]); /// 01: ok 97 typeArguments(reflect(new E()).type, [dynamicMirror]); /// 01: ok
86 typeArguments(reflect(new F<num>()).type, [numMirror]); 98 typeArguments(reflect(new F<num>()).type, [numMirror]);
87 typeArguments(reflect(new F<dynamic>()).type, [dynamicMirror]); /// 01: ok 99 typeArguments(reflect(new F<dynamic>()).type, [dynamicMirror]); /// 01: ok
88 typeArguments(reflect(new F()).type, [dynamicMirror]); /// 01: ok 100 typeArguments(reflect(new F()).type, [dynamicMirror]); /// 01: ok
89 typeArguments(reflect(new G()).type, []); 101 typeArguments(reflect(new G()).type, []);
90 typeArguments(reflect(new H<dynamic, num, dynamic>()).type, /// 01: ok 102 typeArguments(reflect(new H<dynamic, num, dynamic>()).type, /// 01: ok
91 [dynamicMirror, numMirror, dynamicMirror]); /// 01: ok 103 [dynamicMirror, numMirror, dynamicMirror]); /// 01: ok
104 typeArguments(reflect(new I()).type, []);
92 105
93 Expect.isFalse(reflect(new A<num>()).type.isOriginalDeclaration); 106 Expect.isFalse(reflect(new A<num>()).type.isOriginalDeclaration);
94 Expect.isTrue(reflect(new B()).type.isOriginalDeclaration); 107 Expect.isTrue(reflect(new B()).type.isOriginalDeclaration);
95 Expect.isTrue(reflect(new C()).type.isOriginalDeclaration); 108 Expect.isTrue(reflect(new C()).type.isOriginalDeclaration);
96 Expect.isTrue(reflect(new D()).type.isOriginalDeclaration); 109 Expect.isTrue(reflect(new D()).type.isOriginalDeclaration);
97 Expect.isFalse(reflect(new E<num>()).type.isOriginalDeclaration); 110 Expect.isFalse(reflect(new E<num>()).type.isOriginalDeclaration);
98 Expect.isFalse(reflect(new F<num>()).type.isOriginalDeclaration); 111 Expect.isFalse(reflect(new F<num>()).type.isOriginalDeclaration);
99 Expect.isTrue(reflect(new G()).type.isOriginalDeclaration); 112 Expect.isTrue(reflect(new G()).type.isOriginalDeclaration);
100 Expect.isFalse(reflect(new H()).type.isOriginalDeclaration); /// 01: ok 113 Expect.isFalse(reflect(new H()).type.isOriginalDeclaration); /// 01: ok
114 Expect.isTrue(reflect(new I()).type.isOriginalDeclaration);
101 115
102 Expect.equals(reflectClass(A), 116 Expect.equals(reflectClass(A),
103 reflect(new A<num>()).type.originalDeclaration); 117 reflect(new A<num>()).type.originalDeclaration);
104 Expect.equals(reflectClass(B), 118 Expect.equals(reflectClass(B),
105 reflect(new B()).type.originalDeclaration); 119 reflect(new B()).type.originalDeclaration);
106 Expect.equals(reflectClass(C), 120 Expect.equals(reflectClass(C),
107 reflect(new C()).type.originalDeclaration); 121 reflect(new C()).type.originalDeclaration);
108 Expect.equals(reflectClass(D), 122 Expect.equals(reflectClass(D),
109 reflect(new D()).type.originalDeclaration); 123 reflect(new D()).type.originalDeclaration);
110 Expect.equals(reflectClass(E), 124 Expect.equals(reflectClass(E),
111 reflect(new E<num>()).type.originalDeclaration); 125 reflect(new E<num>()).type.originalDeclaration);
112 Expect.equals(reflectClass(F), 126 Expect.equals(reflectClass(F),
113 reflect(new F<num>()).type.originalDeclaration); 127 reflect(new F<num>()).type.originalDeclaration);
114 Expect.equals(reflectClass(G), 128 Expect.equals(reflectClass(G),
115 reflect(new G()).type.originalDeclaration); 129 reflect(new G()).type.originalDeclaration);
116 Expect.equals(reflectClass(H), 130 Expect.equals(reflectClass(H),
117 reflect(new H()).type.originalDeclaration); 131 reflect(new H()).type.originalDeclaration);
132 Expect.equals(reflectClass(I),
133 reflect(new I()).type.originalDeclaration);
118 134
119 Expect.notEquals(reflect(new A<num>()).type, 135 Expect.notEquals(reflect(new A<num>()).type,
120 reflect(new A<num>()).type.originalDeclaration); 136 reflect(new A<num>()).type.originalDeclaration);
121 Expect.equals(reflect(new B()).type, 137 Expect.equals(reflect(new B()).type,
122 reflect(new B()).type.originalDeclaration); 138 reflect(new B()).type.originalDeclaration);
123 Expect.equals(reflect(new C()).type, 139 Expect.equals(reflect(new C()).type,
124 reflect(new C()).type.originalDeclaration); 140 reflect(new C()).type.originalDeclaration);
125 Expect.equals(reflect(new D()).type, 141 Expect.equals(reflect(new D()).type,
126 reflect(new D()).type.originalDeclaration); 142 reflect(new D()).type.originalDeclaration);
127 Expect.notEquals(reflect(new E<num>()).type, 143 Expect.notEquals(reflect(new E<num>()).type,
128 reflect(new E<num>()).type.originalDeclaration); 144 reflect(new E<num>()).type.originalDeclaration);
129 Expect.notEquals(reflect(new F<num>()).type, 145 Expect.notEquals(reflect(new F<num>()).type,
130 reflect(new F<num>()).type.originalDeclaration); 146 reflect(new F<num>()).type.originalDeclaration);
131 Expect.equals(reflect(new G()).type, 147 Expect.equals(reflect(new G()).type,
132 reflect(new G()).type.originalDeclaration); 148 reflect(new G()).type.originalDeclaration);
133 Expect.notEquals(reflect(new H()).type, /// 01: ok 149 Expect.notEquals(reflect(new H()).type, /// 01: ok
134 reflect(new H()).type.originalDeclaration); /// 01: ok 150 reflect(new H()).type.originalDeclaration); /// 01: ok
151 Expect.equals(reflect(new I()).type,
152 reflect(new I()).type.originalDeclaration);
135 153
136 // Library members are all uninstantaited generics or non-generics. 154 // Library members are all uninstantaited generics or non-generics.
137 currentMirrorSystem().libraries.values.forEach((libraryMirror) { 155 currentMirrorSystem().libraries.values.forEach((libraryMirror) {
138 libraryMirror.classes.values.forEach((classMirror) { 156 libraryMirror.classes.values.forEach((classMirror) {
139 // TODO(12282): Deal with generic typedefs. 157 // TODO(12282): Deal with generic typedefs.
140 if (classMirror is! TypedefMirror) { 158 if (classMirror is! TypedefMirror) {
141 Expect.isTrue(classMirror.isOriginalDeclaration); 159 Expect.isTrue(classMirror.isOriginalDeclaration);
142 Expect.equals(classMirror, classMirror.originalDeclaration); 160 Expect.equals(classMirror, classMirror.originalDeclaration);
143 } 161 }
144 }); 162 });
145 }); 163 });
164
165 Expect.equals(reflectClass(A).typeVariables[0].owner, reflectClass(A));
166 Expect.equals(reflectClass(Z).typeVariables[0].owner, reflectClass(Z));
167 Expect.notEquals(reflectClass(A).typeVariables[0],
168 reflectClass(Z).typeVariables[0]);
169 Expect.equals(reflectClass(A).typeVariables[0],
170 reflectClass(A).typeVariables[0]);
146 } 171 }
OLDNEW
« no previous file with comments | « sdk/lib/_internal/lib/js_mirrors.dart ('k') | tests/lib/mirrors/mirrors_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698