OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 members_test; | 5 library members_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 '../../../sdk/lib/_internal/compiler/implementation/dart_types.dart'; | 10 import '../../../sdk/lib/_internal/compiler/implementation/dart_types.dart'; |
11 import "../../../sdk/lib/_internal/compiler/implementation/elements/elements.dar
t" | 11 import "../../../sdk/lib/_internal/compiler/implementation/elements/elements.dar
t" |
12 show Element, ClassElement, MemberSignature, Name, PublicName; | 12 show Element, ClassElement, MemberSignature, Name, PublicName, |
| 13 DeclaredMember, Member; |
13 import "../../../sdk/lib/_internal/compiler/implementation/resolution/class_memb
ers.dart" | 14 import "../../../sdk/lib/_internal/compiler/implementation/resolution/class_memb
ers.dart" |
14 show SyntheticMember, ErroneousMember; | 15 show DeclaredMember, ErroneousMember, SyntheticMember; |
15 | 16 |
16 void main() { | 17 void main() { |
17 testClassMembers(); | 18 testClassMembers(); |
18 testInterfaceMembers(); | 19 testInterfaceMembers(); |
19 testClassVsInterfaceMembers(); | 20 testClassVsInterfaceMembers(); |
20 testMixinMembers(); | 21 testMixinMembers(); |
21 } | 22 } |
22 | 23 |
23 MemberSignature getMember(InterfaceType cls, String name, | 24 MemberSignature getMember(InterfaceType cls, String name, |
24 {bool isSetter: false, | 25 {bool isSetter: false, |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 Name memberName = member.name; | 84 Name memberName = member.name; |
84 if (checkType == ALSO_CLASS_MEMBER) { | 85 if (checkType == ALSO_CLASS_MEMBER) { |
85 MemberSignature classMember = cls.element.lookupClassMember(memberName); | 86 MemberSignature classMember = cls.element.lookupClassMember(memberName); |
86 Expect.isNotNull(classMember, "No class member '$memberName' in $cls."); | 87 Expect.isNotNull(classMember, "No class member '$memberName' in $cls."); |
87 Expect.equals(member, classMember); | 88 Expect.equals(member, classMember); |
88 } else if (checkType == NO_CLASS_MEMBER) { | 89 } else if (checkType == NO_CLASS_MEMBER) { |
89 Expect.isNull(cls.element.lookupClassMember(memberName)); | 90 Expect.isNull(cls.element.lookupClassMember(memberName)); |
90 } | 91 } |
91 | 92 |
92 if (inheritedFrom != null) { | 93 if (inheritedFrom != null) { |
93 MemberSignature inherited = checkType == CHECK_CLASS | 94 DeclaredMember inherited = checkType == CHECK_CLASS |
94 ? inheritedFrom.element.lookupClassMember(memberName) | 95 ? inheritedFrom.element.lookupClassMember(memberName) |
95 : inheritedFrom.element.lookupInterfaceMember(memberName); | 96 : inheritedFrom.element.lookupInterfaceMember(memberName); |
96 Expect.isNotNull(inherited, | 97 Expect.isNotNull(inherited, |
97 "No $memberKind member '$memberName' in $inheritedFrom."); | 98 "No $memberKind member '$memberName' in $inheritedFrom."); |
98 Expect.equals(inherited.inheritFrom(inheritedFrom), member); | 99 Expect.equals(inherited.inheritFrom(inheritedFrom), member); |
99 } else { | 100 } else { |
100 if (erroneousFrom != null || synthesizedFrom != null) { | 101 if (erroneousFrom != null || synthesizedFrom != null) { |
101 Expect.notEquals(checkType, CHECK_CLASS, | 102 Expect.notEquals(checkType, CHECK_CLASS, |
102 "Arguments 'erroneousFrom' and 'synthesizedFrom' only apply " | 103 "Arguments 'erroneousFrom' and 'synthesizedFrom' only apply " |
103 "to interface members."); | 104 "to interface members."); |
104 if (synthesizedFrom != null) { | 105 if (synthesizedFrom != null) { |
105 Expect.isTrue(member is SyntheticMember, | 106 Expect.isTrue(member is SyntheticMember, |
106 "Member '$member' is not synthesized."); | 107 "Member '$member' is not synthesized."); |
107 } else { | 108 } else { |
108 Expect.isTrue(member is ErroneousMember, | 109 Expect.isTrue(member is ErroneousMember, |
109 "Member '$member' is not erroneous."); | 110 "Member '$member' is not erroneous."); |
110 } | 111 } |
111 Set<MemberSignature> members = new Set<MemberSignature>(); | 112 Set<MemberSignature> members = new Set<MemberSignature>(); |
112 List from = synthesizedFrom != null ? synthesizedFrom : erroneousFrom; | 113 List from = synthesizedFrom != null ? synthesizedFrom : erroneousFrom; |
113 for (InterfaceType type in from) { | 114 for (InterfaceType type in from) { |
114 MemberSignature inheritedMember = | 115 DeclaredMember inheritedMember = |
115 type.element.lookupInterfaceMember(memberName); | 116 type.element.lookupInterfaceMember(memberName); |
116 Expect.isNotNull(inheritedMember); | 117 Expect.isNotNull(inheritedMember); |
117 members.add(inheritedMember.inheritFrom(type)); | 118 members.add(inheritedMember.inheritFrom(type)); |
118 } | 119 } |
119 Expect.setEquals(members, member.declarations); | 120 Expect.setEquals(members, member.declarations); |
120 } else if (declarer != null) { | 121 } else if (declarer != null) { |
121 Expect.equals(declarer, member.declarer, | 122 DeclaredMember declared = member; |
122 "Unexpected declarer '${member.declarer}' of $memberKind member " | 123 Expect.equals(declarer, declared.declarer, |
| 124 "Unexpected declarer '${declared.declarer}' of $memberKind member " |
123 "'$member'. Expected '${declarer}'."); | 125 "'$member'. Expected '${declarer}'."); |
124 } else { | 126 } else { |
125 Expect.equals(cls.element, member.element.getEnclosingClass()); | 127 DeclaredMember declared = member; |
126 Expect.equals(cls, member.declarer); | 128 Expect.equals(cls.element, declared.element.getEnclosingClass()); |
| 129 Expect.equals(cls, declared.declarer); |
127 } | 130 } |
128 Expect.equals(isSetter, member.isSetter); | 131 Expect.equals(isSetter, member.isSetter); |
129 Expect.equals(isGetter, member.isGetter); | 132 Expect.equals(isGetter, member.isGetter); |
130 if (type != null) { | 133 if (type != null) { |
131 Expect.equals(type, member.type, | 134 Expect.equals(type, member.type, |
132 "Unexpected type of $memberKind member '$member'."); | 135 "Unexpected type of $memberKind member '$member'."); |
133 } | 136 } |
134 if (functionType != null) { | 137 if (functionType != null) { |
135 if (type == null) { | 138 if (type == null) { |
136 Expect.equals(member.type, member.functionType, | 139 Expect.equals(member.type, member.functionType, |
(...skipping 534 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
671 Expect.notEquals(interfaceMember, classMember); | 674 Expect.notEquals(interfaceMember, classMember); |
672 | 675 |
673 // A: method4(U a) | 676 // A: method4(U a) |
674 // B: -- | 677 // B: -- |
675 // C class: method4(U a) -- inherited from A. | 678 // C class: method4(U a) -- inherited from A. |
676 // C interface: method4(U a) -- inherited from A. | 679 // C interface: method4(U a) -- inherited from A. |
677 checkMember(C_this, 'method4', checkType: ALSO_CLASS_MEMBER, | 680 checkMember(C_this, 'method4', checkType: ALSO_CLASS_MEMBER, |
678 inheritedFrom: A_U); | 681 inheritedFrom: A_U); |
679 })); | 682 })); |
680 } | 683 } |
OLD | NEW |