| 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 |