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 mixin_typevariable_test; | 5 library mixin_typevariable_test; |
6 | 6 |
7 import 'package:expect/expect.dart'; | 7 import 'package:expect/expect.dart'; |
8 import "package:async_helper/async_helper.dart"; | 8 import "package:async_helper/async_helper.dart"; |
9 import 'type_test_helper.dart'; | 9 import 'type_test_helper.dart'; |
10 import 'package:compiler/src/elements/resolution_types.dart'; | 10 import 'package:compiler/src/elements/resolution_types.dart'; |
11 import "package:compiler/src/elements/elements.dart" show ClassElement; | 11 import "package:compiler/src/elements/elements.dart" show ClassElement; |
12 | 12 |
13 void main() { | 13 void main() { |
14 testMixinSupertypes(); | 14 testMixinSupertypes(); |
15 testNonTrivialSubstitutions(); | 15 testNonTrivialSubstitutions(); |
16 } | 16 } |
17 | 17 |
18 void testMixinSupertypes() { | 18 void testMixinSupertypes() { |
19 asyncTest(() => TypeEnvironment | 19 asyncTest(() => TypeEnvironment.create(r""" |
20 .create( | |
21 r""" | |
22 class S<S_T> {} | 20 class S<S_T> {} |
23 class M1<M1_T> {} | 21 class M1<M1_T> {} |
24 class M2<M2_T> {} | 22 class M2<M2_T> {} |
25 class M3<M3_T> {} | 23 class M3<M3_T> {} |
26 | 24 |
27 class C1<C1_T> extends S<C1_T> with M1<C1_T>, M2<C1_T>, M3<C1_T> {} | 25 class C1<C1_T> extends S<C1_T> with M1<C1_T>, M2<C1_T>, M3<C1_T> {} |
28 class C2<C2_T> = S<C2_T> with M1<C2_T>, M2<C2_T>, M3<C2_T>; | 26 class C2<C2_T> = S<C2_T> with M1<C2_T>, M2<C2_T>, M3<C2_T>; |
29 """, | 27 """, expectNoWarningsOrErrors: true).then((env) { |
30 expectNoWarningsOrErrors: true) | |
31 .then((env) { | |
32 ClassElement Object = env.getElement('Object'); | 28 ClassElement Object = env.getElement('Object'); |
33 ClassElement S = env.getElement('S'); | 29 ClassElement S = env.getElement('S'); |
34 ClassElement M1 = env.getElement('M1'); | 30 ClassElement M1 = env.getElement('M1'); |
35 ClassElement M2 = env.getElement('M2'); | 31 ClassElement M2 = env.getElement('M2'); |
36 ClassElement C1 = env.getElement('C1'); | 32 ClassElement C1 = env.getElement('C1'); |
37 ClassElement C2 = env.getElement('C2'); | 33 ClassElement C2 = env.getElement('C2'); |
38 | 34 |
39 ClassElement C1_S_M1_M2_M3 = C1.superclass; | 35 ClassElement C1_S_M1_M2_M3 = C1.superclass; |
40 ClassElement C1_S_M1_M2 = C1_S_M1_M2_M3.superclass; | 36 ClassElement C1_S_M1_M2 = C1_S_M1_M2_M3.superclass; |
41 ClassElement C1_S_M1 = C1_S_M1_M2.superclass; | 37 ClassElement C1_S_M1 = C1_S_M1_M2.superclass; |
(...skipping 26 matching lines...) Expand all Loading... |
68 testSupertypes(C1_S_M1_M2); | 64 testSupertypes(C1_S_M1_M2); |
69 testSupertypes(C1_S_M1_M2_M3); | 65 testSupertypes(C1_S_M1_M2_M3); |
70 testSupertypes(C1); | 66 testSupertypes(C1); |
71 testSupertypes(C2_S_M1); | 67 testSupertypes(C2_S_M1); |
72 testSupertypes(C2_S_M1_M2); | 68 testSupertypes(C2_S_M1_M2); |
73 testSupertypes(C2); | 69 testSupertypes(C2); |
74 })); | 70 })); |
75 } | 71 } |
76 | 72 |
77 void testNonTrivialSubstitutions() { | 73 void testNonTrivialSubstitutions() { |
78 asyncTest(() => TypeEnvironment | 74 asyncTest(() => TypeEnvironment.create(r""" |
79 .create( | |
80 r""" | |
81 class _ {} | 75 class _ {} |
82 class A<A_T> {} | 76 class A<A_T> {} |
83 class B<B_T, B_S> {} | 77 class B<B_T, B_S> {} |
84 | 78 |
85 class C1<C1_T> extends A with B {} | 79 class C1<C1_T> extends A with B {} |
86 class C2<C2_T> = A with B; | 80 class C2<C2_T> = A with B; |
87 | 81 |
88 class D1<D1_T> extends A<D1_T> with B<D1_T, A<D1_T>> {} | 82 class D1<D1_T> extends A<D1_T> with B<D1_T, A<D1_T>> {} |
89 class D2<D2_T> = A<D2_T> with B<D2_T, A<D2_T>>; | 83 class D2<D2_T> = A<D2_T> with B<D2_T, A<D2_T>>; |
90 | 84 |
91 class E1<E1_T> extends A<_> with B<_, A<_>> {} | 85 class E1<E1_T> extends A<_> with B<_, A<_>> {} |
92 class E2<E2_T> = A<_> with B<_, A<_>>; | 86 class E2<E2_T> = A<_> with B<_, A<_>>; |
93 | 87 |
94 class F1<F1_T> extends A<_> with B<_, B<F1_T, _>> {} | 88 class F1<F1_T> extends A<_> with B<_, B<F1_T, _>> {} |
95 class F2<F2_T> = A<_> with B<_, B<F2_T, _>>; | 89 class F2<F2_T> = A<_> with B<_, B<F2_T, _>>; |
96 """, | 90 """, expectNoWarningsOrErrors: true).then((env) { |
97 expectNoWarningsOrErrors: true) | |
98 .then((env) { | |
99 ResolutionDartType _dynamic = env['dynamic']; | 91 ResolutionDartType _dynamic = env['dynamic']; |
100 ResolutionDartType _ = env['_']; | 92 ResolutionDartType _ = env['_']; |
101 | 93 |
102 ClassElement Object = env.getElement('Object'); | 94 ClassElement Object = env.getElement('Object'); |
103 ClassElement A = env.getElement('A'); | 95 ClassElement A = env.getElement('A'); |
104 ClassElement B = env.getElement('B'); | 96 ClassElement B = env.getElement('B'); |
105 ClassElement C1 = env.getElement('C1'); | 97 ClassElement C1 = env.getElement('C1'); |
106 ClassElement C2 = env.getElement('C2'); | 98 ClassElement C2 = env.getElement('C2'); |
107 ClassElement D1 = env.getElement('D1'); | 99 ClassElement D1 = env.getElement('D1'); |
108 ClassElement D2 = env.getElement('D2'); | 100 ClassElement D2 = env.getElement('D2'); |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
213 ResolutionDartType F2_T = F2.typeVariables.first; | 205 ResolutionDartType F2_T = F2.typeVariables.first; |
214 testSupertypes(F2, { | 206 testSupertypes(F2, { |
215 A: [_], | 207 A: [_], |
216 B: [ | 208 B: [ |
217 _, | 209 _, |
218 instantiate(B, [F2_T, _]) | 210 instantiate(B, [F2_T, _]) |
219 ] | 211 ] |
220 }); | 212 }); |
221 })); | 213 })); |
222 } | 214 } |
OLD | NEW |