OLD | NEW |
---|---|
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 library test.mixin_test; | 5 library test.mixin_test; |
6 | 6 |
7 import 'dart:mirrors'; | 7 import 'dart:mirrors'; |
8 | 8 |
9 import 'package:expect/expect.dart'; | 9 import 'package:expect/expect.dart'; |
10 | 10 |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
54 Expect.equals(a, b); | 54 Expect.equals(a, b); |
55 expect(stringify(a), b); | 55 expect(stringify(a), b); |
56 expect(stringify(b), a); | 56 expect(stringify(b), a); |
57 } | 57 } |
58 | 58 |
59 testMixin() { | 59 testMixin() { |
60 checkClass(Mixin, [ | 60 checkClass(Mixin, [ |
61 'Class(s(Mixin) in s(test.mixin_test), top-level)', | 61 'Class(s(Mixin) in s(test.mixin_test), top-level)', |
62 'Class(s(Object) in s(dart.core), top-level)', | 62 'Class(s(Object) in s(dart.core), top-level)', |
63 ]); | 63 ]); |
64 | |
ahe
2013/09/03 22:42:27
Ryan's whitespace changes made it hard for me to m
| |
64 expect( | 65 expect( |
65 '{i: Variable(s(i) in s(Mixin)),' | 66 '{i: Variable(s(i) in s(Mixin)),' |
66 ' m: Method(s(m) in s(Mixin))}', | 67 ' m: Method(s(m) in s(Mixin))}', |
67 reflectClass(Mixin).members); | 68 reflectClass(Mixin).members); |
68 expect( | 69 |
69 '{Mixin: Method(s(Mixin) in s(Mixin), constructor)}', | 70 expect('{Mixin: Method(s(Mixin) in s(Mixin), constructor)}', |
70 reflectClass(Mixin).constructors); | 71 reflectClass(Mixin).constructors); |
71 } | 72 } |
72 | 73 |
73 testMixin2() { | 74 testMixin2() { |
74 checkClass(Mixin2, [ | 75 checkClass(Mixin2, [ |
75 'Class(s(Mixin2) in s(test.mixin_test), top-level)', | 76 'Class(s(Mixin2) in s(test.mixin_test), top-level)', |
76 'Class(s(Object) in s(dart.core), top-level)', | 77 'Class(s(Object) in s(dart.core), top-level)', |
77 ]); | 78 ]); |
79 | |
78 expect( | 80 expect( |
79 '{i2: Variable(s(i2) in s(Mixin2)),' | 81 '{i2: Variable(s(i2) in s(Mixin2)),' |
80 ' m2: Method(s(m2) in s(Mixin2))}', | 82 ' m2: Method(s(m2) in s(Mixin2))}', |
81 reflectClass(Mixin2).members); | 83 reflectClass(Mixin2).members); |
82 expect( | 84 |
83 '{Mixin2: Method(s(Mixin2) in s(Mixin2), constructor)}', | 85 expect('{Mixin2: Method(s(Mixin2) in s(Mixin2), constructor)}', |
84 reflectClass(Mixin2).constructors); | 86 reflectClass(Mixin2).constructors); |
85 } | 87 } |
86 | 88 |
87 testMixinApplication() { | 89 testMixinApplication() { |
88 checkClass(MixinApplication, [ | 90 checkClass(MixinApplication, [ |
89 'Class(s(MixinApplication) in s(test.mixin_test), top-level)', | 91 'Class(s(MixinApplication) in s(test.mixin_test), top-level)', |
90 'Class(s(C) in s(test.model), top-level)', | 92 'Class(s(C) in s(test.model), top-level)', |
91 'Class(s(B) in s(test.model), top-level)', | 93 'Class(s(B) in s(test.model), top-level)', |
92 'Class(s(A) in s(test.model), top-level)', | 94 'Class(s(A) in s(test.model), top-level)', |
93 'Class(s(Object) in s(dart.core), top-level)', | 95 'Class(s(Object) in s(dart.core), top-level)', |
94 ]); | 96 ]); |
95 | 97 |
98 String owner = 'Mixin'; | |
99 owner = 'MixinApplication'; /// 01: ok | |
ngeoffray
2013/09/04 06:59:21
Does that mean the base file is a negative test?
ahe
2013/09/04 10:17:07
Not exactly. It means that you have two positive t
ngeoffray
2013/09/04 10:23:50
OK, could you please add a top-level comment on th
ahe
2013/09/04 13:31:40
Done.
| |
96 expect( | 100 expect( |
97 '{i: Variable(s(i) in s(Mixin)),' | 101 '{i: Variable(s(i) in s($owner)),' |
98 ' m: Method(s(m) in s(Mixin))}', | 102 ' m: Method(s(m) in s($owner))}', |
99 reflectClass(MixinApplication).members); | 103 reflectClass(MixinApplication).members); |
100 expect( | 104 |
101 '{MixinApplication: Method(s(MixinApplication) in s(MixinApplication),' | 105 expect('{MixinApplication: Method(s(MixinApplication) in s(MixinApplication),' |
102 ' constructor)}', | 106 ' constructor)}', |
103 reflectClass(MixinApplication).constructors); | 107 reflectClass(MixinApplication).constructors); |
104 | 108 |
105 expectSame(reflectClass(C), reflectClass(MixinApplication).superclass); | 109 expectSame(reflectClass(C), reflectClass(MixinApplication).superclass); |
106 } | 110 } |
107 | 111 |
108 testMixinApplicationA() { | 112 testMixinApplicationA() { |
113 // TODO(ahe): I don't think an anonymous mixin has an owner. | |
114 String owner = ' in s(test.mixin_test)'; | |
115 owner = ''; /// 01: ok | |
109 checkClass(MixinApplicationA, [ | 116 checkClass(MixinApplicationA, [ |
110 'Class(s(MixinApplicationA) in s(test.mixin_test), top-level)', | 117 'Class(s(MixinApplicationA) in s(test.mixin_test), top-level)', |
111 'Class(s(test.model.C with test.mixin_test.Mixin) in s(test.mixin_test),' | 118 'Class(s(test.model.C with test.mixin_test.Mixin)$owner, top-level)', |
112 ' top-level)', | |
113 'Class(s(C) in s(test.model), top-level)', | 119 'Class(s(C) in s(test.model), top-level)', |
114 'Class(s(B) in s(test.model), top-level)', | 120 'Class(s(B) in s(test.model), top-level)', |
115 'Class(s(A) in s(test.model), top-level)', | 121 'Class(s(A) in s(test.model), top-level)', |
116 'Class(s(Object) in s(dart.core), top-level)', | 122 'Class(s(Object) in s(dart.core), top-level)', |
117 ]); | 123 ]); |
118 | 124 |
125 owner = 'Mixin2'; | |
126 owner = 'MixinApplicationA'; /// 01: ok | |
119 expect( | 127 expect( |
120 '{i2: Variable(s(i2) in s(Mixin2)),' | 128 '{i2: Variable(s(i2) in s($owner)),' |
121 ' m2: Method(s(m2) in s(Mixin2))}', | 129 ' m2: Method(s(m2) in s($owner))}', |
122 reflectClass(MixinApplicationA).members); | 130 reflectClass(MixinApplicationA).members); |
131 | |
123 expect( | 132 expect( |
124 '{MixinApplicationA: Method(s(MixinApplicationA) in s(MixinApplicationA),' | 133 '{MixinApplicationA: Method(s(MixinApplicationA) in s(MixinApplicationA),' |
125 ' constructor)}', | 134 ' constructor)}', |
126 reflectClass(MixinApplicationA).constructors); | 135 reflectClass(MixinApplicationA).constructors); |
127 | 136 |
128 expect( | 137 expect( |
129 '{i: Variable(s(i) in s(Mixin)),' | 138 '{i: Variable(s(i) in s(Mixin)),' |
130 ' m: Method(s(m) in s(Mixin))}', | 139 ' m: Method(s(m) in s(Mixin))}', |
131 reflectClass(MixinApplicationA).superclass.members); | 140 reflectClass(MixinApplicationA).superclass.members); |
141 | |
142 String name = 'test.model.C with test.mixin_test.Mixin'; | |
143 name = 'Mixin'; /// 01: ok | |
132 expect( | 144 expect( |
133 '{test.model.C with test.mixin_test.Mixin:' | 145 '{$name:' |
134 ' Method(s(test.model.C with test.mixin_test.Mixin)' | 146 ' Method(s($name)' |
135 ' in s(test.model.C with test.mixin_test.Mixin), constructor)}', | 147 ' in s($name), constructor)}', |
136 reflectClass(MixinApplicationA).superclass.constructors); | 148 reflectClass(MixinApplicationA).superclass.constructors); |
137 | 149 |
138 expectSame( | 150 expectSame( |
139 reflectClass(C), | 151 reflectClass(C), |
140 reflectClass(MixinApplicationA).superclass.superclass); | 152 reflectClass(MixinApplicationA).superclass.superclass); |
141 } | 153 } |
142 | 154 |
143 testUnusedMixinApplication() { | 155 testUnusedMixinApplication() { |
144 checkClass(UnusedMixinApplication, [ | 156 checkClass(UnusedMixinApplication, [ |
145 'Class(s(UnusedMixinApplication) in s(test.mixin_test), top-level)', | 157 'Class(s(UnusedMixinApplication) in s(test.mixin_test), top-level)', |
146 'Class(s(C) in s(test.model), top-level)', | 158 'Class(s(C) in s(test.model), top-level)', |
147 'Class(s(B) in s(test.model), top-level)', | 159 'Class(s(B) in s(test.model), top-level)', |
148 'Class(s(A) in s(test.model), top-level)', | 160 'Class(s(A) in s(test.model), top-level)', |
149 'Class(s(Object) in s(dart.core), top-level)', | 161 'Class(s(Object) in s(dart.core), top-level)', |
150 ]); | 162 ]); |
151 | 163 |
164 String owner = 'Mixin'; | |
165 owner = 'UnusedMixinApplication'; /// 01: ok | |
152 expect( | 166 expect( |
153 '{i: Variable(s(i) in s(Mixin)),' | 167 '{i: Variable(s(i) in s($owner)),' |
154 ' m: Method(s(m) in s(Mixin))}', | 168 ' m: Method(s(m) in s($owner))}', |
155 reflectClass(UnusedMixinApplication).members); | 169 reflectClass(UnusedMixinApplication).members); |
170 | |
156 expect( | 171 expect( |
157 '{UnusedMixinApplication: Method(s(UnusedMixinApplication)' | 172 '{UnusedMixinApplication: Method(s(UnusedMixinApplication)' |
158 ' in s(UnusedMixinApplication), constructor)}', | 173 ' in s(UnusedMixinApplication), constructor)}', |
159 reflectClass(UnusedMixinApplication).constructors); | 174 reflectClass(UnusedMixinApplication).constructors); |
160 | 175 |
161 expectSame(reflectClass(C), reflectClass(UnusedMixinApplication).superclass); | 176 expectSame(reflectClass(C), reflectClass(UnusedMixinApplication).superclass); |
162 } | 177 } |
163 | 178 |
164 testSubclass() { | 179 testSubclass() { |
180 String owner = ' in s(test.mixin_test)'; | |
181 owner = ''; /// 01: ok | |
165 checkClass(Subclass, [ | 182 checkClass(Subclass, [ |
166 'Class(s(Subclass) in s(test.mixin_test), top-level)', | 183 'Class(s(Subclass) in s(test.mixin_test), top-level)', |
167 'Class(s(test.model.C with test.mixin_test.Mixin) in s(test.mixin_test),' | 184 'Class(s(test.model.C with test.mixin_test.Mixin)$owner, top-level)', |
168 ' top-level)', | |
169 'Class(s(C) in s(test.model), top-level)', | 185 'Class(s(C) in s(test.model), top-level)', |
170 'Class(s(B) in s(test.model), top-level)', | 186 'Class(s(B) in s(test.model), top-level)', |
171 'Class(s(A) in s(test.model), top-level)', | 187 'Class(s(A) in s(test.model), top-level)', |
172 'Class(s(Object) in s(dart.core), top-level)', | 188 'Class(s(Object) in s(dart.core), top-level)', |
173 ]); | 189 ]); |
174 | 190 |
175 expect( | 191 expect( |
176 '{f: Method(s(f) in s(Subclass))}', | 192 '{f: Method(s(f) in s(Subclass))}', |
177 reflectClass(Subclass).members); | 193 reflectClass(Subclass).members); |
194 | |
178 expect( | 195 expect( |
179 '{Subclass: Method(s(Subclass) in s(Subclass), constructor)}', | 196 '{Subclass: Method(s(Subclass) in s(Subclass), constructor)}', |
180 reflectClass(Subclass).constructors); | 197 reflectClass(Subclass).constructors); |
181 | 198 |
182 expect( | 199 expect( |
183 '{i: Variable(s(i) in s(Mixin)),' | 200 '{i: Variable(s(i) in s(Mixin)),' |
184 ' m: Method(s(m) in s(Mixin))}', | 201 ' m: Method(s(m) in s(Mixin))}', |
185 reflectClass(Subclass).superclass.members); | 202 reflectClass(Subclass).superclass.members); |
203 | |
204 String name = 'test.model.C with test.mixin_test.Mixin'; | |
205 name = 'Mixin'; /// 01: ok | |
186 expect( | 206 expect( |
187 '{test.model.C with test.mixin_test.Mixin:' | 207 '{$name:' |
188 ' Method(s(test.model.C with test.mixin_test.Mixin)' | 208 ' Method(s($name)' |
189 ' in s(test.model.C with test.mixin_test.Mixin), constructor)}', | 209 ' in s($name), constructor)}', |
190 reflectClass(Subclass).superclass.constructors); | 210 reflectClass(Subclass).superclass.constructors); |
191 | 211 |
192 expectSame( | 212 expectSame( |
193 reflectClass(C), | 213 reflectClass(C), |
194 reflectClass(Subclass).superclass.superclass); | 214 reflectClass(Subclass).superclass.superclass); |
195 } | 215 } |
196 | 216 |
197 testSubclass2() { | 217 testSubclass2() { |
198 checkClass(Subclass2, [ | 218 checkClass(Subclass2, [ |
199 'Class(s(Subclass2) in s(test.mixin_test), top-level)', | 219 'Class(s(Subclass2) in s(test.mixin_test), top-level)', |
200 'Class(s(MixinApplication) in s(test.mixin_test), top-level)', | 220 'Class(s(MixinApplication) in s(test.mixin_test), top-level)', |
201 'Class(s(C) in s(test.model), top-level)', | 221 'Class(s(C) in s(test.model), top-level)', |
202 'Class(s(B) in s(test.model), top-level)', | 222 'Class(s(B) in s(test.model), top-level)', |
203 'Class(s(A) in s(test.model), top-level)', | 223 'Class(s(A) in s(test.model), top-level)', |
204 'Class(s(Object) in s(dart.core), top-level)', | 224 'Class(s(Object) in s(dart.core), top-level)', |
205 ]); | 225 ]); |
206 | 226 |
207 expect( | 227 expect( |
208 '{g: Method(s(g) in s(Subclass2))}', | 228 '{g: Method(s(g) in s(Subclass2))}', |
209 reflectClass(Subclass2).members); | 229 reflectClass(Subclass2).members); |
230 | |
210 expect( | 231 expect( |
211 '{Subclass2: Method(s(Subclass2) in s(Subclass2), constructor)}', | 232 '{Subclass2: Method(s(Subclass2) in s(Subclass2), constructor)}', |
212 reflectClass(Subclass2).constructors); | 233 reflectClass(Subclass2).constructors); |
213 | 234 |
214 expectSame( | 235 expectSame( |
215 reflectClass(MixinApplication), | 236 reflectClass(MixinApplication), |
216 reflectClass(Subclass2).superclass); | 237 reflectClass(Subclass2).superclass); |
217 } | 238 } |
218 | 239 |
219 testSubclassA() { | 240 testSubclassA() { |
241 // TODO(ahe): I don't think an anonymous mixin has an owner. | |
242 String owner = ' in s(test.mixin_test)'; | |
243 owner = ''; /// 01: ok | |
220 checkClass(SubclassA, [ | 244 checkClass(SubclassA, [ |
221 'Class(s(SubclassA) in s(test.mixin_test), top-level)', | 245 'Class(s(SubclassA) in s(test.mixin_test), top-level)', |
222 'Class(s(test.model.C with test.mixin_test.Mixin, test.mixin_test.Mixin2)' | 246 'Class(s(test.model.C with test.mixin_test.Mixin, test.mixin_test.Mixin2)' |
223 ' in s(test.mixin_test), top-level)', | 247 '$owner, top-level)', |
224 'Class(s(test.model.C with test.mixin_test.Mixin) in s(test.mixin_test),' | 248 'Class(s(test.model.C with test.mixin_test.Mixin)$owner, top-level)', |
225 ' top-level)', | |
226 'Class(s(C) in s(test.model), top-level)', | 249 'Class(s(C) in s(test.model), top-level)', |
227 'Class(s(B) in s(test.model), top-level)', | 250 'Class(s(B) in s(test.model), top-level)', |
228 'Class(s(A) in s(test.model), top-level)', | 251 'Class(s(A) in s(test.model), top-level)', |
229 'Class(s(Object) in s(dart.core), top-level)', | 252 'Class(s(Object) in s(dart.core), top-level)', |
230 ]); | 253 ]); |
231 | 254 |
232 expect( | 255 expect( |
233 '{fa: Method(s(fa) in s(SubclassA))}', | 256 '{fa: Method(s(fa) in s(SubclassA))}', |
234 reflectClass(SubclassA).members); | 257 reflectClass(SubclassA).members); |
258 | |
235 expect( | 259 expect( |
236 '{SubclassA: Method(s(SubclassA) in s(SubclassA), constructor)}', | 260 '{SubclassA: Method(s(SubclassA) in s(SubclassA), constructor)}', |
237 reflectClass(SubclassA).constructors); | 261 reflectClass(SubclassA).constructors); |
238 | 262 |
239 expect( | 263 expect( |
240 '{i2: Variable(s(i2) in s(Mixin2)),' | 264 '{i2: Variable(s(i2) in s(Mixin2)),' |
241 ' m2: Method(s(m2) in s(Mixin2))}', | 265 ' m2: Method(s(m2) in s(Mixin2))}', |
242 reflectClass(SubclassA).superclass.members); | 266 reflectClass(SubclassA).superclass.members); |
267 | |
268 String name = | |
269 'test.model.C with test.mixin_test.Mixin, test.mixin_test.Mixin2'; | |
270 name = 'Mixin2'; /// 01: ok | |
243 expect( | 271 expect( |
244 '{test.model.C with test.mixin_test.Mixin, test.mixin_test.Mixin2:' | 272 '{$name: Method(s($name) in s($name), constructor)}', |
245 ' Method(s(test.model.C with test.mixin_test.Mixin,' | |
246 ' test.mixin_test.Mixin2) in s(test.model.C with test.mixin_test.Mixin,' | |
247 ' test.mixin_test.Mixin2), constructor)}', | |
248 reflectClass(SubclassA).superclass.constructors); | 273 reflectClass(SubclassA).superclass.constructors); |
249 | 274 |
250 expect( | 275 expect( |
251 '{i: Variable(s(i) in s(Mixin)),' | 276 '{i: Variable(s(i) in s(Mixin)),' |
252 ' m: Method(s(m) in s(Mixin))}', | 277 ' m: Method(s(m) in s(Mixin))}', |
253 reflectClass(SubclassA).superclass.superclass.members); | 278 reflectClass(SubclassA).superclass.superclass.members); |
279 | |
280 name = 'test.model.C with test.mixin_test.Mixin'; | |
281 name = 'Mixin'; /// 01: ok | |
254 expect( | 282 expect( |
255 '{test.model.C with test.mixin_test.Mixin:' | 283 '{$name:' |
256 ' Method(s(test.model.C with test.mixin_test.Mixin)' | 284 ' Method(s($name)' |
257 ' in s(test.model.C with test.mixin_test.Mixin), constructor)}', | 285 ' in s($name), constructor)}', |
258 reflectClass(SubclassA).superclass.superclass.constructors); | 286 reflectClass(SubclassA).superclass.superclass.constructors); |
259 | 287 |
260 expectSame( | 288 expectSame( |
261 reflectClass(C), | 289 reflectClass(C), |
262 reflectClass(SubclassA).superclass.superclass.superclass); | 290 reflectClass(SubclassA).superclass.superclass.superclass); |
263 } | 291 } |
264 | 292 |
265 testSubclass2A() { | 293 testSubclass2A() { |
294 // TODO(ahe): I don't think an anonymous mixin has an owner. | |
295 String owner = ' in s(test.mixin_test)'; | |
296 owner = ''; /// 01: ok | |
266 checkClass(Subclass2A, [ | 297 checkClass(Subclass2A, [ |
267 'Class(s(Subclass2A) in s(test.mixin_test), top-level)', | 298 'Class(s(Subclass2A) in s(test.mixin_test), top-level)', |
268 'Class(s(MixinApplicationA) in s(test.mixin_test), top-level)', | 299 'Class(s(MixinApplicationA) in s(test.mixin_test), top-level)', |
269 'Class(s(test.model.C with test.mixin_test.Mixin) in s(test.mixin_test),' | 300 'Class(s(test.model.C with test.mixin_test.Mixin)$owner,' |
270 ' top-level)', | 301 ' top-level)', |
271 'Class(s(C) in s(test.model), top-level)', | 302 'Class(s(C) in s(test.model), top-level)', |
272 'Class(s(B) in s(test.model), top-level)', | 303 'Class(s(B) in s(test.model), top-level)', |
273 'Class(s(A) in s(test.model), top-level)', | 304 'Class(s(A) in s(test.model), top-level)', |
274 'Class(s(Object) in s(dart.core), top-level)', | 305 'Class(s(Object) in s(dart.core), top-level)', |
275 ]); | 306 ]); |
276 | 307 |
277 expect( | 308 expect( |
278 '{ga: Method(s(ga) in s(Subclass2A))}', | 309 '{ga: Method(s(ga) in s(Subclass2A))}', |
279 reflectClass(Subclass2A).members); | 310 reflectClass(Subclass2A).members); |
311 | |
280 expect( | 312 expect( |
281 '{Subclass2A: Method(s(Subclass2A) in s(Subclass2A), constructor)}', | 313 '{Subclass2A: Method(s(Subclass2A) in s(Subclass2A), constructor)}', |
282 reflectClass(Subclass2A).constructors); | 314 reflectClass(Subclass2A).constructors); |
283 | 315 |
284 expectSame(reflectClass(MixinApplicationA), | 316 expectSame(reflectClass(MixinApplicationA), |
285 reflectClass(Subclass2A).superclass); | 317 reflectClass(Subclass2A).superclass); |
286 } | 318 } |
287 | 319 |
288 main() { | 320 main() { |
289 testMixin(); | 321 testMixin(); |
290 testMixin2(); | 322 testMixin2(); |
291 testMixinApplication(); | 323 testMixinApplication(); |
292 testMixinApplicationA(); | 324 testMixinApplicationA(); |
293 testUnusedMixinApplication(); | 325 testUnusedMixinApplication(); |
294 testSubclass(); | 326 testSubclass(); |
295 testSubclass2(); | 327 testSubclass2(); |
296 testSubclassA(); | 328 testSubclassA(); |
297 testSubclass2A(); | 329 testSubclass2A(); |
298 } | 330 } |
OLD | NEW |