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

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

Issue 23460050: Mirror removals: async invoke, mirrorSystemOf(port), Mirror.mirrors. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 3 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 27 matching lines...) Expand all
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(const Symbol("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(const Symbol("notDefined"), []).reflectee,
45 equals("DNU")); 45 equals("DNU"));
46 expect(instMirror.invoke(const Symbol("m"), []).reflectee, 46 expect(instMirror.invoke(const Symbol("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(const Symbol("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(const Symbol("notDefined"), []).reflectee,
56 throws); 53 throws);
57 expect(() => classMirror.invoke(const Symbol("s"), []).reflectee, 54 expect(() => classMirror.invoke(const Symbol("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(const Symbol("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(const Symbol("notDefined"), []).reflectee,
67 throws); 61 throws);
68 expect(() => libMirror.invoke(const Symbol("u"), []).reflectee, 62 expect(() => libMirror.invoke(const Symbol("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 }
74
75 testInstanceFieldAccess(mirrors) {
76 var instance = new Class();
77 var instMirror = reflect(instance);
78
79 instMirror.setFieldAsync(const Symbol('field'), 44);
80 instMirror.getFieldAsync(const Symbol('field')).then(
81 expectAsync1((resultMirror) {
82 expect(resultMirror.reflectee, equals(44));
83 expect(instance.field, equals(44));
84 }));
85 } 64 }
86 65
87 /// In dart2js, lists, numbers, and other objects are treated special 66 /// In dart2js, lists, numbers, and other objects are treated special
88 /// and their methods are invoked through a techique called interceptors. 67 /// and their methods are invoked through a techique called interceptors.
89 testIntercepted(mirrors) { 68 testIntercepted(mirrors) {
90 var instance = 1; 69 var instance = 1;
91 var instMirror = reflect(instance); 70 var instMirror = reflect(instance);
92 71
93 expect(instMirror.invoke(const Symbol('toString'), []).reflectee, 72 expect(instMirror.invoke(const Symbol('toString'), []).reflectee,
94 equals('1')); 73 equals('1'));
(...skipping 22 matching lines...) Expand all
117 var fieldMirror = classMirror.members[const Symbol('field')]; 96 var fieldMirror = classMirror.members[const Symbol('field')];
118 var future; 97 var future;
119 98
120 expect(fieldMirror is VariableMirror, isTrue); 99 expect(fieldMirror is VariableMirror, isTrue);
121 expect(fieldMirror.type, equals(mirrors.dynamicType)); 100 expect(fieldMirror.type, equals(mirrors.dynamicType));
122 101
123 libMirror.setField(const Symbol('topLevelField'), [91]); 102 libMirror.setField(const Symbol('topLevelField'), [91]);
124 expect(libMirror.getField(const Symbol('topLevelField')).reflectee, 103 expect(libMirror.getField(const Symbol('topLevelField')).reflectee,
125 equals([91])); 104 equals([91]));
126 expect(topLevelField, equals([91])); 105 expect(topLevelField, equals([91]));
127
128 libMirror.setFieldAsync(const Symbol('topLevelField'), 42);
129 future = libMirror.getFieldAsync(const Symbol('topLevelField'));
130 future.then(expectAsync1((resultMirror) {
131 expect(resultMirror.reflectee, equals(42));
132 expect(topLevelField, equals(42));
133 }));
134
135 classMirror.setFieldAsync(const Symbol('staticField'), 43);
136 future = classMirror.getFieldAsync(const Symbol('staticField'));
137 future.then(expectAsync1((resultMirror) {
138 expect(resultMirror.reflectee, equals(43));
139 expect(Class.staticField, equals(43));
140 }));
141
142 instMirror.setFieldAsync(const Symbol('field'), 44);
143 future = instMirror.getFieldAsync(const Symbol('field'));
144 future.then(expectAsync1((resultMirror) {
145 expect(resultMirror.reflectee, equals(44));
146 expect(instance.field, equals(44));
147 }));
148 } 106 }
149 107
150 testClosureMirrors(mirrors) { 108 testClosureMirrors(mirrors) {
151 // TODO(ahe): Test optional parameters (named or not). 109 // TODO(ahe): Test optional parameters (named or not).
152 var closure = (x, y, z) { return x + y + z; }; 110 var closure = (x, y, z) { return x + y + z; };
153 111
154 var mirror = reflect(closure); 112 var mirror = reflect(closure);
155 expect(mirror is ClosureMirror, equals(true)); 113 expect(mirror is ClosureMirror, equals(true));
156 114
157 var funcMirror = mirror.function; 115 var funcMirror = mirror.function;
158 expect(funcMirror is MethodMirror, equals(true)); 116 expect(funcMirror is MethodMirror, equals(true));
159 expect(funcMirror.parameters.length, equals(3)); 117 expect(funcMirror.parameters.length, equals(3));
160 118
161 expect(mirror.apply([7, 8, 9]).reflectee, equals(24)); 119 expect(mirror.apply([7, 8, 9]).reflectee, equals(24));
162
163 var future = mirror.applyAsync([2, 4, 8]);
164 future.then(expectAsync1((resultMirror) {
165 expect(resultMirror.reflectee, equals(14));
166 }));
167 } 120 }
168 121
169 testInvokeConstructor(mirrors) { 122 testInvokeConstructor(mirrors) {
170 var classMirror = reflectClass(Class); 123 var classMirror = reflectClass(Class);
171 124
172 var instanceMirror = classMirror.newInstance(const Symbol(''),[]); 125 var instanceMirror = classMirror.newInstance(const Symbol(''),[]);
173 expect(instanceMirror.reflectee is Class, equals(true)); 126 expect(instanceMirror.reflectee is Class, equals(true));
174 expect(instanceMirror.reflectee.field, equals("default value")); 127 expect(instanceMirror.reflectee.field, equals("default value"));
175 128
176 instanceMirror = classMirror.newInstance(const Symbol('withInitialValue'), 129 instanceMirror = classMirror.newInstance(const Symbol('withInitialValue'),
(...skipping 14 matching lines...) Expand all
191 144
192 instanceMirror = classMirror.newInstance(const Symbol('faktory'), 145 instanceMirror = classMirror.newInstance(const Symbol('faktory'),
193 [9]); 146 [9]);
194 expect(instanceMirror.reflectee is Class, equals(true)); 147 expect(instanceMirror.reflectee is Class, equals(true));
195 expect(instanceMirror.reflectee.field, equals(27)); 148 expect(instanceMirror.reflectee.field, equals(27));
196 149
197 instanceMirror = classMirror.newInstance(const Symbol('redirectingFactory'), 150 instanceMirror = classMirror.newInstance(const Symbol('redirectingFactory'),
198 [10]); 151 [10]);
199 expect(instanceMirror.reflectee is Class, equals(true)); 152 expect(instanceMirror.reflectee is Class, equals(true));
200 expect(instanceMirror.reflectee.field, equals(30)); 153 expect(instanceMirror.reflectee.field, equals(30));
201
202
203 var future = classMirror.newInstanceAsync(const Symbol(''), []);
204 future.then(expectAsync1((resultMirror) {
205 var instance = resultMirror.reflectee;
206 expect(instance is Class, equals(true));
207 expect(instance.field, equals("default value"));
208 }));
209
210 future = classMirror.newInstanceAsync(const Symbol('withInitialValue'), [45]);
211 future.then(expectAsync1((resultMirror) {
212 var instance = resultMirror.reflectee;
213 expect(instance is Class, equals(true));
214 expect(instance.field, equals(45));
215 }));
216 } 154 }
217 155
218 testReflectClass(mirrors) { 156 testReflectClass(mirrors) {
219 var classMirror = reflectClass(Class); 157 var classMirror = reflectClass(Class);
220 expect(classMirror is ClassMirror, equals(true)); 158 expect(classMirror is ClassMirror, equals(true));
221 var symbolClassMirror = reflectClass(Symbol); 159 var symbolClassMirror = reflectClass(Symbol);
222 var symbolMirror = symbolClassMirror.newInstance(const Symbol(''), 160 var symbolMirror = symbolClassMirror.newInstance(const Symbol(''),
223 ['withInitialValue']); 161 ['withInitialValue']);
224 var objectMirror = classMirror.newInstance(symbolMirror.reflectee,[1234]); 162 var objectMirror = classMirror.newInstance(symbolMirror.reflectee,[1234]);
225 expect(objectMirror.reflectee is Class, equals(true)); 163 expect(objectMirror.reflectee is Class, equals(true));
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 testLibraryUri(var value, bool check(Uri)) { 205 testLibraryUri(var value, bool check(Uri)) {
268 var valueMirror = reflect(value); 206 var valueMirror = reflect(value);
269 ClassMirror valueClass = valueMirror.type; 207 ClassMirror valueClass = valueMirror.type;
270 LibraryMirror valueLibrary = valueClass.owner; 208 LibraryMirror valueLibrary = valueClass.owner;
271 expect(check(valueLibrary.uri), isTrue); 209 expect(check(valueLibrary.uri), isTrue);
272 } 210 }
273 211
274 main() { 212 main() {
275 var mirrors = currentMirrorSystem(); 213 var mirrors = currentMirrorSystem();
276 test("Test reflective method invocation", () { testInvoke(mirrors); }); 214 test("Test reflective method invocation", () { testInvoke(mirrors); });
277 test("Test instance field access", () { testInstanceFieldAccess(mirrors); });
278 test('Test intercepted objects', () { testIntercepted(mirrors); }); 215 test('Test intercepted objects', () { testIntercepted(mirrors); });
279 test("Test field access", () { testFieldAccess(mirrors); }); 216 test("Test field access", () { testFieldAccess(mirrors); });
280 test("Test closure mirrors", () { testClosureMirrors(mirrors); }); 217 test("Test closure mirrors", () { testClosureMirrors(mirrors); });
281 test("Test invoke constructor", () { testInvokeConstructor(mirrors); }); 218 test("Test invoke constructor", () { testInvokeConstructor(mirrors); });
282 test("Test current library uri", () { 219 test("Test current library uri", () {
283 testLibraryUri(new Class(), 220 testLibraryUri(new Class(),
284 (Uri uri) => uri.path.endsWith('/mirrors_test.dart')); 221 (Uri uri) => uri.path.endsWith('/mirrors_test.dart'));
285 }); 222 });
286 test("Test dart library uri", () { 223 test("Test dart library uri", () {
287 testLibraryUri("test", (Uri uri) => uri == Uri.parse('dart:core')); 224 testLibraryUri("test", (Uri uri) => uri == Uri.parse('dart:core'));
288 }); 225 });
289 test("Test simple and qualifiedName", () { testNames(mirrors); }); 226 test("Test simple and qualifiedName", () { testNames(mirrors); });
290 test("Test reflect type", () { testReflectClass(mirrors); }); 227 test("Test reflect type", () { testReflectClass(mirrors); });
291 } 228 }
OLDNEW
« sdk/lib/mirrors/mirrors.dart ('K') | « tests/lib/mirrors/invoke_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698