OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 // Test for iterators on for [SubclassNode]. | 5 // Test for iterators on for [SubclassNode]. |
6 | 6 |
7 library subtypeset_test; | 7 library subtypeset_test; |
8 | 8 |
9 import 'package:expect/expect.dart'; | 9 import 'package:expect/expect.dart'; |
10 import 'package:async_helper/async_helper.dart'; | 10 import 'package:async_helper/async_helper.dart'; |
11 import 'type_test_helper.dart'; | 11 import 'type_test_helper.dart'; |
12 import 'package:compiler/src/elements/elements.dart' | 12 import 'package:compiler/src/elements/elements.dart' show Element, ClassElement; |
13 show Element, ClassElement; | |
14 import 'package:compiler/src/universe/class_set.dart'; | 13 import 'package:compiler/src/universe/class_set.dart'; |
15 import 'package:compiler/src/world.dart'; | 14 import 'package:compiler/src/world.dart'; |
16 | 15 |
17 void main() { | 16 void main() { |
18 asyncTest(() => TypeEnvironment.create(r""" | 17 asyncTest(() => TypeEnvironment |
| 18 .create( |
| 19 r""" |
19 /// A | 20 /// A |
20 /// / \ | 21 /// / \ |
21 /// B C | 22 /// B C |
22 /// / /|\ | 23 /// / /|\ |
23 /// D E F G | 24 /// D E F G |
24 /// | 25 /// |
25 class A { | 26 class A { |
26 call(H h, I i) {} // Make `H` and `I` part of the world. | 27 call(H h, I i) {} // Make `H` and `I` part of the world. |
27 } | 28 } |
28 class B extends A implements C {} | 29 class B extends A implements C {} |
29 class C extends A {} | 30 class C extends A {} |
30 class D extends B implements A {} | 31 class D extends B implements A {} |
31 class E extends C implements B {} | 32 class E extends C implements B {} |
32 class F extends C {} | 33 class F extends C {} |
33 class G extends C {} | 34 class G extends C {} |
34 class H implements C {} | 35 class H implements C {} |
35 class I implements H {} | 36 class I implements H {} |
36 """, | 37 """, |
37 mainSource: r""" | 38 mainSource: r""" |
38 main() { | 39 main() { |
39 new A(); | 40 new A(); |
40 new C(); | 41 new C(); |
41 new D(); | 42 new D(); |
42 new E(); | 43 new E(); |
43 new F(); | 44 new F(); |
44 new G(); | 45 new G(); |
45 } | 46 } |
46 """, | 47 """, |
47 useMockCompiler: false).then((env) { | 48 useMockCompiler: false) |
48 World world = env.compiler.world; | 49 .then((env) { |
| 50 World world = env.compiler.world; |
49 | 51 |
50 ClassElement A = env.getElement("A"); | 52 ClassElement A = env.getElement("A"); |
51 ClassElement B = env.getElement("B"); | 53 ClassElement B = env.getElement("B"); |
52 ClassElement C = env.getElement("C"); | 54 ClassElement C = env.getElement("C"); |
53 ClassElement D = env.getElement("D"); | 55 ClassElement D = env.getElement("D"); |
54 ClassElement E = env.getElement("E"); | 56 ClassElement E = env.getElement("E"); |
55 ClassElement F = env.getElement("F"); | 57 ClassElement F = env.getElement("F"); |
56 ClassElement G = env.getElement("G"); | 58 ClassElement G = env.getElement("G"); |
57 ClassElement H = env.getElement("H"); | 59 ClassElement H = env.getElement("H"); |
58 ClassElement I = env.getElement("I"); | 60 ClassElement I = env.getElement("I"); |
59 | 61 |
60 void checkClass(ClassElement cls, | 62 void checkClass(ClassElement cls, List<ClassElement> subtypes) { |
61 List<ClassElement> subtypes) { | 63 ClassSet node = world.getClassSet(cls); |
62 ClassSet node = world.getClassSet(cls); | 64 print('$cls:\n${node}'); |
63 print('$cls:\n${node}'); | 65 Expect.listEquals( |
64 Expect.listEquals(subtypes, | 66 subtypes, |
65 node.subtypes().toList(), | 67 node.subtypes().toList(), |
66 "Unexpected subtypes of ${cls.name}:\n" | 68 "Unexpected subtypes of ${cls.name}:\n" |
67 "Expected: $subtypes\n" | 69 "Expected: $subtypes\n" |
68 "Found : ${node.subtypes().toList()}"); | 70 "Found : ${node.subtypes().toList()}"); |
69 } | 71 } |
70 | 72 |
71 checkClass(A, [A, C, E, F, G, B, D, H, I]); | 73 checkClass(A, [A, C, E, F, G, B, D, H, I]); |
72 checkClass(B, [B, D, E]); | 74 checkClass(B, [B, D, E]); |
73 checkClass(C, [C, E, F, G, H, B, D, I]); | 75 checkClass(C, [C, E, F, G, H, B, D, I]); |
74 checkClass(D, [D]); | 76 checkClass(D, [D]); |
75 checkClass(E, [E]); | 77 checkClass(E, [E]); |
76 checkClass(F, [F]); | 78 checkClass(F, [F]); |
77 checkClass(G, [G]); | 79 checkClass(G, [G]); |
78 checkClass(H, [H, I]); | 80 checkClass(H, [H, I]); |
79 checkClass(I, [I]); | 81 checkClass(I, [I]); |
80 })); | 82 })); |
81 } | 83 } |
OLD | NEW |