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

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

Issue 24005002: Make TypedefMirror a direct descendant of TypeMirror. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: merge with generic interfaces and mixins 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
OLDNEW
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, 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 MirrorsTest; 5 library MirrorsTest;
6 6
7 import 'dart:mirrors'; 7 import 'dart:mirrors';
8 8
9 import '../../light_unittest.dart'; 9 import '../../light_unittest.dart';
10 10
(...skipping 21 matching lines...) Expand all
32 static s(a, b, c) => {"a": a, "b": b, "c": c}; 32 static s(a, b, c) => {"a": a, "b": b, "c": c};
33 static _t(a, b) => a + b; 33 static _t(a, b) => a + b;
34 } 34 }
35 35
36 typedef Typedef(); 36 typedef Typedef();
37 37
38 testInvoke(mirrors) { 38 testInvoke(mirrors) {
39 var instance = new Class(); 39 var instance = new Class();
40 var instMirror = reflect(instance); 40 var instMirror = reflect(instance);
41 41
42 expect(instMirror.invoke(const Symbol("m"),['A', 'B', instance]).reflectee, 42 expect(instMirror.invoke(#m, ['A', 'B', instance]).reflectee,
43 equals({"a": 'A', "b":'B', "c": instance})); 43 equals({"a": 'A', "b":'B', "c": instance}));
44 expect(instMirror.invoke(const Symbol("notDefined"), []).reflectee, 44 expect(instMirror.invoke(#notDefined, []).reflectee,
45 equals("DNU")); 45 equals("DNU"));
46 expect(instMirror.invoke(const Symbol("m"), []).reflectee, 46 expect(instMirror.invoke(#m, []).reflectee,
47 equals("DNU")); // Wrong arity. 47 equals("DNU")); // Wrong arity.
48 // TODO(rmacnak): Implement access to private members.
49 // expect(instMirror.invoke(const Symbol("_n"), [3, 4]).reflectee,
50 // equals(7));
51 48
52 var classMirror = instMirror.type; 49 var classMirror = instMirror.type;
53 expect(classMirror.invoke(const Symbol("s"),['A', 'B', instance]).reflectee, 50 expect(classMirror.invoke(#s, ['A', 'B', instance]).reflectee,
54 equals({"a": 'A', "b":'B', "c": instance})); 51 equals({"a": 'A', "b":'B', "c": instance}));
55 expect(() => classMirror.invoke(const Symbol("notDefined"), []).reflectee, 52 expect(() => classMirror.invoke(#notDefined, []).reflectee,
56 throws); 53 throws);
57 expect(() => classMirror.invoke(const Symbol("s"), []).reflectee, 54 expect(() => classMirror.invoke(#s, []).reflectee,
58 throws); // Wrong arity. 55 throws); // Wrong arity.
59 // TODO(rmacnak): Implement access to private members.
60 // expect(classMirror.invoke(const Symbol("_t"), [3, 4]).reflectee,
61 // equals(7));
62 56
63 var libMirror = classMirror.owner; 57 var libMirror = classMirror.owner;
64 expect(libMirror.invoke(const Symbol("u"),['A', 'B', instance]).reflectee, 58 expect(libMirror.invoke(#u, ['A', 'B', instance]).reflectee,
65 equals({"a": 'A', "b":'B', "c": instance})); 59 equals({"a": 'A', "b":'B', "c": instance}));
66 expect(() => libMirror.invoke(const Symbol("notDefined"), []).reflectee, 60 expect(() => libMirror.invoke(#notDefined, []).reflectee,
67 throws); 61 throws);
68 expect(() => libMirror.invoke(const Symbol("u"), []).reflectee, 62 expect(() => libMirror.invoke(#u, []).reflectee,
69 throws); // Wrong arity. 63 throws); // Wrong arity.
70 // NB: This works on the VM but fails at compile-time on dart2js.
71 // expect(libMirror.invoke(const Symbol("_v"), [3, 4]).reflectee,
72 // equals(7));
73 } 64 }
74 65
75 testInstanceFieldAccess(mirrors) { 66 testInstanceFieldAccess(mirrors) {
76 var instance = new Class(); 67 var instance = new Class();
77 var instMirror = reflect(instance); 68 var instMirror = reflect(instance);
78 69
79 instMirror.setFieldAsync(const Symbol('field'), 44); 70 instMirror.setFieldAsync(#field, 44);
80 instMirror.getFieldAsync(const Symbol('field')).then( 71 instMirror.getFieldAsync(#field).then(
81 expectAsync1((resultMirror) { 72 expectAsync1((resultMirror) {
82 expect(resultMirror.reflectee, equals(44)); 73 expect(resultMirror.reflectee, equals(44));
83 expect(instance.field, equals(44)); 74 expect(instance.field, equals(44));
84 })); 75 }));
85 } 76 }
86 77
87 /// In dart2js, lists, numbers, and other objects are treated special 78 /// In dart2js, lists, numbers, and other objects are treated special
88 /// and their methods are invoked through a techique called interceptors. 79 /// and their methods are invoked through a techique called interceptors.
89 testIntercepted(mirrors) { 80 testIntercepted(mirrors) {
90 var instance = 1; 81 var instance = 1;
91 var instMirror = reflect(instance); 82 var instMirror = reflect(instance);
92 83
93 expect(instMirror.invoke(const Symbol('toString'), []).reflectee, 84 expect(instMirror.invoke(#toString, []).reflectee,
94 equals('1')); 85 equals('1'));
95 86
96 instance = []; 87 instance = [];
97 instMirror = reflect(instance); 88 instMirror = reflect(instance);
98 instMirror.setField(const Symbol('length'), 44); 89 instMirror.setField(#length, 44);
99 var resultMirror = instMirror.getField(const Symbol('length')); 90 var resultMirror = instMirror.getField(#length);
100 expect(resultMirror.reflectee, equals(44)); 91 expect(resultMirror.reflectee, equals(44));
101 expect(instance.length, equals(44)); 92 expect(instance.length, equals(44));
102 93
103 expect(instMirror.invoke(const Symbol('toString'), []).reflectee, 94 expect(instMirror.invoke(#toString, []).reflectee,
104 equals('[null, null, null, null, null, null, null, null, null, null,' 95 equals('[null, null, null, null, null, null, null, null, null, null,'
105 ' null, null, null, null, null, null, null, null, null, null,' 96 ' null, null, null, null, null, null, null, null, null, null,'
106 ' null, null, null, null, null, null, null, null, null, null,' 97 ' null, null, null, null, null, null, null, null, null, null,'
107 ' null, null, null, null, null, null, null, null, null, null,' 98 ' null, null, null, null, null, null, null, null, null, null,'
108 ' null, null, null, null]')); 99 ' null, null, null, null]'));
109 } 100 }
110 101
111 testFieldAccess(mirrors) { 102 testFieldAccess(mirrors) {
112 var instance = new Class(); 103 var instance = new Class();
113 104
114 var libMirror = mirrors.findLibrary(const Symbol("MirrorsTest")).single; 105 var libMirror = mirrors.findLibrary(#MirrorsTest).single;
115 var classMirror = libMirror.classes[const Symbol("Class")]; 106 var classMirror = libMirror.classes[#Class];
116 var instMirror = reflect(instance); 107 var instMirror = reflect(instance);
117 var fieldMirror = classMirror.members[const Symbol('field')]; 108 var fieldMirror = classMirror.members[#field];
118 var future; 109 var future;
119 110
120 expect(fieldMirror is VariableMirror, isTrue); 111 expect(fieldMirror is VariableMirror, isTrue);
121 expect(fieldMirror.type, equals(mirrors.dynamicType)); 112 expect(fieldMirror.type, equals(mirrors.dynamicType));
122 113
123 libMirror.setField(const Symbol('topLevelField'), [91]); 114 libMirror.setField(#topLevelField, [91]);
124 expect(libMirror.getField(const Symbol('topLevelField')).reflectee, 115 expect(libMirror.getField(#topLevelField).reflectee,
125 equals([91])); 116 equals([91]));
126 expect(topLevelField, equals([91])); 117 expect(topLevelField, equals([91]));
127 118
128 libMirror.setFieldAsync(const Symbol('topLevelField'), 42); 119 libMirror.setFieldAsync(#topLevelField, 42);
129 future = libMirror.getFieldAsync(const Symbol('topLevelField')); 120 future = libMirror.getFieldAsync(#topLevelField);
130 future.then(expectAsync1((resultMirror) { 121 future.then(expectAsync1((resultMirror) {
131 expect(resultMirror.reflectee, equals(42)); 122 expect(resultMirror.reflectee, equals(42));
132 expect(topLevelField, equals(42)); 123 expect(topLevelField, equals(42));
133 })); 124 }));
134 125
135 classMirror.setFieldAsync(const Symbol('staticField'), 43); 126 classMirror.setFieldAsync(#staticField, 43);
136 future = classMirror.getFieldAsync(const Symbol('staticField')); 127 future = classMirror.getFieldAsync(#staticField);
137 future.then(expectAsync1((resultMirror) { 128 future.then(expectAsync1((resultMirror) {
138 expect(resultMirror.reflectee, equals(43)); 129 expect(resultMirror.reflectee, equals(43));
139 expect(Class.staticField, equals(43)); 130 expect(Class.staticField, equals(43));
140 })); 131 }));
141 132
142 instMirror.setFieldAsync(const Symbol('field'), 44); 133 instMirror.setFieldAsync(#field, 44);
143 future = instMirror.getFieldAsync(const Symbol('field')); 134 future = instMirror.getFieldAsync(#field);
144 future.then(expectAsync1((resultMirror) { 135 future.then(expectAsync1((resultMirror) {
145 expect(resultMirror.reflectee, equals(44)); 136 expect(resultMirror.reflectee, equals(44));
146 expect(instance.field, equals(44)); 137 expect(instance.field, equals(44));
147 })); 138 }));
148 } 139 }
149 140
150 testClosureMirrors(mirrors) { 141 testClosureMirrors(mirrors) {
151 // TODO(ahe): Test optional parameters (named or not). 142 // TODO(ahe): Test optional parameters (named or not).
152 var closure = (x, y, z) { return x + y + z; }; 143 var closure = (x, y, z) { return x + y + z; };
153 144
(...skipping 12 matching lines...) Expand all
166 })); 157 }));
167 } 158 }
168 159
169 testInvokeConstructor(mirrors) { 160 testInvokeConstructor(mirrors) {
170 var classMirror = reflectClass(Class); 161 var classMirror = reflectClass(Class);
171 162
172 var instanceMirror = classMirror.newInstance(const Symbol(''),[]); 163 var instanceMirror = classMirror.newInstance(const Symbol(''),[]);
173 expect(instanceMirror.reflectee is Class, equals(true)); 164 expect(instanceMirror.reflectee is Class, equals(true));
174 expect(instanceMirror.reflectee.field, equals("default value")); 165 expect(instanceMirror.reflectee.field, equals("default value"));
175 166
176 instanceMirror = classMirror.newInstance(const Symbol('withInitialValue'), 167 instanceMirror = classMirror.newInstance(#withInitialValue,
177 [45]); 168 [45]);
178 expect(instanceMirror.reflectee is Class, equals(true)); 169 expect(instanceMirror.reflectee is Class, equals(true));
179 expect(instanceMirror.reflectee.field, equals(45)); 170 expect(instanceMirror.reflectee.field, equals(45));
180 171
181 172
182 instanceMirror = classMirror.newInstance(const Symbol('generative'), 173 instanceMirror = classMirror.newInstance(#generative,
183 [7]); 174 [7]);
184 expect(instanceMirror.reflectee is Class, equals(true)); 175 expect(instanceMirror.reflectee is Class, equals(true));
185 expect(instanceMirror.reflectee.field, equals(7)); 176 expect(instanceMirror.reflectee.field, equals(7));
186 177
187 instanceMirror = classMirror.newInstance(const Symbol('redirecting'), 178 instanceMirror = classMirror.newInstance(#redirecting,
188 [8]); 179 [8]);
189 expect(instanceMirror.reflectee is Class, equals(true)); 180 expect(instanceMirror.reflectee is Class, equals(true));
190 expect(instanceMirror.reflectee.field, equals(16)); 181 expect(instanceMirror.reflectee.field, equals(16));
191 182
192 instanceMirror = classMirror.newInstance(const Symbol('faktory'), 183 instanceMirror = classMirror.newInstance(#faktory,
193 [9]); 184 [9]);
194 expect(instanceMirror.reflectee is Class, equals(true)); 185 expect(instanceMirror.reflectee is Class, equals(true));
195 expect(instanceMirror.reflectee.field, equals(27)); 186 expect(instanceMirror.reflectee.field, equals(27));
196 187
197 instanceMirror = classMirror.newInstance(const Symbol('redirectingFactory'), 188 instanceMirror = classMirror.newInstance(#redirectingFactory,
198 [10]); 189 [10]);
199 expect(instanceMirror.reflectee is Class, equals(true)); 190 expect(instanceMirror.reflectee is Class, equals(true));
200 expect(instanceMirror.reflectee.field, equals(30)); 191 expect(instanceMirror.reflectee.field, equals(30));
201 192
202 193
203 var future = classMirror.newInstanceAsync(const Symbol(''), []); 194 var future = classMirror.newInstanceAsync(const Symbol(''), []);
204 future.then(expectAsync1((resultMirror) { 195 future.then(expectAsync1((resultMirror) {
205 var instance = resultMirror.reflectee; 196 var instance = resultMirror.reflectee;
206 expect(instance is Class, equals(true)); 197 expect(instance is Class, equals(true));
207 expect(instance.field, equals("default value")); 198 expect(instance.field, equals("default value"));
208 })); 199 }));
209 200
210 future = classMirror.newInstanceAsync(const Symbol('withInitialValue'), [45]); 201 future = classMirror.newInstanceAsync(#withInitialValue, [45]);
211 future.then(expectAsync1((resultMirror) { 202 future.then(expectAsync1((resultMirror) {
212 var instance = resultMirror.reflectee; 203 var instance = resultMirror.reflectee;
213 expect(instance is Class, equals(true)); 204 expect(instance is Class, equals(true));
214 expect(instance.field, equals(45)); 205 expect(instance.field, equals(45));
215 })); 206 }));
216 } 207 }
217 208
218 testReflectClass(mirrors) { 209 testReflectClass(mirrors) {
219 var classMirror = reflectClass(Class); 210 var classMirror = reflectClass(Class);
220 expect(classMirror is ClassMirror, equals(true)); 211 expect(classMirror is ClassMirror, equals(true));
221 var symbolClassMirror = reflectClass(Symbol); 212 var symbolClassMirror = reflectClass(Symbol);
222 var symbolMirror = symbolClassMirror.newInstance(const Symbol(''), 213 var symbolMirror = symbolClassMirror.newInstance(const Symbol(''),
223 ['withInitialValue']); 214 ['withInitialValue']);
224 var objectMirror = classMirror.newInstance(symbolMirror.reflectee,[1234]); 215 var objectMirror = classMirror.newInstance(symbolMirror.reflectee,[1234]);
225 expect(objectMirror.reflectee is Class, equals(true)); 216 expect(objectMirror.reflectee is Class, equals(true));
226 expect(objectMirror.reflectee.field, equals(1234)); 217 expect(objectMirror.reflectee.field, equals(1234));
227 } 218 }
228 219
229 testNames(mirrors) { 220 testNames(mirrors) {
230 var libMirror = mirrors.findLibrary(const Symbol("MirrorsTest")).single; 221 var libMirror = mirrors.findLibrary(#MirrorsTest).single;
231 var classMirror = libMirror.classes[const Symbol('Class')]; 222 var classMirror = libMirror.classes[#Class];
232 var typedefMirror = libMirror.members[const Symbol('Typedef')]; 223 var typedefMirror = libMirror.members[#Typedef];
233 var methodMirror = libMirror.functions[const Symbol('testNames')]; 224 var methodMirror = libMirror.functions[#testNames];
234 var variableMirror = classMirror.variables[const Symbol('field')]; 225 var variableMirror = classMirror.variables[#field];
235 226
236 expect(libMirror.simpleName, equals(const Symbol('MirrorsTest'))); 227 expect(libMirror.simpleName, equals(#MirrorsTest));
237 expect(libMirror.qualifiedName, equals(const Symbol('MirrorsTest'))); 228 expect(libMirror.qualifiedName, equals(#MirrorsTest));
238 229
239 expect(classMirror.simpleName, equals(const Symbol('Class'))); 230 expect(classMirror.simpleName, equals(#Class));
240 expect(classMirror.qualifiedName, equals(const Symbol('MirrorsTest.Class'))); 231 expect(classMirror.qualifiedName, equals(#MirrorsTest.Class));
241 232
242 TypeVariableMirror typeVariable = classMirror.typeVariables.single; 233 TypeVariableMirror typeVariable = classMirror.typeVariables.single;
243 expect(typeVariable.simpleName, equals(const Symbol('T'))); 234 expect(typeVariable.simpleName, equals(#T));
244 expect(typeVariable.qualifiedName, 235 expect(typeVariable.qualifiedName,
245 equals(const Symbol('MirrorsTest.Class.T'))); 236 equals(const Symbol('MirrorsTest.Class.T')));
246 237
247 if (!isDart2js) { // TODO(ahe): Implement this in dart2js. 238 if (!isDart2js) { // TODO(ahe): Implement this in dart2js.
248 expect(typedefMirror.simpleName, equals(const Symbol('Typedef'))); 239 expect(typedefMirror.simpleName, equals(#Typedef));
249 expect(typedefMirror.qualifiedName, 240 expect(typedefMirror.qualifiedName,
250 equals(const Symbol('MirrorsTest.Typedef'))); 241 equals(const Symbol('MirrorsTest.Typedef')));
251 242
252 var typedefMirrorDeNovo = reflectClass(Typedef); 243 var typedefMirrorDeNovo = reflectType(Typedef);
253 expect(typedefMirrorDeNovo.simpleName, equals(const Symbol('Typedef'))); 244 expect(typedefMirrorDeNovo.simpleName, equals(#Typedef));
254 expect(typedefMirrorDeNovo.qualifiedName, 245 expect(typedefMirrorDeNovo.qualifiedName,
255 equals(const Symbol('MirrorsTest.Typedef'))); 246 equals(const Symbol('MirrorsTest.Typedef')));
256 } 247 }
257 248
258 expect(methodMirror.simpleName, equals(const Symbol('testNames'))); 249 expect(methodMirror.simpleName, equals(#testNames));
259 expect(methodMirror.qualifiedName, 250 expect(methodMirror.qualifiedName,
260 equals(const Symbol('MirrorsTest.testNames'))); 251 equals(const Symbol('MirrorsTest.testNames')));
261 252
262 expect(variableMirror.simpleName, equals(const Symbol('field'))); 253 expect(variableMirror.simpleName, equals(#field));
263 expect(variableMirror.qualifiedName, 254 expect(variableMirror.qualifiedName,
264 equals(const Symbol('MirrorsTest.Class.field'))); 255 equals(const Symbol('MirrorsTest.Class.field')));
265 } 256 }
266 257
267 testLibraryUri(var value, bool check(Uri)) { 258 testLibraryUri(var value, bool check(Uri)) {
268 var valueMirror = reflect(value); 259 var valueMirror = reflect(value);
269 ClassMirror valueClass = valueMirror.type; 260 ClassMirror valueClass = valueMirror.type;
270 LibraryMirror valueLibrary = valueClass.owner; 261 LibraryMirror valueLibrary = valueClass.owner;
271 expect(check(valueLibrary.uri), isTrue); 262 expect(check(valueLibrary.uri), isTrue);
272 } 263 }
273 264
274 main() { 265 main() {
275 var mirrors = currentMirrorSystem(); 266 var mirrors = currentMirrorSystem();
276 test("Test reflective method invocation", () { testInvoke(mirrors); }); 267 test("Test reflective method invocation", () { testInvoke(mirrors); });
277 test("Test instance field access", () { testInstanceFieldAccess(mirrors); }); 268 test("Test instance field access", () { testInstanceFieldAccess(mirrors); });
278 test('Test intercepted objects', () { testIntercepted(mirrors); }); 269 test('Test intercepted objects', () { testIntercepted(mirrors); });
279 test("Test field access", () { testFieldAccess(mirrors); }); 270 test("Test field access", () { testFieldAccess(mirrors); });
280 test("Test closure mirrors", () { testClosureMirrors(mirrors); }); 271 test("Test closure mirrors", () { testClosureMirrors(mirrors); });
281 test("Test invoke constructor", () { testInvokeConstructor(mirrors); }); 272 test("Test invoke constructor", () { testInvokeConstructor(mirrors); });
282 test("Test current library uri", () { 273 test("Test current library uri", () {
283 testLibraryUri(new Class(), 274 testLibraryUri(new Class(),
284 (Uri uri) => uri.path.endsWith('/mirrors_test.dart')); 275 (Uri uri) => uri.path.endsWith('/mirrors_test.dart'));
285 }); 276 });
286 test("Test dart library uri", () { 277 test("Test dart library uri", () {
287 testLibraryUri("test", (Uri uri) => uri == Uri.parse('dart:core')); 278 testLibraryUri("test", (Uri uri) => uri == Uri.parse('dart:core'));
288 }); 279 });
289 test("Test simple and qualifiedName", () { testNames(mirrors); }); 280 test("Test simple and qualifiedName", () { testNames(mirrors); });
290 test("Test reflect type", () { testReflectClass(mirrors); }); 281 test("Test reflect type", () { testReflectClass(mirrors); });
291 } 282 }
OLDNEW
« no previous file with comments | « tests/lib/mirrors/generic_function_typedef_test.dart ('k') | tests/lib/mirrors/private_symbol_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698