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

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

Issue 27275002: Add test for ClassMirror.mixin. Rename the mixin application test. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: 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
« no previous file with comments | « tests/lib/mirrors/mixin_application_test.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 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 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 // This test uses the multi-test "ok" feature to create two positive tests from 5 library test.mixin;
6 // one file. One of these tests fail on dart2js, but pass on the VM, or vice
7 // versa.
8 // TODO(ahe): When both implementations agree, remove the multi-test parts.
9
10 library test.mixin_test;
11 6
12 import 'dart:mirrors'; 7 import 'dart:mirrors';
13 8
14 import 'package:expect/expect.dart'; 9 import 'package:expect/expect.dart';
15 10
16 import 'model.dart'; 11 class Super {}
17 import 'stringify.dart'; 12 class Mixin {}
13 class Mixin2 {}
14 class Mixin3 {}
18 15
19 class Mixin { 16 typedef MixinApplication = Super with Mixin;
20 int i; 17 class Class extends Super with Mixin {}
21 m() {} 18 class MultipleMixins extends Super with Mixin, Mixin2, Mixin3 {}
22 }
23
24 class Mixin2 {
25 int i2;
26 m2() {}
27 }
28
29 typedef MixinApplication = C with Mixin;
30 typedef MixinApplicationA = C with Mixin, Mixin2;
31
32 typedef UnusedMixinApplication = C with Mixin;
33
34 class Subclass extends C with Mixin {
35 f() {}
36 }
37
38 class Subclass2 extends MixinApplication {
39 g() {}
40 }
41
42 class SubclassA extends C with Mixin, Mixin2 {
43 fa() {}
44 }
45
46 class Subclass2A extends MixinApplicationA {
47 ga() {}
48 }
49
50 checkClass(Type type, List<String> expectedSuperclasses) {
51 int i = 0;
52 for (var cls = reflectClass(type); cls != null; cls = cls.superclass) {
53 expect(expectedSuperclasses[i++], cls);
54 }
55 Expect.equals(i, expectedSuperclasses.length, '$type');
56 }
57
58 expectSame(ClassMirror a, ClassMirror b) {
59 Expect.equals(a, b);
60 expect(stringify(a), b);
61 expect(stringify(b), a);
62 }
63
64 testMixin() {
65 checkClass(Mixin, [
66 'Class(s(Mixin) in s(test.mixin_test), top-level)',
67 'Class(s(Object) in s(dart.core), top-level)',
68 ]);
69
70 expect(
71 '{i: Variable(s(i) in s(Mixin)),'
72 ' m: Method(s(m) in s(Mixin))}',
73 reflectClass(Mixin).members);
74
75 expect('{Mixin: Method(s(Mixin) in s(Mixin), constructor)}',
76 reflectClass(Mixin).constructors);
77 }
78
79 testMixin2() {
80 checkClass(Mixin2, [
81 'Class(s(Mixin2) in s(test.mixin_test), top-level)',
82 'Class(s(Object) in s(dart.core), top-level)',
83 ]);
84
85 expect(
86 '{i2: Variable(s(i2) in s(Mixin2)),'
87 ' m2: Method(s(m2) in s(Mixin2))}',
88 reflectClass(Mixin2).members);
89
90 expect('{Mixin2: Method(s(Mixin2) in s(Mixin2), constructor)}',
91 reflectClass(Mixin2).constructors);
92 }
93
94 testMixinApplication() {
95 checkClass(MixinApplication, [
96 'Class(s(MixinApplication) in s(test.mixin_test), top-level)',
97 'Class(s(C) in s(test.model), top-level)',
98 'Class(s(B) in s(test.model), top-level)',
99 'Class(s(A) in s(test.model), top-level)',
100 'Class(s(Object) in s(dart.core), top-level)',
101 ]);
102
103 String owner = 'Mixin';
104 owner = 'MixinApplication'; /// 01: ok
105 expect(
106 '{i: Variable(s(i) in s($owner)),'
107 ' m: Method(s(m) in s($owner))}',
108 reflectClass(MixinApplication).members);
109
110 expect('{MixinApplication: Method(s(MixinApplication) in s(MixinApplication),'
111 ' constructor)}',
112 reflectClass(MixinApplication).constructors);
113
114 expectSame(reflectClass(C), reflectClass(MixinApplication).superclass);
115 }
116
117 testMixinApplicationA() {
118 // TODO(ahe): I don't think an anonymous mixin has an owner.
119 String owner = ' in s(test.mixin_test)';
120 owner = ''; /// 01: ok
121 checkClass(MixinApplicationA, [
122 'Class(s(MixinApplicationA) in s(test.mixin_test), top-level)',
123 'Class(s(test.model.C with test.mixin_test.Mixin)$owner, top-level)',
124 'Class(s(C) in s(test.model), top-level)',
125 'Class(s(B) in s(test.model), top-level)',
126 'Class(s(A) in s(test.model), top-level)',
127 'Class(s(Object) in s(dart.core), top-level)',
128 ]);
129
130 owner = 'Mixin2';
131 owner = 'MixinApplicationA'; /// 01: ok
132 expect(
133 '{i2: Variable(s(i2) in s($owner)),'
134 ' m2: Method(s(m2) in s($owner))}',
135 reflectClass(MixinApplicationA).members);
136
137 expect(
138 '{MixinApplicationA: Method(s(MixinApplicationA) in s(MixinApplicationA),'
139 ' constructor)}',
140 reflectClass(MixinApplicationA).constructors);
141
142 expect(
143 '{i: Variable(s(i) in s(Mixin)),'
144 ' m: Method(s(m) in s(Mixin))}',
145 reflectClass(MixinApplicationA).superclass.members);
146
147 String name = 'test.model.C with test.mixin_test.Mixin';
148 name = 'Mixin'; /// 01: ok
149 expect(
150 '{$name:'
151 ' Method(s($name)'
152 ' in s($name), constructor)}',
153 reflectClass(MixinApplicationA).superclass.constructors);
154
155 expectSame(
156 reflectClass(C),
157 reflectClass(MixinApplicationA).superclass.superclass);
158 }
159
160 testUnusedMixinApplication() {
161 checkClass(UnusedMixinApplication, [
162 'Class(s(UnusedMixinApplication) in s(test.mixin_test), top-level)',
163 'Class(s(C) in s(test.model), top-level)',
164 'Class(s(B) in s(test.model), top-level)',
165 'Class(s(A) in s(test.model), top-level)',
166 'Class(s(Object) in s(dart.core), top-level)',
167 ]);
168
169 String owner = 'Mixin';
170 owner = 'UnusedMixinApplication'; /// 01: ok
171 expect(
172 '{i: Variable(s(i) in s($owner)),'
173 ' m: Method(s(m) in s($owner))}',
174 reflectClass(UnusedMixinApplication).members);
175
176 expect(
177 '{UnusedMixinApplication: Method(s(UnusedMixinApplication)'
178 ' in s(UnusedMixinApplication), constructor)}',
179 reflectClass(UnusedMixinApplication).constructors);
180
181 expectSame(reflectClass(C), reflectClass(UnusedMixinApplication).superclass);
182 }
183
184 testSubclass() {
185 String owner = ' in s(test.mixin_test)';
186 owner = ''; /// 01: ok
187 checkClass(Subclass, [
188 'Class(s(Subclass) in s(test.mixin_test), top-level)',
189 'Class(s(test.model.C with test.mixin_test.Mixin)$owner, top-level)',
190 'Class(s(C) in s(test.model), top-level)',
191 'Class(s(B) in s(test.model), top-level)',
192 'Class(s(A) in s(test.model), top-level)',
193 'Class(s(Object) in s(dart.core), top-level)',
194 ]);
195
196 expect(
197 '{f: Method(s(f) in s(Subclass))}',
198 reflectClass(Subclass).members);
199
200 expect(
201 '{Subclass: Method(s(Subclass) in s(Subclass), constructor)}',
202 reflectClass(Subclass).constructors);
203
204 expect(
205 '{i: Variable(s(i) in s(Mixin)),'
206 ' m: Method(s(m) in s(Mixin))}',
207 reflectClass(Subclass).superclass.members);
208
209 String name = 'test.model.C with test.mixin_test.Mixin';
210 name = 'Mixin'; /// 01: ok
211 expect(
212 '{$name:'
213 ' Method(s($name)'
214 ' in s($name), constructor)}',
215 reflectClass(Subclass).superclass.constructors);
216
217 expectSame(
218 reflectClass(C),
219 reflectClass(Subclass).superclass.superclass);
220 }
221
222 testSubclass2() {
223 checkClass(Subclass2, [
224 'Class(s(Subclass2) in s(test.mixin_test), top-level)',
225 'Class(s(MixinApplication) in s(test.mixin_test), top-level)',
226 'Class(s(C) in s(test.model), top-level)',
227 'Class(s(B) in s(test.model), top-level)',
228 'Class(s(A) in s(test.model), top-level)',
229 'Class(s(Object) in s(dart.core), top-level)',
230 ]);
231
232 expect(
233 '{g: Method(s(g) in s(Subclass2))}',
234 reflectClass(Subclass2).members);
235
236 expect(
237 '{Subclass2: Method(s(Subclass2) in s(Subclass2), constructor)}',
238 reflectClass(Subclass2).constructors);
239
240 expectSame(
241 reflectClass(MixinApplication),
242 reflectClass(Subclass2).superclass);
243 }
244
245 testSubclassA() {
246 // TODO(ahe): I don't think an anonymous mixin has an owner.
247 String owner = ' in s(test.mixin_test)';
248 owner = ''; /// 01: ok
249 checkClass(SubclassA, [
250 'Class(s(SubclassA) in s(test.mixin_test), top-level)',
251 'Class(s(test.model.C with test.mixin_test.Mixin, test.mixin_test.Mixin2)'
252 '$owner, top-level)',
253 'Class(s(test.model.C with test.mixin_test.Mixin)$owner, top-level)',
254 'Class(s(C) in s(test.model), top-level)',
255 'Class(s(B) in s(test.model), top-level)',
256 'Class(s(A) in s(test.model), top-level)',
257 'Class(s(Object) in s(dart.core), top-level)',
258 ]);
259
260 expect(
261 '{fa: Method(s(fa) in s(SubclassA))}',
262 reflectClass(SubclassA).members);
263
264 expect(
265 '{SubclassA: Method(s(SubclassA) in s(SubclassA), constructor)}',
266 reflectClass(SubclassA).constructors);
267
268 expect(
269 '{i2: Variable(s(i2) in s(Mixin2)),'
270 ' m2: Method(s(m2) in s(Mixin2))}',
271 reflectClass(SubclassA).superclass.members);
272
273 String name =
274 'test.model.C with test.mixin_test.Mixin, test.mixin_test.Mixin2';
275 name = 'Mixin2'; /// 01: ok
276 expect(
277 '{$name: Method(s($name) in s($name), constructor)}',
278 reflectClass(SubclassA).superclass.constructors);
279
280 expect(
281 '{i: Variable(s(i) in s(Mixin)),'
282 ' m: Method(s(m) in s(Mixin))}',
283 reflectClass(SubclassA).superclass.superclass.members);
284
285 name = 'test.model.C with test.mixin_test.Mixin';
286 name = 'Mixin'; /// 01: ok
287 expect(
288 '{$name:'
289 ' Method(s($name)'
290 ' in s($name), constructor)}',
291 reflectClass(SubclassA).superclass.superclass.constructors);
292
293 expectSame(
294 reflectClass(C),
295 reflectClass(SubclassA).superclass.superclass.superclass);
296 }
297
298 testSubclass2A() {
299 // TODO(ahe): I don't think an anonymous mixin has an owner.
300 String owner = ' in s(test.mixin_test)';
301 owner = ''; /// 01: ok
302 checkClass(Subclass2A, [
303 'Class(s(Subclass2A) in s(test.mixin_test), top-level)',
304 'Class(s(MixinApplicationA) in s(test.mixin_test), top-level)',
305 'Class(s(test.model.C with test.mixin_test.Mixin)$owner,'
306 ' top-level)',
307 'Class(s(C) in s(test.model), top-level)',
308 'Class(s(B) in s(test.model), top-level)',
309 'Class(s(A) in s(test.model), top-level)',
310 'Class(s(Object) in s(dart.core), top-level)',
311 ]);
312
313 expect(
314 '{ga: Method(s(ga) in s(Subclass2A))}',
315 reflectClass(Subclass2A).members);
316
317 expect(
318 '{Subclass2A: Method(s(Subclass2A) in s(Subclass2A), constructor)}',
319 reflectClass(Subclass2A).constructors);
320
321 expectSame(reflectClass(MixinApplicationA),
322 reflectClass(Subclass2A).superclass);
323 }
324 19
325 main() { 20 main() {
326 testMixin(); 21 Expect.equals(reflectClass(Mixin),
327 testMixin2(); 22 reflectClass(MixinApplication).mixin);
328 testMixinApplication(); 23 Expect.equals(reflectClass(Super),
329 testMixinApplicationA(); 24 reflectClass(MixinApplication).superclass.mixin);
330 testUnusedMixinApplication(); 25
331 testSubclass(); 26 Expect.equals(reflectClass(Class),
332 testSubclass2(); 27 reflectClass(Class).mixin);
333 testSubclassA(); 28 Expect.equals(reflectClass(Mixin),
334 testSubclass2A(); 29 reflectClass(Class).superclass.mixin);
30 Expect.equals(reflectClass(Super),
31 reflectClass(Class).superclass.superclass.mixin);
32
33 Expect.equals(reflectClass(MultipleMixins),
34 reflectClass(MultipleMixins).mixin);
35 Expect.equals(reflectClass(Mixin3),
36 reflectClass(MultipleMixins).superclass.mixin);
37 Expect.equals(reflectClass(Mixin2),
38 reflectClass(MultipleMixins).superclass.superclass.mixin);
39 Expect.equals(reflectClass(Mixin),
40 reflectClass(MultipleMixins).superclass.superclass.superclass
41 .mixin);
42 Expect.equals(reflectClass(Super),
43 reflectClass(MultipleMixins).superclass.superclass.superclass
44 .superclass.mixin);
335 } 45 }
OLDNEW
« no previous file with comments | « tests/lib/mirrors/mixin_application_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698