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

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

Issue 14646031: Implement invoke, setField, and getField (unminified). (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Make expando private Created 7 years, 7 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 // TODO(rmacnak): Move the existing mirror tests here (a place for 5 // TODO(rmacnak): Move the existing mirror tests here (a place for
6 // cross-implementation tests). 6 // cross-implementation tests).
7 7
8 library MirrorsTest; 8 library MirrorsTest;
9 import "dart:mirrors"; 9 import "dart:mirrors";
10 import "../../../pkg/unittest/lib/unittest.dart"; 10 import "../../../pkg/unittest/lib/unittest.dart";
(...skipping 12 matching lines...) Expand all
23 typedef Typedef(); 23 typedef Typedef();
24 24
25 testInvoke(mirrors) { 25 testInvoke(mirrors) {
26 var instance = new Class(); 26 var instance = new Class();
27 var instMirror = reflect(instance); 27 var instMirror = reflect(instance);
28 28
29 expect(instMirror.invoke(const Symbol("m"),['A', 'B', instance]).reflectee, 29 expect(instMirror.invoke(const Symbol("m"),['A', 'B', instance]).reflectee,
30 equals({"a": 'A', "b":'B', "c": instance})); 30 equals({"a": 'A', "b":'B', "c": instance}));
31 } 31 }
32 32
33 testInstanceFieldAccess(mirrors) {
34 var instance = new Class();
35 var instMirror = reflect(instance);
36
37 instMirror.setFieldAsync(const Symbol('field'), 44);
Johnni Winther 2013/05/08 08:22:08 How unorthodox to use 44 ;)
38 instMirror.getFieldAsync(const Symbol('field')).then(
39 expectAsync1((resultMirror) {
40 expect(resultMirror.reflectee, equals(44));
41 expect(instance.field, equals(44));
42 }));
43 }
44
45 /// In dart2js, lists, numbers, and other objects are treated special
46 /// and their methods are invoked through a techique called interceptors.
47 testIntercepted(mirrors) {
48 var instance = 1;
49 var instMirror = reflect(instance);
50
51 expect(instMirror.invoke(const Symbol('toString'), []).reflectee,
52 equals('1'));
53
54 instance = [];
55 instMirror = reflect(instance);
56 instMirror.setField(const Symbol('length'), 44);
57 var resultMirror = instMirror.getField(const Symbol('length'));
58 expect(resultMirror.reflectee, equals(44));
59 expect(instance.length, equals(44));
60
61 expect(instMirror.invoke(const Symbol('toString'), []).reflectee,
62 equals('[null, null, null, null, null, null, null, null, null, null,'
63 ' null, null, null, null, null, null, null, null, null, null,'
64 ' null, null, null, null, null, null, null, null, null, null,'
65 ' null, null, null, null, null, null, null, null, null, null,'
66 ' null, null, null, null]'));
67 }
68
33 testFieldAccess(mirrors) { 69 testFieldAccess(mirrors) {
34 var instance = new Class(); 70 var instance = new Class();
35 71
36 var libMirror = mirrors.findLibrary(const Symbol("MirrorsTest")).single; 72 var libMirror = mirrors.findLibrary(const Symbol("MirrorsTest")).single;
37 var classMirror = libMirror.classes[const Symbol("Class")]; 73 var classMirror = libMirror.classes[const Symbol("Class")];
38 var instMirror = reflect(instance); 74 var instMirror = reflect(instance);
39 var fieldMirror = classMirror.members[new Symbol('field')]; 75 var fieldMirror = classMirror.members[const Symbol('field')];
40 76
41 expect(fieldMirror is VariableMirror, isTrue); 77 expect(fieldMirror is VariableMirror, isTrue);
42 expect(fieldMirror.type, equals(mirrors.dynamicType)); 78 expect(fieldMirror.type, equals(mirrors.dynamicType));
43 79
44 libMirror.setField(const Symbol('topLevelField'), [91]); 80 libMirror.setField(const Symbol('topLevelField'), [91]);
45 expect(libMirror.getField(const Symbol('topLevelField')).reflectee, 81 expect(libMirror.getField(const Symbol('topLevelField')).reflectee,
46 equals([91])); 82 equals([91]));
47 expect(topLevelField, equals([91])); 83 expect(topLevelField, equals([91]));
48 84
49 libMirror.setFieldAsync(new Symbol('topLevelField'), 42); 85 libMirror.setFieldAsync(const Symbol('topLevelField'), 42);
50 var future = libMirror.getFieldAsync(new Symbol('topLevelField')); 86 var future = libMirror.getFieldAsync(const Symbol('topLevelField'));
51 future.then(expectAsync1((resultMirror) { 87 future.then(expectAsync1((resultMirror) {
52 expect(resultMirror.reflectee, equals(42)); 88 expect(resultMirror.reflectee, equals(42));
53 expect(topLevelField, equals(42)); 89 expect(topLevelField, equals(42));
54 })); 90 }));
55 91
56 classMirror.setFieldAsync(new Symbol('staticField'), 43); 92 classMirror.setFieldAsync(const Symbol('staticField'), 43);
57 future = classMirror.getFieldAsync(new Symbol('staticField')); 93 future = classMirror.getFieldAsync(const Symbol('staticField'));
58 future.then(expectAsync1((resultMirror) { 94 future.then(expectAsync1((resultMirror) {
59 expect(resultMirror.reflectee, equals(43)); 95 expect(resultMirror.reflectee, equals(43));
60 expect(Class.staticField, equals(43)); 96 expect(Class.staticField, equals(43));
61 })); 97 }));
62 98
63 instMirror.setFieldAsync(new Symbol('field'), 44); 99 instMirror.setFieldAsync(const Symbol('field'), 44);
64 future = instMirror.getFieldAsync(new Symbol('field')); 100 future = instMirror.getFieldAsync(const Symbol('field'));
65 future.then(expectAsync1((resultMirror) { 101 future.then(expectAsync1((resultMirror) {
66 expect(resultMirror.reflectee, equals(44)); 102 expect(resultMirror.reflectee, equals(44));
67 expect(instance.field, equals(44)); 103 expect(instance.field, equals(44));
68 })); 104 }));
69 } 105 }
70 106
71 testClosureMirrors(mirrors) { 107 testClosureMirrors(mirrors) {
72 var closure = (x, y, z) { return x + y + z; }; 108 var closure = (x, y, z) { return x + y + z; };
73 109
74 var mirror = reflect(closure); 110 var mirror = reflect(closure);
75 expect(mirror is ClosureMirror, equals(true)); 111 expect(mirror is ClosureMirror, equals(true));
76 112
77 var funcMirror = mirror.function; 113 var funcMirror = mirror.function;
78 expect(funcMirror is MethodMirror, equals(true)); 114 expect(funcMirror is MethodMirror, equals(true));
79 expect(funcMirror.parameters.length, equals(3)); 115 expect(funcMirror.parameters.length, equals(3));
80 116
81 expect(mirror.apply([7, 8, 9]).reflectee, equals(24)); 117 expect(mirror.apply([7, 8, 9]).reflectee, equals(24));
82 118
83 var future = mirror.applyAsync([2, 4, 8]); 119 var future = mirror.applyAsync([2, 4, 8]);
84 future.then(expectAsync1((resultMirror) { 120 future.then(expectAsync1((resultMirror) {
85 expect(resultMirror.reflectee, equals(14)); 121 expect(resultMirror.reflectee, equals(14));
86 })); 122 }));
87 } 123 }
88 124
89 testInvokeConstructor(mirrors) { 125 testInvokeConstructor(mirrors) {
90 var libMirror = mirrors.findLibrary(const Symbol("MirrorsTest")).single; 126 var classMirror = reflectClass(Class);
91 var classMirror = libMirror.classes[const Symbol("Class")];
92 127
93 var instanceMirror = classMirror.newInstance(const Symbol(''),[]); 128 var instanceMirror = classMirror.newInstance(const Symbol(''),[]);
94 expect(instanceMirror.reflectee is Class, equals(true)); 129 expect(instanceMirror.reflectee is Class, equals(true));
95 expect(instanceMirror.reflectee.field, equals("default value")); 130 expect(instanceMirror.reflectee.field, equals("default value"));
96 131
97 instanceMirror = classMirror.newInstance(const Symbol('withInitialValue'), 132 instanceMirror = classMirror.newInstance(const Symbol('withInitialValue'),
98 [45]); 133 [45]);
99 expect(instanceMirror.reflectee is Class, equals(true)); 134 expect(instanceMirror.reflectee is Class, equals(true));
100 expect(instanceMirror.reflectee.field, equals(45)); 135 expect(instanceMirror.reflectee.field, equals(45));
101 136
102 var future = classMirror.newInstanceAsync(new Symbol(''), []); 137 var future = classMirror.newInstanceAsync(const Symbol(''), []);
103 future.then(expectAsync1((resultMirror) { 138 future.then(expectAsync1((resultMirror) {
104 var instance = resultMirror.reflectee; 139 var instance = resultMirror.reflectee;
105 expect(instance is Class, equals(true)); 140 expect(instance is Class, equals(true));
106 expect(instance.field, equals("default value")); 141 expect(instance.field, equals("default value"));
107 })); 142 }));
108 143
109 future = classMirror.newInstanceAsync(new Symbol('withInitialValue'), [45]); 144 future = classMirror.newInstanceAsync(const Symbol('withInitialValue'), [45]);
110 future.then(expectAsync1((resultMirror) { 145 future.then(expectAsync1((resultMirror) {
111 var instance = resultMirror.reflectee; 146 var instance = resultMirror.reflectee;
112 expect(instance is Class, equals(true)); 147 expect(instance is Class, equals(true));
113 expect(instance.field, equals(45)); 148 expect(instance.field, equals(45));
114 })); 149 }));
115 } 150 }
116 151
117 testReflectClass(mirrors) { 152 testReflectClass(mirrors) {
118 var classMirror = reflectClass(Class); 153 var classMirror = reflectClass(Class);
119 expect(classMirror is ClassMirror, equals(true)); 154 expect(classMirror is ClassMirror, equals(true));
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 equals(const Symbol('MirrorsTest.Class.field'))); 191 equals(const Symbol('MirrorsTest.Class.field')));
157 } 192 }
158 193
159 testLibraryUri(var value, bool check(Uri)) { 194 testLibraryUri(var value, bool check(Uri)) {
160 var valueMirror = reflect(value); 195 var valueMirror = reflect(value);
161 ClassMirror valueClass = valueMirror.type; 196 ClassMirror valueClass = valueMirror.type;
162 LibraryMirror valueLibrary = valueClass.owner; 197 LibraryMirror valueLibrary = valueClass.owner;
163 expect(check(valueLibrary.uri), isTrue); 198 expect(check(valueLibrary.uri), isTrue);
164 } 199 }
165 200
166 main() { 201 mainWithArgument({bool isDart2js}) {
167 var mirrors = currentMirrorSystem(); 202 var mirrors = currentMirrorSystem();
168 test("Test reflective method invocation", () { testInvoke(mirrors); }); 203 test("Test reflective method invocation", () { testInvoke(mirrors); });
204 test("Test instance field access", () { testInstanceFieldAccess(mirrors); });
205 test('Test intercepted objects', () { testIntercepted(mirrors); });
206 if (isDart2js) return;
169 test("Test field access", () { testFieldAccess(mirrors); }); 207 test("Test field access", () { testFieldAccess(mirrors); });
170 test("Test closure mirrors", () { testClosureMirrors(mirrors); }); 208 test("Test closure mirrors", () { testClosureMirrors(mirrors); });
171 test("Test invoke constructor", () { testInvokeConstructor(mirrors); }); 209 test("Test invoke constructor", () { testInvokeConstructor(mirrors); });
172 test("Test reflect type", () { testReflectClass(mirrors); }); 210 test("Test reflect type", () { testReflectClass(mirrors); });
173 test("Test simple and qualifiedName", () { testNames(mirrors); }); 211 test("Test simple and qualifiedName", () { testNames(mirrors); });
174 test("Test current library uri", () { 212 test("Test current library uri", () {
175 testLibraryUri(new Class(), 213 testLibraryUri(new Class(),
176 (Uri uri) => uri.path.endsWith('/mirrors_test.dart')); 214 (Uri uri) => uri.path.endsWith('/mirrors_test.dart'));
177 }); 215 });
178 test("Test dart library uri", () { 216 test("Test dart library uri", () {
179 testLibraryUri("test", (Uri uri) => uri == Uri.parse('dart:core')); 217 testLibraryUri("test", (Uri uri) => uri == Uri.parse('dart:core'));
180 }); 218 });
181 } 219 }
220
221 main() {
222 mainWithArgument(isDart2js: false);
223 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698