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

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

Issue 126823004: Add TypeMirror.isSubtypeOf, TypeMirror.isAssignableTo, ClassMirror.isSubclassOf (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: mark source mirrors as failing Created 6 years, 10 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 | « tests/lib/lib.status ('k') | tests/lib/mirrors/relation_subclass_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
(Empty)
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
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.
4
5 library test.relation_assignable;
6
7 import "dart:mirrors";
8
9 import "package:expect/expect.dart";
10
11 class Superclass {}
12 class Subclass1 extends Superclass {}
13 class Subclass2 extends Superclass {}
14
15 typedef bool NumberPredicate(num x);
16 typedef bool IntegerPredicate(int x);
17 typedef bool DoublePredicate(double x);
18
19 typedef num NumberGenerator();
20 typedef int IntegerGenerator();
21 typedef double DoubleGenerator();
22
23 class A<T> {}
24 class B<T> extends A<T> {}
25 class C<T extends num> {}
26
27 test(MirrorSystem mirrors) {
28 LibraryMirror coreLibrary = mirrors.findLibrary(#dart.core);
29 LibraryMirror thisLibrary = mirrors.findLibrary(#test.relation_assignable);
30
31 // Classes.
32 TypeMirror Super = thisLibrary.declarations[#Superclass];
33 TypeMirror Sub1 = thisLibrary.declarations[#Subclass1];
34 TypeMirror Sub2 = thisLibrary.declarations[#Subclass2];
35 TypeMirror Obj = coreLibrary.declarations[#Object];
36
37 Expect.isTrue(Obj.isAssignableTo(Obj));
38 Expect.isTrue(Super.isAssignableTo(Super));
39 Expect.isTrue(Sub1.isAssignableTo(Sub1));
40 Expect.isTrue(Sub2.isAssignableTo(Sub2));
41
42 Expect.isTrue(Sub1.isAssignableTo(Super));
43 Expect.isTrue(Super.isAssignableTo(Sub1));
44
45 Expect.isTrue(Sub2.isAssignableTo(Super));
46 Expect.isTrue(Super.isAssignableTo(Sub2));
47
48 Expect.isFalse(Sub2.isAssignableTo(Sub1));
49 Expect.isFalse(Sub1.isAssignableTo(Sub2));
50
51 Expect.isTrue(Sub1.isAssignableTo(Obj));
52 Expect.isTrue(Obj.isAssignableTo(Sub1));
53
54 Expect.isTrue(Sub2.isAssignableTo(Obj));
55 Expect.isTrue(Obj.isAssignableTo(Sub2));
56
57 Expect.isTrue(Super.isAssignableTo(Obj));
58 Expect.isTrue(Obj.isAssignableTo(Super));
59
60
61 // Function typedef - argument type.
62 TypeMirror Func = coreLibrary.declarations[#Function];
63 TypedefMirror NumPred = thisLibrary.declarations[#NumberPredicate];
64 TypedefMirror IntPred = thisLibrary.declarations[#IntegerPredicate];
65 TypedefMirror DubPred = thisLibrary.declarations[#DoublePredicate];
66
67 Expect.isTrue(Func.isAssignableTo(Func));
68 Expect.isTrue(NumPred.isAssignableTo(NumPred));
69 Expect.isTrue(IntPred.isAssignableTo(IntPred));
70 Expect.isTrue(DubPred.isAssignableTo(DubPred));
71
72 Expect.isTrue(NumPred.isAssignableTo(Func));
73 Expect.isTrue(NumPred.isAssignableTo(IntPred));
74 Expect.isTrue(NumPred.isAssignableTo(DubPred));
75
76 Expect.isTrue(IntPred.isAssignableTo(Func));
77 Expect.isTrue(IntPred.isAssignableTo(NumPred));
78 Expect.isFalse(IntPred.isAssignableTo(DubPred));
79
80 Expect.isTrue(DubPred.isAssignableTo(Func));
81 Expect.isTrue(DubPred.isAssignableTo(NumPred));
82 Expect.isFalse(DubPred.isAssignableTo(IntPred));
83
84 Expect.isTrue(Func.isAssignableTo(Obj));
85 Expect.isTrue(NumPred.isAssignableTo(Obj));
86 Expect.isTrue(IntPred.isAssignableTo(Obj));
87 Expect.isTrue(DubPred.isAssignableTo(Obj));
88 Expect.isTrue(Obj.isAssignableTo(Func));
89 Expect.isTrue(Obj.isAssignableTo(NumPred));
90 Expect.isTrue(Obj.isAssignableTo(IntPred));
91 Expect.isTrue(Obj.isAssignableTo(DubPred));
92
93
94 // Function typedef - return type.
95 TypedefMirror NumGen = thisLibrary.declarations[#NumberGenerator];
96 TypedefMirror IntGen = thisLibrary.declarations[#IntegerGenerator];
97 TypedefMirror DubGen = thisLibrary.declarations[#DoubleGenerator];
98
99 Expect.isTrue(NumGen.isAssignableTo(NumGen));
100 Expect.isTrue(IntGen.isAssignableTo(IntGen));
101 Expect.isTrue(DubGen.isAssignableTo(DubGen));
102
103 Expect.isTrue(NumGen.isAssignableTo(Func));
104 Expect.isTrue(NumGen.isAssignableTo(IntGen));
105 Expect.isTrue(NumGen.isAssignableTo(DubGen));
106
107 Expect.isTrue(IntGen.isAssignableTo(Func));
108 Expect.isTrue(IntGen.isAssignableTo(NumGen));
109 Expect.isFalse(IntGen.isAssignableTo(DubGen));
110
111 Expect.isTrue(DubGen.isAssignableTo(Func));
112 Expect.isTrue(DubGen.isAssignableTo(NumGen));
113 Expect.isFalse(DubGen.isAssignableTo(IntGen));
114
115 Expect.isTrue(Func.isAssignableTo(Obj));
116 Expect.isTrue(NumGen.isAssignableTo(Obj));
117 Expect.isTrue(IntGen.isAssignableTo(Obj));
118 Expect.isTrue(DubGen.isAssignableTo(Obj));
119 Expect.isTrue(Obj.isAssignableTo(Func));
120 Expect.isTrue(Obj.isAssignableTo(NumGen));
121 Expect.isTrue(Obj.isAssignableTo(IntGen));
122 Expect.isTrue(Obj.isAssignableTo(DubGen));
123
124
125 // Function - argument type.
126 TypeMirror NumPredRef = NumPred.referent;
127 TypeMirror IntPredRef = IntPred.referent;
128 TypeMirror DubPredRef = DubPred.referent;
129
130 Expect.isTrue(Func.isAssignableTo(Func));
131 Expect.isTrue(NumPredRef.isAssignableTo(NumPredRef));
132 Expect.isTrue(IntPredRef.isAssignableTo(IntPredRef));
133 Expect.isTrue(DubPredRef.isAssignableTo(DubPredRef));
134
135 Expect.isTrue(NumPredRef.isAssignableTo(Func));
136 Expect.isTrue(NumPredRef.isAssignableTo(IntPredRef));
137 Expect.isTrue(NumPredRef.isAssignableTo(DubPredRef));
138
139 Expect.isTrue(IntPredRef.isAssignableTo(Func));
140 Expect.isTrue(IntPredRef.isAssignableTo(NumPredRef));
141 Expect.isFalse(IntPredRef.isAssignableTo(DubPredRef));
142
143 Expect.isTrue(DubPredRef.isAssignableTo(Func));
144 Expect.isTrue(DubPredRef.isAssignableTo(NumPredRef));
145 Expect.isFalse(DubPredRef.isAssignableTo(IntPredRef));
146
147 Expect.isTrue(Func.isAssignableTo(Obj));
148 Expect.isTrue(NumPredRef.isAssignableTo(Obj));
149 Expect.isTrue(IntPredRef.isAssignableTo(Obj));
150 Expect.isTrue(DubPredRef.isAssignableTo(Obj));
151 Expect.isTrue(Obj.isAssignableTo(Func));
152 Expect.isTrue(Obj.isAssignableTo(NumPredRef));
153 Expect.isTrue(Obj.isAssignableTo(IntPredRef));
154 Expect.isTrue(Obj.isAssignableTo(DubPredRef));
155
156
157 // Function - return type.
158 TypeMirror NumGenRef = NumGen.referent;
159 TypeMirror IntGenRef = IntGen.referent;
160 TypeMirror DubGenRef = DubGen.referent;
161
162 Expect.isTrue(NumGenRef.isAssignableTo(NumGenRef));
163 Expect.isTrue(IntGenRef.isAssignableTo(IntGenRef));
164 Expect.isTrue(DubGenRef.isAssignableTo(DubGenRef));
165
166 Expect.isTrue(NumGenRef.isAssignableTo(Func));
167 Expect.isTrue(NumGenRef.isAssignableTo(IntGenRef));
168 Expect.isTrue(NumGenRef.isAssignableTo(DubGenRef));
169
170 Expect.isTrue(IntGenRef.isAssignableTo(Func));
171 Expect.isTrue(IntGenRef.isAssignableTo(NumGenRef));
172 Expect.isFalse(IntGenRef.isAssignableTo(DubGenRef));
173
174 Expect.isTrue(DubGenRef.isAssignableTo(Func));
175 Expect.isTrue(DubGenRef.isAssignableTo(NumGenRef));
176 Expect.isFalse(DubGenRef.isAssignableTo(IntGenRef));
177
178 Expect.isTrue(Func.isAssignableTo(Obj));
179 Expect.isTrue(NumGenRef.isAssignableTo(Obj));
180 Expect.isTrue(IntGenRef.isAssignableTo(Obj));
181 Expect.isTrue(DubGenRef.isAssignableTo(Obj));
182 Expect.isTrue(Obj.isAssignableTo(Func));
183 Expect.isTrue(Obj.isAssignableTo(NumGenRef));
184 Expect.isTrue(Obj.isAssignableTo(IntGenRef));
185 Expect.isTrue(Obj.isAssignableTo(DubGenRef));
186
187
188 // Function typedef / function.
189 Expect.isTrue(NumPred.isAssignableTo(NumPredRef));
190 Expect.isTrue(IntPred.isAssignableTo(IntPredRef));
191 Expect.isTrue(DubPred.isAssignableTo(DubPredRef));
192 Expect.isTrue(NumPredRef.isAssignableTo(NumPred));
193 Expect.isTrue(IntPredRef.isAssignableTo(IntPred));
194 Expect.isTrue(DubPredRef.isAssignableTo(DubPred));
195
196
197 // Function typedef / function.
198 Expect.isTrue(NumGen.isAssignableTo(NumGenRef));
199 Expect.isTrue(IntGen.isAssignableTo(IntGenRef));
200 Expect.isTrue(DubGen.isAssignableTo(DubGenRef));
201 Expect.isTrue(NumGenRef.isAssignableTo(NumGen));
202 Expect.isTrue(IntGenRef.isAssignableTo(IntGen));
203 Expect.isTrue(DubGenRef.isAssignableTo(DubGen));
204
205
206 // Type variable.
207 TypeMirror TFromA =
208 (thisLibrary.declarations[#A] as ClassMirror).typeVariables.single;
209 TypeMirror TFromB =
210 (thisLibrary.declarations[#B] as ClassMirror).typeVariables.single;
211 TypeMirror TFromC =
212 (thisLibrary.declarations[#C] as ClassMirror).typeVariables.single;
213
214 Expect.isTrue(TFromA.isAssignableTo(TFromA));
215 Expect.isTrue(TFromB.isAssignableTo(TFromB));
216 Expect.isTrue(TFromC.isAssignableTo(TFromC));
217
218 Expect.isFalse(TFromA.isAssignableTo(TFromB));
219 Expect.isFalse(TFromA.isAssignableTo(TFromC));
220 Expect.isFalse(TFromB.isAssignableTo(TFromA));
221 Expect.isFalse(TFromB.isAssignableTo(TFromC));
222 Expect.isFalse(TFromC.isAssignableTo(TFromA));
223 Expect.isFalse(TFromC.isAssignableTo(TFromB));
224
225 TypeMirror Num = coreLibrary.declarations[#num];
226 Expect.isTrue(TFromC.isAssignableTo(Num));
227 Expect.isTrue(Num.isAssignableTo(TFromC));
228
229
230 // dynamic & void.
231 TypeMirror Dynamic = mirrors.dynamicType;
232 Expect.isTrue(Dynamic.isAssignableTo(Dynamic));
233 Expect.isTrue(Obj.isAssignableTo(Dynamic));
234 Expect.isTrue(Super.isAssignableTo(Dynamic));
235 Expect.isTrue(Sub1.isAssignableTo(Dynamic));
236 Expect.isTrue(Sub2.isAssignableTo(Dynamic));
237 Expect.isTrue(NumPred.isAssignableTo(Dynamic));
238 Expect.isTrue(IntPred.isAssignableTo(Dynamic));
239 Expect.isTrue(DubPred.isAssignableTo(Dynamic));
240 Expect.isTrue(NumPredRef.isAssignableTo(Dynamic));
241 Expect.isTrue(IntPredRef.isAssignableTo(Dynamic));
242 Expect.isTrue(DubPredRef.isAssignableTo(Dynamic));
243 Expect.isTrue(NumGen.isAssignableTo(Dynamic));
244 Expect.isTrue(IntGen.isAssignableTo(Dynamic));
245 Expect.isTrue(DubGen.isAssignableTo(Dynamic));
246 Expect.isTrue(NumGenRef.isAssignableTo(Dynamic));
247 Expect.isTrue(IntGenRef.isAssignableTo(Dynamic));
248 Expect.isTrue(DubGenRef.isAssignableTo(Dynamic));
249 Expect.isTrue(TFromA.isAssignableTo(Dynamic));
250 Expect.isTrue(TFromB.isAssignableTo(Dynamic));
251 Expect.isTrue(TFromC.isAssignableTo(Dynamic));
252 Expect.isTrue(Dynamic.isAssignableTo(Obj));
253 Expect.isTrue(Dynamic.isAssignableTo(Super));
254 Expect.isTrue(Dynamic.isAssignableTo(Sub1));
255 Expect.isTrue(Dynamic.isAssignableTo(Sub2));
256 Expect.isTrue(Dynamic.isAssignableTo(NumPred));
257 Expect.isTrue(Dynamic.isAssignableTo(IntPred));
258 Expect.isTrue(Dynamic.isAssignableTo(DubPred));
259 Expect.isTrue(Dynamic.isAssignableTo(NumPredRef));
260 Expect.isTrue(Dynamic.isAssignableTo(IntPredRef));
261 Expect.isTrue(Dynamic.isAssignableTo(DubPredRef));
262 Expect.isTrue(Dynamic.isAssignableTo(NumGen));
263 Expect.isTrue(Dynamic.isAssignableTo(IntGen));
264 Expect.isTrue(Dynamic.isAssignableTo(DubGen));
265 Expect.isTrue(Dynamic.isAssignableTo(NumGenRef));
266 Expect.isTrue(Dynamic.isAssignableTo(IntGenRef));
267 Expect.isTrue(Dynamic.isAssignableTo(DubGenRef));
268 Expect.isTrue(Dynamic.isAssignableTo(TFromA));
269 Expect.isTrue(Dynamic.isAssignableTo(TFromB));
270 Expect.isTrue(Dynamic.isAssignableTo(TFromC));
271
272 TypeMirror Void = mirrors.voidType;
273 Expect.isTrue(Void.isAssignableTo(Void));
274 Expect.isFalse(Obj.isAssignableTo(Void));
275 Expect.isFalse(Super.isAssignableTo(Void));
276 Expect.isFalse(Sub1.isAssignableTo(Void));
277 Expect.isFalse(Sub2.isAssignableTo(Void));
278 Expect.isFalse(NumPred.isAssignableTo(Void));
279 Expect.isFalse(IntPred.isAssignableTo(Void));
280 Expect.isFalse(DubPred.isAssignableTo(Void));
281 Expect.isFalse(NumPredRef.isAssignableTo(Void));
282 Expect.isFalse(IntPredRef.isAssignableTo(Void));
283 Expect.isFalse(DubPredRef.isAssignableTo(Void));
284 Expect.isFalse(NumGen.isAssignableTo(Void));
285 Expect.isFalse(IntGen.isAssignableTo(Void));
286 Expect.isFalse(DubGen.isAssignableTo(Void));
287 Expect.isFalse(NumGenRef.isAssignableTo(Void));
288 Expect.isFalse(IntGenRef.isAssignableTo(Void));
289 Expect.isFalse(DubGenRef.isAssignableTo(Void));
290 Expect.isFalse(TFromA.isAssignableTo(Void));
291 Expect.isFalse(TFromB.isAssignableTo(Void));
292 Expect.isFalse(TFromC.isAssignableTo(Void));
293 Expect.isFalse(Void.isAssignableTo(Obj));
294 Expect.isFalse(Void.isAssignableTo(Super));
295 Expect.isFalse(Void.isAssignableTo(Sub1));
296 Expect.isFalse(Void.isAssignableTo(Sub2));
297 Expect.isFalse(Void.isAssignableTo(NumPred));
298 Expect.isFalse(Void.isAssignableTo(IntPred));
299 Expect.isFalse(Void.isAssignableTo(DubPred));
300 Expect.isFalse(Void.isAssignableTo(NumPredRef));
301 Expect.isFalse(Void.isAssignableTo(IntPredRef));
302 Expect.isFalse(Void.isAssignableTo(DubPredRef));
303 Expect.isFalse(Void.isAssignableTo(NumGen));
304 Expect.isFalse(Void.isAssignableTo(IntGen));
305 Expect.isFalse(Void.isAssignableTo(DubGen));
306 Expect.isFalse(Void.isAssignableTo(NumGenRef));
307 Expect.isFalse(Void.isAssignableTo(IntGenRef));
308 Expect.isFalse(Void.isAssignableTo(DubGenRef));
309 Expect.isFalse(Void.isAssignableTo(TFromA));
310 Expect.isFalse(Void.isAssignableTo(TFromB));
311 Expect.isFalse(Void.isAssignableTo(TFromC));
312
313 Expect.isTrue(Dynamic.isAssignableTo(Void));
314 Expect.isTrue(Void.isAssignableTo(Dynamic));
315 }
316
317 main() {
318 test(currentMirrorSystem());
319 }
OLDNEW
« no previous file with comments | « tests/lib/lib.status ('k') | tests/lib/mirrors/relation_subclass_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698