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

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

Issue 3011633002: Added back helper file accidentally deleted during test block 219 migration. (Closed)
Patch Set: Created 3 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
« no previous file with comments | « tests/lib_2/mirrors/equality_test.dart ('k') | tests/lib_strong/lib_strong.status » ('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) 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
3 // BSD-style license that can be found in the LICENSE file.
4
5 library MirrorsTest;
6
7 import 'dart:mirrors';
8
9 import '../../light_unittest.dart';
10
11 bool isDart2js = false; // TODO(ahe): Remove this field.
12
13 var topLevelField;
14 u(a, b, c) => {"a": a, "b": b, "c": c};
15 _v(a, b) => a + b;
16
17 class Class<T> {
18 Class() {
19 this.field = "default value";
20 }
21 Class.withInitialValue(this.field);
22 var field;
23
24 Class.generative(this.field);
25 Class.redirecting(y) : this.generative(y * 2);
26 factory Class.faktory(y) => new Class.withInitialValue(y * 3);
27 factory Class.redirectingFactory(y) = Class<T>.faktory;
28
29 m(a, b, c) => {"a": a, "b": b, "c": c};
30 _n(a, b) => a + b;
31 noSuchMethod(invocation) => "DNU";
32
33 static var staticField;
34 static s(a, b, c) => {"a": a, "b": b, "c": c};
35 static _t(a, b) => a + b;
36 }
37
38 typedef Typedef();
39
40 testInvoke(mirrors) {
41 var instance = new Class();
42 var instMirror = reflect(instance);
43
44 expect(instMirror.invoke(#m, ['A', 'B', instance]).reflectee,
45 equals({"a": 'A', "b": 'B', "c": instance}));
46 expect(instMirror.invoke(#notDefined, []).reflectee, equals("DNU"));
47 expect(instMirror.invoke(#m, []).reflectee, equals("DNU")); // Wrong arity.
48
49 var classMirror = instMirror.type;
50 expect(classMirror.invoke(#s, ['A', 'B', instance]).reflectee,
51 equals({"a": 'A', "b": 'B', "c": instance}));
52 expect(() => classMirror.invoke(#notDefined, []).reflectee, throws);
53 expect(() => classMirror.invoke(#s, []).reflectee, throws); // Wrong arity.
54
55 var libMirror = classMirror.owner as LibraryMirror;
56 expect(libMirror.invoke(#u, ['A', 'B', instance]).reflectee,
57 equals({"a": 'A', "b": 'B', "c": instance}));
58 expect(() => libMirror.invoke(#notDefined, []).reflectee, throws);
59 expect(() => libMirror.invoke(#u, []).reflectee, throws); // Wrong arity.
60 }
61
62 /// In dart2js, lists, numbers, and other objects are treated special
63 /// and their methods are invoked through a techique called interceptors.
64 testIntercepted(mirrors) {
65 {
66 var instance = 1;
67 var instMirror = reflect(instance);
68
69 expect(instMirror.invoke(#toString, []).reflectee, equals('1'));
70 }
71
72 var instance = [];
73 var instMirror = reflect(instance);
74 instMirror.setField(#length, 44);
75 var resultMirror = instMirror.getField(#length);
76 expect(resultMirror.reflectee, equals(44));
77 expect(instance.length, equals(44));
78
79 expect(
80 instMirror.invoke(#toString, []).reflectee,
81 equals('[null, null, null, null, null, null, null, null, null, null,'
82 ' null, null, null, null, null, null, null, null, null, null,'
83 ' null, null, null, null, null, null, null, null, null, null,'
84 ' null, null, null, null, null, null, null, null, null, null,'
85 ' null, null, null, null]'));
86 }
87
88 testFieldAccess(mirrors) {
89 var instance = new Class();
90
91 var libMirror = mirrors.findLibrary(#MirrorsTest);
92 var classMirror = libMirror.declarations[#Class];
93 var instMirror = reflect(instance);
94 var fieldMirror = classMirror.declarations[#field];
95 var future;
96
97 expect(fieldMirror is VariableMirror, isTrue);
98 expect(fieldMirror.type, equals(mirrors.dynamicType));
99
100 libMirror.setField(#topLevelField, [91]);
101 expect(libMirror.getField(#topLevelField).reflectee, equals([91]));
102 expect(topLevelField, equals([91]));
103 }
104
105 testClosureMirrors(mirrors) {
106 // TODO(ahe): Test optional parameters (named or not).
107 var closure = (x, y, z) {
108 return x + y + z;
109 };
110
111 var mirror = reflect(closure) as ClosureMirror;
112
113 var funcMirror = (mirror.function) as MethodMirror;
114 expect(funcMirror.parameters.length, equals(3));
115
116 expect(mirror.apply([7, 8, 9]).reflectee, equals(24));
117 }
118
119 testInvokeConstructor(mirrors) {
120 var classMirror = reflectClass(Class);
121
122 var instanceMirror = classMirror.newInstance(const Symbol(''), []);
123 expect(instanceMirror.reflectee is Class, equals(true));
124 expect(instanceMirror.reflectee.field, equals("default value"));
125
126 instanceMirror = classMirror.newInstance(#withInitialValue, [45]);
127 expect(instanceMirror.reflectee is Class, equals(true));
128 expect(instanceMirror.reflectee.field, equals(45));
129
130 instanceMirror = classMirror.newInstance(#generative, [7]);
131 expect(instanceMirror.reflectee is Class, equals(true));
132 expect(instanceMirror.reflectee.field, equals(7));
133
134 instanceMirror = classMirror.newInstance(#redirecting, [8]);
135 expect(instanceMirror.reflectee is Class, equals(true));
136 expect(instanceMirror.reflectee.field, equals(16));
137
138 instanceMirror = classMirror.newInstance(#faktory, [9]);
139 expect(instanceMirror.reflectee is Class, equals(true));
140 expect(instanceMirror.reflectee.field, equals(27));
141
142 instanceMirror = classMirror.newInstance(#redirectingFactory, [10]);
143 expect(instanceMirror.reflectee is Class, equals(true));
144 expect(instanceMirror.reflectee.field, equals(30));
145 }
146
147 testReflectClass(mirrors) {
148 var classMirror = reflectClass(Class);
149 expect(classMirror is ClassMirror, equals(true));
150 var symbolClassMirror = reflectClass(Symbol);
151 var symbolMirror =
152 symbolClassMirror.newInstance(const Symbol(''), ['withInitialValue']);
153 var objectMirror = classMirror.newInstance(symbolMirror.reflectee, [1234]);
154 expect(objectMirror.reflectee is Class, equals(true));
155 expect(objectMirror.reflectee.field, equals(1234));
156 }
157
158 testNames(mirrors) {
159 var libMirror = mirrors.findLibrary(#MirrorsTest);
160 var classMirror = libMirror.declarations[#Class];
161 var typedefMirror = libMirror.declarations[#Typedef];
162 var methodMirror = libMirror.declarations[#testNames];
163 var variableMirror = classMirror.declarations[#field];
164
165 expect(libMirror.simpleName, equals(#MirrorsTest));
166 expect(libMirror.qualifiedName, equals(#MirrorsTest));
167
168 expect(classMirror.simpleName, equals(#Class));
169 expect(classMirror.qualifiedName, equals(#MirrorsTest.Class));
170
171 TypeVariableMirror typeVariable = classMirror.typeVariables.single;
172 expect(typeVariable.simpleName, equals(#T));
173 expect(
174 typeVariable.qualifiedName, equals(const Symbol('MirrorsTest.Class.T')));
175
176 if (!isDart2js) {
177 // TODO(ahe): Implement this in dart2js.
178 expect(typedefMirror.simpleName, equals(#Typedef));
179 expect(typedefMirror.qualifiedName,
180 equals(const Symbol('MirrorsTest.Typedef')));
181
182 var typedefMirrorDeNovo = reflectType(Typedef);
183 expect(typedefMirrorDeNovo.simpleName, equals(#Typedef));
184 expect(typedefMirrorDeNovo.qualifiedName,
185 equals(const Symbol('MirrorsTest.Typedef')));
186 }
187
188 expect(methodMirror.simpleName, equals(#testNames));
189 expect(methodMirror.qualifiedName,
190 equals(const Symbol('MirrorsTest.testNames')));
191
192 expect(variableMirror.simpleName, equals(#field));
193 expect(variableMirror.qualifiedName,
194 equals(const Symbol('MirrorsTest.Class.field')));
195 }
196
197 testLibraryUri(var value, bool check(Uri)) {
198 var valueMirror = reflect(value);
199 ClassMirror valueClass = valueMirror.type;
200 LibraryMirror valueLibrary = valueClass.owner;
201 Uri uri = valueLibrary.uri;
202 if (uri.scheme != "https" ||
203 uri.host != "dartlang.org" ||
204 uri.path != "/dart2js-stripped-uri") {
205 expect(check(uri), isTrue);
206 }
207 }
208
209 main() {
210 var mirrors = currentMirrorSystem();
211 test("Test reflective method invocation", () {
212 testInvoke(mirrors);
213 });
214 test('Test intercepted objects', () {
215 testIntercepted(mirrors);
216 });
217 test("Test field access", () {
218 testFieldAccess(mirrors);
219 });
220 test("Test closure mirrors", () {
221 testClosureMirrors(mirrors);
222 });
223 test("Test invoke constructor", () {
224 testInvokeConstructor(mirrors);
225 });
226 test("Test current library uri", () {
227 testLibraryUri(
228 new Class(),
229 // TODO(floitsch): change this to "/mirrors_test.dart" when
230 // dart2js_mirrors_test.dart has been removed.
231 (Uri uri) => uri.path.endsWith('mirrors_test.dart'));
232 });
233 test("Test dart library uri", () {
234 testLibraryUri("test", (Uri uri) {
235 if (uri == Uri.parse('dart:core')) return true;
236 // TODO(floitsch): do we want to fake the interceptors to
237 // be in dart:core?
238 return (uri == Uri.parse('dart:_interceptors'));
239 });
240 });
241 test("Test simple and qualifiedName", () {
242 testNames(mirrors);
243 });
244 test("Test reflect type", () {
245 testReflectClass(mirrors);
246 });
247 }
OLDNEW
« no previous file with comments | « tests/lib_2/mirrors/equality_test.dart ('k') | tests/lib_strong/lib_strong.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698