OLD | NEW |
| (Empty) |
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 | |
3 // BSD-style license that can be found in the LICENSE file. | |
4 | |
5 library test.declarations_test; | |
6 | |
7 import 'dart:mirrors'; | |
8 import 'package:expect/expect.dart'; | |
9 | |
10 import 'stringify.dart'; | |
11 import 'declarations_model.dart' as declarations_model; | |
12 | |
13 Set<DeclarationMirror> inheritedDeclarations(ClassMirror cm) { | |
14 var decls = new Set<DeclarationMirror>(); | |
15 while (cm != null) { | |
16 decls.addAll(cm.declarations.values); | |
17 cm = cm.superclass; | |
18 } | |
19 return decls; | |
20 } | |
21 | |
22 main() { | |
23 ClassMirror cm = reflectClass(declarations_model.Class); | |
24 | |
25 Expect.setEquals([ | |
26 'Variable(s(_instanceVariable) in s(Class), private)', | |
27 'Variable(s(_staticVariable) in s(Class), private, static)', | |
28 'Variable(s(instanceVariable) in s(Class))', | |
29 'Variable(s(staticVariable) in s(Class), static)' | |
30 ], cm.declarations.values.where((dm) => dm is VariableMirror).map(stringify), | |
31 'variables'); | |
32 | |
33 Expect.setEquals( | |
34 [ | |
35 'Method(s(_instanceGetter) in s(Class), private, getter)', | |
36 'Method(s(_staticGetter) in s(Class), private, static, getter)', | |
37 'Method(s(instanceGetter) in s(Class), getter)', | |
38 'Method(s(staticGetter) in s(Class), static, getter)' | |
39 ], | |
40 cm.declarations.values | |
41 .where((dm) => dm is MethodMirror && dm.isGetter) | |
42 .map(stringify), | |
43 'getters'); | |
44 | |
45 Expect.setEquals( | |
46 [ | |
47 'Method(s(_instanceSetter=) in s(Class), private, setter)', | |
48 'Method(s(_staticSetter=) in s(Class), private, static, setter)', | |
49 'Method(s(instanceSetter=) in s(Class), setter)', | |
50 'Method(s(staticSetter=) in s(Class), static, setter)' | |
51 ], | |
52 cm.declarations.values | |
53 .where((dm) => dm is MethodMirror && dm.isSetter) | |
54 .map(stringify), | |
55 'setters'); | |
56 | |
57 // dart2js stops testing here. | |
58 return; // //# 01: ok | |
59 | |
60 Expect.setEquals( | |
61 [ | |
62 'Method(s(+) in s(Class))', | |
63 'Method(s(_instanceMethod) in s(Class), private)', | |
64 'Method(s(_staticMethod) in s(Class), private, static)', | |
65 'Method(s(abstractMethod) in s(Class), abstract)', | |
66 'Method(s(instanceMethod) in s(Class))', | |
67 'Method(s(staticMethod) in s(Class), static)' | |
68 ], | |
69 cm.declarations.values | |
70 .where((dm) => dm is MethodMirror && dm.isRegularMethod) | |
71 .map(stringify), | |
72 'regular methods'); | |
73 | |
74 Expect.setEquals( | |
75 [ | |
76 'Method(s(Class._generativeConstructor) in s(Class), private, constructo
r)', | |
77 'Method(s(Class._normalFactory) in s(Class), private, static, constructo
r)', | |
78 'Method(s(Class._redirectingConstructor)' | |
79 ' in s(Class), private, constructor)', | |
80 'Method(s(Class._redirectingFactory)' | |
81 ' in s(Class), private, static, constructor)', | |
82 'Method(s(Class.generativeConstructor) in s(Class), constructor)', | |
83 'Method(s(Class.normalFactory) in s(Class), static, constructor)', | |
84 'Method(s(Class.redirectingConstructor) in s(Class), constructor)', | |
85 'Method(s(Class.redirectingFactory) in s(Class), static, constructor)' | |
86 ], | |
87 cm.declarations.values | |
88 .where((dm) => dm is MethodMirror && dm.isConstructor) | |
89 .map(stringify), | |
90 'constructors and factories'); | |
91 | |
92 Expect.setEquals([ | |
93 'Method(s(Class._normalFactory) in s(Class), private, static, constructor)', | |
94 'Method(s(Class._redirectingFactory)' | |
95 ' in s(Class), private, static, constructor)', | |
96 'Method(s(Class.normalFactory) in s(Class), static, constructor)', | |
97 'Method(s(Class.redirectingFactory) in s(Class), static, constructor)', | |
98 'Method(s(_staticGetter) in s(Class), private, static, getter)', | |
99 'Method(s(_staticMethod) in s(Class), private, static)', | |
100 'Method(s(_staticSetter=) in s(Class), private, static, setter)', | |
101 'Variable(s(_staticVariable) in s(Class), private, static)', | |
102 'Method(s(staticGetter) in s(Class), static, getter)', | |
103 'Method(s(staticMethod) in s(Class), static)', | |
104 'Method(s(staticSetter=) in s(Class), static, setter)', | |
105 'Variable(s(staticVariable) in s(Class), static)' | |
106 ], cm.declarations.values.where((dm) => dm.isStatic).map(stringify), | |
107 'statics'); | |
108 | |
109 Expect.setEquals([ | |
110 'Method(s(+) in s(Class))', | |
111 'TypeVariable(s(C) in s(Class),' | |
112 ' upperBound = Class(s(Object) in s(dart.core), top-level))', | |
113 'Method(s(Class._generativeConstructor) in s(Class), private, constructor)', | |
114 'Method(s(Class._redirectingConstructor)' | |
115 ' in s(Class), private, constructor)', | |
116 'Method(s(Class.generativeConstructor) in s(Class), constructor)', | |
117 'Method(s(Class.redirectingConstructor) in s(Class), constructor)', | |
118 'Method(s(_instanceGetter) in s(Class), private, getter)', | |
119 'Method(s(_instanceMethod) in s(Class), private)', | |
120 'Method(s(_instanceSetter=) in s(Class), private, setter)', | |
121 'Variable(s(_instanceVariable) in s(Class), private)', | |
122 'Method(s(abstractMethod) in s(Class), abstract)', | |
123 'Method(s(instanceGetter) in s(Class), getter)', | |
124 'Method(s(instanceMethod) in s(Class))', | |
125 'Method(s(instanceSetter=) in s(Class), setter)', | |
126 'Variable(s(instanceVariable) in s(Class))' | |
127 ], cm.declarations.values.where((dm) => !dm.isStatic).map(stringify), | |
128 'non-statics'); | |
129 | |
130 Expect.setEquals([ | |
131 'Method(s(+) in s(Class))', | |
132 'TypeVariable(s(C) in s(Class),' | |
133 ' upperBound = Class(s(Object) in s(dart.core), top-level))', | |
134 'Method(s(Class.generativeConstructor) in s(Class), constructor)', | |
135 'Method(s(Class.normalFactory) in s(Class), static, constructor)', | |
136 'Method(s(Class.redirectingConstructor) in s(Class), constructor)', | |
137 'Method(s(Class.redirectingFactory) in s(Class), static, constructor)', | |
138 'Method(s(abstractMethod) in s(Class), abstract)', | |
139 'Method(s(instanceGetter) in s(Class), getter)', | |
140 'Method(s(instanceMethod) in s(Class))', | |
141 'Method(s(instanceSetter=) in s(Class), setter)', | |
142 'Variable(s(instanceVariable) in s(Class))', | |
143 'Method(s(staticGetter) in s(Class), static, getter)', | |
144 'Method(s(staticMethod) in s(Class), static)', | |
145 'Method(s(staticSetter=) in s(Class), static, setter)', | |
146 'Variable(s(staticVariable) in s(Class), static)' | |
147 ], cm.declarations.values.where((dm) => !dm.isPrivate).map(stringify), | |
148 'public'); | |
149 | |
150 Expect.setEquals([ | |
151 'Method(s(*) in s(Mixin))', | |
152 'Method(s(+) in s(Class))', | |
153 'Method(s(-) in s(Superclass))', | |
154 'Method(s(==) in s(Object))', | |
155 'TypeVariable(s(C) in s(Class),' | |
156 ' upperBound = Class(s(Object) in s(dart.core), top-level))', | |
157 'Method(s(Class.generativeConstructor) in s(Class), constructor)', | |
158 'Method(s(Class.normalFactory) in s(Class), static, constructor)', | |
159 'Method(s(Class.redirectingConstructor) in s(Class), constructor)', | |
160 'Method(s(Class.redirectingFactory) in s(Class), static, constructor)', | |
161 'Method(s(Object) in s(Object), constructor)', | |
162 'TypeVariable(s(S) in s(Superclass),' | |
163 ' upperBound = Class(s(Object) in s(dart.core), top-level))', | |
164 'Method(s(Superclass.inheritedGenerativeConstructor)' | |
165 ' in s(Superclass), constructor)', | |
166 'Method(s(Superclass.inheritedNormalFactory)' | |
167 ' in s(Superclass), static, constructor)', | |
168 'Method(s(Superclass.inheritedRedirectingConstructor)' | |
169 ' in s(Superclass), constructor)', | |
170 'Method(s(Superclass.inheritedRedirectingFactory)' | |
171 ' in s(Superclass), static, constructor)', | |
172 'Method(s(abstractMethod) in s(Class), abstract)', | |
173 'Method(s(hashCode) in s(Object), getter)', | |
174 'Method(s(inheritedInstanceGetter) in s(Superclass), getter)', | |
175 'Method(s(inheritedInstanceMethod) in s(Superclass))', | |
176 'Method(s(inheritedInstanceSetter=) in s(Superclass), setter)', | |
177 'Variable(s(inheritedInstanceVariable) in s(Superclass))', | |
178 'Method(s(inheritedStaticGetter) in s(Superclass), static, getter)', | |
179 'Method(s(inheritedStaticMethod) in s(Superclass), static)', | |
180 'Method(s(inheritedStaticSetter=) in s(Superclass), static, setter)', | |
181 'Variable(s(inheritedStaticVariable) in s(Superclass), static)', | |
182 'Method(s(instanceGetter) in s(Class), getter)', | |
183 'Method(s(instanceMethod) in s(Class))', | |
184 'Method(s(instanceSetter=) in s(Class), setter)', | |
185 'Variable(s(instanceVariable) in s(Class))', | |
186 'Method(s(mixinInstanceGetter) in s(Mixin), getter)', | |
187 'Method(s(mixinInstanceMethod) in s(Mixin))', | |
188 'Method(s(mixinInstanceSetter=) in s(Mixin), setter)', | |
189 'Variable(s(mixinInstanceVariable) in s(Mixin))', | |
190 'Method(s(noSuchMethod) in s(Object))', | |
191 'Method(s(runtimeType) in s(Object), getter)', | |
192 'Method(s(staticGetter) in s(Class), static, getter)', | |
193 'Method(s(staticMethod) in s(Class), static)', | |
194 'Method(s(staticSetter=) in s(Class), static, setter)', | |
195 'Variable(s(staticVariable) in s(Class), static)', | |
196 'Method(s(test.declarations_model.Superclass' | |
197 ' with test.declarations_model.Mixin.inheritedGenerativeConstructor)' | |
198 ' in s(test.declarations_model.Superclass' | |
199 ' with test.declarations_model.Mixin), constructor)', | |
200 'Method(s(test.declarations_model.Superclass' | |
201 ' with test.declarations_model.Mixin.inheritedRedirectingConstructor)' | |
202 ' in s(test.declarations_model.Superclass' | |
203 ' with test.declarations_model.Mixin), constructor)', | |
204 'Method(s(toString) in s(Object))', | |
205 'Variable(s(mixinStaticVariable) in s(Mixin), static)', | |
206 'Method(s(mixinStaticGetter) in s(Mixin), static, getter)', | |
207 'Method(s(mixinStaticSetter=) in s(Mixin), static, setter)', | |
208 'Method(s(mixinStaticMethod) in s(Mixin), static)' | |
209 ], inheritedDeclarations(cm).where((dm) => !dm.isPrivate).map(stringify), | |
210 'transitive public'); | |
211 // The public members of Object should be the same in all implementations, so | |
212 // we don't exclude Object here. | |
213 | |
214 Expect.setEquals([ | |
215 'Method(s(+) in s(Class))', | |
216 'TypeVariable(s(C) in s(Class),' | |
217 ' upperBound = Class(s(Object) in s(dart.core), top-level))', | |
218 'Method(s(Class._generativeConstructor) in s(Class), private, constructor)', | |
219 'Method(s(Class._normalFactory) in s(Class), private, static, constructor)', | |
220 'Method(s(Class._redirectingConstructor)' | |
221 ' in s(Class), private, constructor)', | |
222 'Method(s(Class._redirectingFactory)' | |
223 ' in s(Class), private, static, constructor)', | |
224 'Method(s(Class.generativeConstructor) in s(Class), constructor)', | |
225 'Method(s(Class.normalFactory) in s(Class), static, constructor)', | |
226 'Method(s(Class.redirectingConstructor) in s(Class), constructor)', | |
227 'Method(s(Class.redirectingFactory) in s(Class), static, constructor)', | |
228 'Method(s(_instanceGetter) in s(Class), private, getter)', | |
229 'Method(s(_instanceMethod) in s(Class), private)', | |
230 'Method(s(_instanceSetter=) in s(Class), private, setter)', | |
231 'Variable(s(_instanceVariable) in s(Class), private)', | |
232 'Method(s(_staticGetter) in s(Class), private, static, getter)', | |
233 'Method(s(_staticMethod) in s(Class), private, static)', | |
234 'Method(s(_staticSetter=) in s(Class), private, static, setter)', | |
235 'Variable(s(_staticVariable) in s(Class), private, static)', | |
236 'Method(s(abstractMethod) in s(Class), abstract)', | |
237 'Method(s(instanceGetter) in s(Class), getter)', | |
238 'Method(s(instanceMethod) in s(Class))', | |
239 'Method(s(instanceSetter=) in s(Class), setter)', | |
240 'Variable(s(instanceVariable) in s(Class))', | |
241 'Method(s(staticGetter) in s(Class), static, getter)', | |
242 'Method(s(staticMethod) in s(Class), static)', | |
243 'Method(s(staticSetter=) in s(Class), static, setter)', | |
244 'Variable(s(staticVariable) in s(Class), static)' | |
245 ], cm.declarations.values.map(stringify), 'declarations'); | |
246 | |
247 Expect.setEquals( | |
248 [ | |
249 'Method(s(*) in s(Mixin))', | |
250 'Method(s(+) in s(Class))', | |
251 'Method(s(-) in s(Superclass))', | |
252 'TypeVariable(s(C) in s(Class),' | |
253 ' upperBound = Class(s(Object) in s(dart.core), top-level))', | |
254 'Method(s(Class._generativeConstructor) in s(Class), private, constructo
r)', | |
255 'Method(s(Class._normalFactory) in s(Class), private, static, constructo
r)', | |
256 'Method(s(Class._redirectingConstructor)' | |
257 ' in s(Class), private, constructor)', | |
258 'Method(s(Class._redirectingFactory)' | |
259 ' in s(Class), private, static, constructor)', | |
260 'Method(s(Class.generativeConstructor) in s(Class), constructor)', | |
261 'Method(s(Class.normalFactory) in s(Class), static, constructor)', | |
262 'Method(s(Class.redirectingConstructor) in s(Class), constructor)', | |
263 'Method(s(Class.redirectingFactory) in s(Class), static, constructor)', | |
264 'TypeVariable(s(S) in s(Superclass),' | |
265 ' upperBound = Class(s(Object) in s(dart.core), top-level))', | |
266 'Method(s(Superclass._inheritedGenerativeConstructor)' | |
267 ' in s(Superclass), private, constructor)', | |
268 'Method(s(Superclass._inheritedNormalFactory)' | |
269 ' in s(Superclass), private, static, constructor)', | |
270 'Method(s(Superclass._inheritedRedirectingConstructor)' | |
271 ' in s(Superclass), private, constructor)', | |
272 'Method(s(Superclass._inheritedRedirectingFactory)' | |
273 ' in s(Superclass), private, static, constructor)', | |
274 'Method(s(Superclass.inheritedGenerativeConstructor)' | |
275 ' in s(Superclass), constructor)', | |
276 'Method(s(Superclass.inheritedNormalFactory)' | |
277 ' in s(Superclass), static, constructor)', | |
278 'Method(s(Superclass.inheritedRedirectingConstructor)' | |
279 ' in s(Superclass), constructor)', | |
280 'Method(s(Superclass.inheritedRedirectingFactory)' | |
281 ' in s(Superclass), static, constructor)', | |
282 'Method(s(_inheritedInstanceGetter) in s(Superclass), private, getter)', | |
283 'Method(s(_inheritedInstanceMethod) in s(Superclass), private)', | |
284 'Method(s(_inheritedInstanceSetter=) in s(Superclass), private, setter)'
, | |
285 'Variable(s(_inheritedInstanceVariable) in s(Superclass), private)', | |
286 'Method(s(_inheritedStaticGetter)' | |
287 ' in s(Superclass), private, static, getter)', | |
288 'Method(s(_inheritedStaticMethod) in s(Superclass), private, static)', | |
289 'Method(s(_inheritedStaticSetter=)' | |
290 ' in s(Superclass), private, static, setter)', | |
291 'Variable(s(_inheritedStaticVariable) in s(Superclass), private, static)
', | |
292 'Method(s(_instanceGetter) in s(Class), private, getter)', | |
293 'Method(s(_instanceMethod) in s(Class), private)', | |
294 'Method(s(_instanceSetter=) in s(Class), private, setter)', | |
295 'Variable(s(_instanceVariable) in s(Class), private)', | |
296 'Method(s(_mixinInstanceGetter) in s(Mixin), private, getter)', | |
297 'Method(s(_mixinInstanceMethod) in s(Mixin), private)', | |
298 'Method(s(_mixinInstanceSetter=) in s(Mixin), private, setter)', | |
299 'Variable(s(_mixinInstanceVariable) in s(Mixin), private)', | |
300 'Method(s(_staticGetter) in s(Class), private, static, getter)', | |
301 'Method(s(_staticMethod) in s(Class), private, static)', | |
302 'Method(s(_staticSetter=) in s(Class), private, static, setter)', | |
303 'Variable(s(_staticVariable) in s(Class), private, static)', | |
304 'Method(s(abstractMethod) in s(Class), abstract)', | |
305 'Method(s(inheritedInstanceGetter) in s(Superclass), getter)', | |
306 'Method(s(inheritedInstanceMethod) in s(Superclass))', | |
307 'Method(s(inheritedInstanceSetter=) in s(Superclass), setter)', | |
308 'Variable(s(inheritedInstanceVariable) in s(Superclass))', | |
309 'Method(s(inheritedStaticGetter) in s(Superclass), static, getter)', | |
310 'Method(s(inheritedStaticMethod) in s(Superclass), static)', | |
311 'Method(s(inheritedStaticSetter=) in s(Superclass), static, setter)', | |
312 'Variable(s(inheritedStaticVariable) in s(Superclass), static)', | |
313 'Method(s(instanceGetter) in s(Class), getter)', | |
314 'Method(s(instanceMethod) in s(Class))', | |
315 'Method(s(instanceSetter=) in s(Class), setter)', | |
316 'Variable(s(instanceVariable) in s(Class))', | |
317 'Method(s(mixinInstanceGetter) in s(Mixin), getter)', | |
318 'Method(s(mixinInstanceMethod) in s(Mixin))', | |
319 'Method(s(mixinInstanceSetter=) in s(Mixin), setter)', | |
320 'Variable(s(mixinInstanceVariable) in s(Mixin))', | |
321 'Method(s(staticGetter) in s(Class), static, getter)', | |
322 'Method(s(staticMethod) in s(Class), static)', | |
323 'Method(s(staticSetter=) in s(Class), static, setter)', | |
324 'Variable(s(staticVariable) in s(Class), static)', | |
325 'Method(s(test.declarations_model.Superclass' | |
326 ' with test.declarations_model.Mixin._inheritedGenerativeConstructor
)' | |
327 ' in s(test.declarations_model.Superclass' | |
328 ' with test.declarations_model.Mixin), private, constructor)', | |
329 'Method(s(test.declarations_model.Superclass' | |
330 ' with test.declarations_model.Mixin._inheritedRedirectingConstructo
r)' | |
331 ' in s(test.declarations_model.Superclass' | |
332 ' with test.declarations_model.Mixin), private, constructor)', | |
333 'Method(s(test.declarations_model.Superclass' | |
334 ' with test.declarations_model.Mixin.inheritedGenerativeConstructor)
' | |
335 ' in s(test.declarations_model.Superclass' | |
336 ' with test.declarations_model.Mixin), constructor)', | |
337 'Method(s(test.declarations_model.Superclass' | |
338 ' with test.declarations_model.Mixin.inheritedRedirectingConstructor
)' | |
339 ' in s(test.declarations_model.Superclass' | |
340 ' with test.declarations_model.Mixin), constructor)', | |
341 'Variable(s(mixinStaticVariable) in s(Mixin), static)', | |
342 'Variable(s(_mixinStaticVariable) in s(Mixin), private, static)', | |
343 'Method(s(mixinStaticGetter) in s(Mixin), static, getter)', | |
344 'Method(s(mixinStaticSetter=) in s(Mixin), static, setter)', | |
345 'Method(s(mixinStaticMethod) in s(Mixin), static)', | |
346 'Method(s(_mixinStaticGetter) in s(Mixin), private, static, getter)', | |
347 'Method(s(_mixinStaticSetter=) in s(Mixin), private, static, setter)', | |
348 'Method(s(_mixinStaticMethod) in s(Mixin), private, static)' | |
349 ], | |
350 inheritedDeclarations(cm) | |
351 .difference(reflectClass(Object).declarations.values.toSet()) | |
352 .map(stringify), | |
353 'transitive less Object'); | |
354 // The private members of Object may vary across implementations, so we | |
355 // exclude the declarations of Object in this test case. | |
356 } | |
OLD | NEW |