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

Side by Side Diff: tests/compiler/dart2js/mirrors_mixin_test.dart

Issue 57983002: Add mixin support to source mirrors. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 1 month 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
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4
5 library mirrors_mixin_test;
6
7 import 'package:expect/expect.dart';
8 import 'package:async_helper/async_helper.dart';
9 import 'mirror_system_helper.dart';
10
11 const String CLASS_SOURCE = '''
12 class A {}
13
14 class S {}
15 class M1<T> {}
16 class M2 {}
17
18 class C extends S with M1<A> {}
19 class D extends S with M1, M2 {}
20 class E extends S with M2, M1 implements A, M1 {}
21 class E2 extends E {}
22
23 typedef F = S with M1<A>;
24 typedef G = abstract S with M1, M2;
25 typedef H = S with M2, M1 implements A, M1;
26 class H2 extends H {}
27 ''';
28
29 void main() {
30 asyncTest(() => createMirrorSystem(CLASS_SOURCE).then((MirrorSystem mirrors) {
31 LibraryMirror library = mirrors.libraries[SOURCE_URI];
32
33 // class A {}
34 var A = library.classes['A'];
35 Expect.isNotNull(A);
karlklose 2013/11/05 10:34:18 You could write test methods that takes the expect
Johnni Winther 2013/11/05 11:20:47 Done.
36 Expect.isTrue(A is ClassMirror);
37 Expect.isFalse(isMixinApplication(A));
38 Expect.isFalse(A.isObject);
39 Expect.isTrue(A.superclass.isObject);
40 Expect.equals(0, A.superinterfaces.length);
41
42 Expect.isTrue(getExtends(A).isObject);
43 Expect.isTrue(getWith(A).isEmpty);
44 Expect.isTrue(getImplements(A).isEmpty);
45
46 // class S {}
47 var S = library.classes['S'];
48 Expect.isNotNull(S);
49 Expect.isTrue(S is ClassMirror);
50 Expect.isFalse(isMixinApplication(S));
51 Expect.isFalse(S.isObject);
52 Expect.isTrue(S.superclass.isObject);
53 Expect.equals(0, S.superinterfaces.length);
54
55 Expect.isTrue(getExtends(S).isObject);
56 Expect.isTrue(getWith(S).isEmpty);
57 Expect.isTrue(getImplements(S).isEmpty);
58
59 // class M1 {}
60 var M1 = library.classes['M1'];
61 Expect.isNotNull(M1);
62 Expect.isTrue(M1 is ClassMirror);
63 Expect.isFalse(isMixinApplication(M1));
64 Expect.isFalse(M1.isObject);
65 Expect.isTrue(M1.superclass.isObject);
66 Expect.equals(0, M1.superinterfaces.length);
67
68 Expect.isTrue(getExtends(M1).isObject);
69 Expect.isTrue(getWith(M1).isEmpty);
70 Expect.isTrue(getImplements(M1).isEmpty);
71
72 // class M2 {}
73 var M2 = library.classes['M2'];
74 Expect.isNotNull(M2);
75 Expect.isTrue(M2 is ClassMirror);
76 Expect.isFalse(isMixinApplication(M2));
77 Expect.isFalse(M2.isObject);
78 Expect.isTrue(M2.superclass.isObject);
79 Expect.equals(0, M2.superinterfaces.length);
80
81 Expect.isTrue(getExtends(M2).isObject);
82 Expect.isTrue(getWith(M2).isEmpty);
83 Expect.isTrue(getImplements(M2).isEmpty);
84
85 // class C extends S with M1<A> {}
86 var C = library.classes['C'];
87 Expect.isNotNull(C);
88 Expect.isTrue(C is ClassMirror);
89 Expect.isFalse(isMixinApplication(C));
90 Expect.isFalse(C.isObject);
91 Expect.equals(0, C.superinterfaces.length);
92 var C_super = C.superclass;
93 Expect.isNotNull(C_super);
94 Expect.isTrue(C_super is ClassMirror);
95 Expect.isTrue(isMixinApplication(C_super));
96 Expect.isFalse(!C_super.isNameSynthetic);
karlklose 2013/11/05 10:34:18 Why this double negation?
Johnni Winther 2013/11/05 11:20:47 An artifact of code motion. Fixed.
97 Expect.equals(1, C_super.superinterfaces.length);
98 Expect.isTrue(containsType(M1, [A], C_super.superinterfaces));
99 Expect.isTrue(isType(M1, [A], C_super.mixin));
100 Expect.isFalse(C_super.isObject);
101 Expect.isTrue(sameDecl(S, C_super.superclass));
102
103 Expect.isTrue(sameDecl(S, getExtends(C)));
104 Expect.isTrue(sameDeclList([M1], getWith(C)));
105 Expect.isTrue(getImplements(C).isEmpty);
106
107 // D extends S with M1, M2 {}
108 var D = library.classes['D'];
109 Expect.isNotNull(D);
110 Expect.isTrue(D is ClassMirror);
111 Expect.isFalse(isMixinApplication(D));
112 Expect.isFalse(D.isObject);
113 Expect.equals(0, D.superinterfaces.length);
114 var D_super = D.superclass;
115 Expect.isNotNull(D_super);
116 Expect.isTrue(D_super is ClassMirror);
117 Expect.isTrue(isMixinApplication(D_super));
118 Expect.isFalse(!D_super.isNameSynthetic);
119 Expect.equals(1, D_super.superinterfaces.length);
120 Expect.isTrue(containsDecl(M2, D_super.superinterfaces));
121 Expect.isTrue(sameDecl(M2, D_super.mixin));
122 Expect.isFalse(D_super.isObject);
123 Expect.isFalse(sameDecl(S, D_super.superclass));
124 var D_super_super = D_super.superclass;
125 Expect.isNotNull(D_super_super);
126 Expect.isTrue(D_super_super is ClassMirror);
127 Expect.isTrue(isMixinApplication(D_super_super));
128 Expect.isFalse(!D_super_super.isNameSynthetic);
129 Expect.equals(1, D_super_super.superinterfaces.length);
130 Expect.isTrue(containsDecl(M1, D_super_super.superinterfaces));
131 Expect.isTrue(sameDecl(M1, D_super_super.mixin));
132 Expect.isFalse(D_super_super.isObject);
133 Expect.isTrue(sameDecl(S, D_super_super.superclass));
134
135 Expect.isTrue(sameDecl(S, getExtends(D)));
136 Expect.isTrue(sameDeclList([M1, M2], getWith(D)));
137 Expect.isTrue(getImplements(D).isEmpty);
138
139 // class E extends S with M2, M1 implements A, M1 {}
140 var E = library.classes['E'];
141 Expect.isNotNull(E);
142 Expect.isTrue(E is ClassMirror);
143 Expect.isFalse(isMixinApplication(E));
144 Expect.isFalse(E.isObject);
145 Expect.equals(2, E.superinterfaces.length);
146 Expect.isTrue(containsDecl(A, E.superinterfaces));
147 Expect.isTrue(containsDecl(M1, E.superinterfaces));
148 var E_super = E.superclass;
149 Expect.isNotNull(E_super);
150 Expect.isTrue(E_super is ClassMirror);
151 Expect.isTrue(isMixinApplication(E_super));
152 Expect.isFalse(!E_super.isNameSynthetic);
153 Expect.equals(1, E_super.superinterfaces.length);
154 Expect.isTrue(containsDecl(M1, E_super.superinterfaces));
155 Expect.isTrue(sameDecl(M1, E_super.mixin));
156 Expect.isFalse(E_super.isObject);
157 Expect.isFalse(sameDecl(S, E_super.superclass));
158 var E_super_super = E_super.superclass;
159 Expect.isNotNull(E_super_super);
160 Expect.isTrue(E_super_super is ClassMirror);
161 Expect.isTrue(isMixinApplication(E_super_super));
162 Expect.isFalse(!E_super_super.isNameSynthetic);
163 Expect.equals(1, E_super_super.superinterfaces.length);
164 Expect.isTrue(containsDecl(M2, E_super_super.superinterfaces));
165 Expect.isTrue(sameDecl(M2, E_super_super.mixin));
166 Expect.isFalse(E_super_super.isObject);
167 Expect.isTrue(sameDecl(S, E_super_super.superclass));
168
169 Expect.isTrue(sameDecl(S, getExtends(E)));
170 Expect.isTrue(sameDeclList([M2, M1], getWith(E)));
171 Expect.isTrue(sameDeclSet([A, M1], getImplements(E)));
172
173 // class E2 extends E {}
174 var E2 = library.classes['E2'];
175 Expect.isTrue(sameDecl(E, getExtends(E2)));
176 Expect.isTrue(getWith(E2).isEmpty);
177 Expect.isTrue(getImplements(E2).isEmpty);
178
179 // typedef F = S with M1<A>;
180 var F = library.classes['F'];
181 Expect.isNotNull(F);
182 Expect.isTrue(F is ClassMirror);
183 Expect.isFalse(F.isAbstract);
184 Expect.isTrue(isMixinApplication(F));
185 Expect.isTrue(!F.isNameSynthetic);
186 Expect.equals('F', F.simpleName);
187 Expect.isFalse(F.isObject);
188 Expect.equals(1, F.superinterfaces.length);
189 Expect.isTrue(containsDecl(M1, F.superinterfaces));
190 Expect.isTrue(isType(M1, [A], F.mixin));
191 var F_super = F.superclass;
192 Expect.isNotNull(F_super);
193 Expect.isTrue(F_super is ClassMirror);
194 Expect.isFalse(isMixinApplication(F_super));
195 Expect.isFalse(F_super.isObject);
196 Expect.isTrue(sameDecl(S, F_super));
197
198 Expect.isTrue(sameDecl(S, getExtends(F)));
199 Expect.isTrue(sameDeclList([M1], getWith(F)));
200 Expect.isTrue(getImplements(F).isEmpty);
201
202 // typedef G = abstract S with M1, M2;
203 var G = library.classes['G'];
204 Expect.isNotNull(G);
205 Expect.isTrue(G is ClassMirror);
206 Expect.isTrue(G.isAbstract);
207 Expect.isTrue(isMixinApplication(G));
208 Expect.isTrue(!G.isNameSynthetic);
209 Expect.equals('G', G.simpleName);
210 Expect.isFalse(G.isObject);
211 Expect.equals(1, G.superinterfaces.length);
212 Expect.isTrue(containsDecl(M2, G.superinterfaces));
213 Expect.isTrue(sameDecl(M2, G.mixin));
214 var G_super = G.superclass;
215 Expect.isNotNull(G_super);
216 Expect.isTrue(G_super is ClassMirror);
217 Expect.isTrue(isMixinApplication(G_super));
218 Expect.equals(1, G_super.superinterfaces.length);
219 Expect.isTrue(containsDecl(M1, G_super.superinterfaces));
220 Expect.isTrue(sameDecl(M1, G_super.mixin));
221 Expect.isFalse(G_super.isObject);
222 Expect.isTrue(sameDecl(S, G_super.superclass));
223
224 Expect.isTrue(sameDecl(S, getExtends(G)));
225 Expect.isTrue(sameDeclList([M1, M2], getWith(G)));
226 Expect.isTrue(getImplements(G).isEmpty);
227
228 // typedef H = S with M2, M1 implements A, M1;
229 var H = library.classes['H'];
230 Expect.isNotNull(H);
231 Expect.isTrue(H is ClassMirror);
232 Expect.isFalse(H.isAbstract);
233 Expect.isTrue(isMixinApplication(H));
234 Expect.isTrue(!H.isNameSynthetic);
235 Expect.equals('H', H.simpleName);
236 Expect.isFalse(H.isObject);
237 Expect.equals(3, H.superinterfaces.length);
238 Expect.isTrue(containsDecl(A, H.superinterfaces));
239 Expect.isTrue(containsDecl(M1, H.superinterfaces));
240 Expect.isFalse(containsDecl(M2, H.superinterfaces));
241 Expect.isTrue(sameDecl(M1, H.mixin));
242 var H_super = H.superclass;
243 Expect.isNotNull(H_super);
244 Expect.isTrue(H_super is ClassMirror);
245 Expect.isTrue(isMixinApplication(H_super));
246 Expect.equals(1, H_super.superinterfaces.length);
247 Expect.isTrue(containsDecl(M2, H_super.superinterfaces));
248 Expect.isTrue(sameDecl(M2, H_super.mixin));
249 Expect.isFalse(H_super.isObject);
250 Expect.isTrue(sameDecl(S, H_super.superclass));
251
252 Expect.isTrue(sameDecl(S, getExtends(H)));
253 Expect.isTrue(sameDeclList([M2, M1], getWith(H)));
254 Expect.isTrue(sameDeclSet([A, M1], getImplements(H)));
255
256 // class H2 extends H {}
257 var H2 = library.classes['H2'];
258 Expect.isTrue(sameDecl(H, getExtends(H2)));
259 Expect.isTrue(getWith(H2).isEmpty);
260 Expect.isTrue(getImplements(H2).isEmpty);
261 }));
262 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698