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 test.services.src.search.hierarchy; | 5 library test.services.src.search.hierarchy; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 | 8 |
9 import 'package:analysis_server/src/services/index/index.dart'; | 9 import 'package:analysis_server/src/services/index/index.dart'; |
10 import 'package:analysis_server/src/services/index/local_memory_index.dart'; | 10 import 'package:analysis_server/src/services/index/local_memory_index.dart'; |
11 import 'package:analysis_server/src/services/search/hierarchy.dart'; | 11 import 'package:analysis_server/src/services/search/hierarchy.dart'; |
12 import 'package:analysis_server/src/services/search/search_engine_internal.dart'
; | 12 import 'package:analysis_server/src/services/search/search_engine_internal.dart'
; |
| 13 import 'package:analyzer/src/generated/element.dart'; |
| 14 import 'package:unittest/unittest.dart'; |
| 15 |
13 import '../../abstract_single_unit.dart'; | 16 import '../../abstract_single_unit.dart'; |
14 import '../../reflective_tests.dart'; | 17 import '../../reflective_tests.dart'; |
15 import 'package:analyzer/src/generated/element.dart'; | |
16 import 'package:unittest/unittest.dart'; | |
17 | 18 |
18 | 19 |
19 main() { | 20 main() { |
20 groupSep = ' | '; | 21 groupSep = ' | '; |
21 runReflectiveTests(HierarchyTest); | 22 runReflectiveTests(HierarchyTest); |
22 } | 23 } |
23 | 24 |
24 | 25 |
25 @ReflectiveTestCase() | 26 @ReflectiveTestCase() |
26 class HierarchyTest extends AbstractSingleUnitTest { | 27 class HierarchyTest extends AbstractSingleUnitTest { |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
65 A() {} | 66 A() {} |
66 } | 67 } |
67 class B extends A { | 68 class B extends A { |
68 B() {} | 69 B() {} |
69 } | 70 } |
70 '''); | 71 '''); |
71 ClassElement classA = findElement("A"); | 72 ClassElement classA = findElement("A"); |
72 ClassElement classB = findElement("B"); | 73 ClassElement classB = findElement("B"); |
73 ClassMemberElement memberA = classA.constructors[0]; | 74 ClassMemberElement memberA = classA.constructors[0]; |
74 ClassMemberElement memberB = classB.constructors[0]; | 75 ClassMemberElement memberB = classB.constructors[0]; |
75 var futureA = getHierarchyMembers(searchEngine, memberA).then((members) { | 76 var futureA = |
| 77 getHierarchyMembers(searchEngine, memberA, false).then((members) { |
76 expect(members, unorderedEquals([memberA])); | 78 expect(members, unorderedEquals([memberA])); |
77 }); | 79 }); |
78 var futureB = getHierarchyMembers(searchEngine, memberB).then((members) { | 80 var futureB = |
| 81 getHierarchyMembers(searchEngine, memberB, false).then((members) { |
79 expect(members, unorderedEquals([memberB])); | 82 expect(members, unorderedEquals([memberB])); |
80 }); | 83 }); |
81 return Future.wait([futureA, futureB]); | 84 return Future.wait([futureA, futureB]); |
82 } | 85 } |
83 | 86 |
84 Future test_getHierarchyMembers_fields() { | 87 Future test_getHierarchyMembers_fields() { |
85 _indexTestUnit(''' | 88 _indexTestUnit(''' |
86 class A { | 89 class A { |
87 int foo; | 90 int foo; |
88 } | 91 } |
89 class B extends A { | 92 class B extends A { |
90 get foo => null; | 93 get foo => null; |
91 } | 94 } |
92 class C extends B { | 95 class C extends B { |
93 set foo(x) {} | 96 set foo(x) {} |
94 } | 97 } |
95 class D { | 98 class D { |
96 int foo; | 99 int foo; |
97 } | 100 } |
98 '''); | 101 '''); |
99 ClassElement classA = findElement("A"); | 102 ClassElement classA = findElement("A"); |
100 ClassElement classB = findElement("B"); | 103 ClassElement classB = findElement("B"); |
101 ClassElement classC = findElement("C"); | 104 ClassElement classC = findElement("C"); |
102 ClassElement classD = findElement("D"); | 105 ClassElement classD = findElement("D"); |
103 ClassElement classE = findElement("E"); | 106 ClassElement classE = findElement("E"); |
104 ClassMemberElement memberA = classA.fields[0]; | 107 ClassMemberElement memberA = classA.fields[0]; |
105 ClassMemberElement memberB = classB.fields[0]; | 108 ClassMemberElement memberB = classB.fields[0]; |
106 ClassMemberElement memberC = classC.fields[0]; | 109 ClassMemberElement memberC = classC.fields[0]; |
107 ClassMemberElement memberD = classD.fields[0]; | 110 ClassMemberElement memberD = classD.fields[0]; |
108 var futureA = getHierarchyMembers(searchEngine, memberA).then((members) { | 111 var futureA = |
| 112 getHierarchyMembers(searchEngine, memberA, false).then((members) { |
109 expect(members, unorderedEquals([memberA, memberB, memberC])); | 113 expect(members, unorderedEquals([memberA, memberB, memberC])); |
110 }); | 114 }); |
111 var futureB = getHierarchyMembers(searchEngine, memberB).then((members) { | 115 var futureB = |
| 116 getHierarchyMembers(searchEngine, memberB, false).then((members) { |
112 expect(members, unorderedEquals([memberA, memberB, memberC])); | 117 expect(members, unorderedEquals([memberA, memberB, memberC])); |
113 }); | 118 }); |
114 var futureC = getHierarchyMembers(searchEngine, memberC).then((members) { | 119 var futureC = |
| 120 getHierarchyMembers(searchEngine, memberC, false).then((members) { |
115 expect(members, unorderedEquals([memberA, memberB, memberC])); | 121 expect(members, unorderedEquals([memberA, memberB, memberC])); |
116 }); | 122 }); |
117 var futureD = getHierarchyMembers(searchEngine, memberD).then((members) { | 123 var futureD = |
| 124 getHierarchyMembers(searchEngine, memberD, false).then((members) { |
118 expect(members, unorderedEquals([memberD])); | 125 expect(members, unorderedEquals([memberD])); |
119 }); | 126 }); |
120 return Future.wait([futureA, futureB, futureC, futureD]); | 127 return Future.wait([futureA, futureB, futureC, futureD]); |
121 } | 128 } |
122 | 129 |
123 Future test_getHierarchyMembers_methods() { | 130 Future test_getHierarchyMembers_methods() { |
124 _indexTestUnit(''' | 131 _indexTestUnit(''' |
125 class A { | 132 class A { |
126 foo() {} | 133 foo() {} |
127 } | 134 } |
(...skipping 13 matching lines...) Expand all Loading... |
141 ClassElement classA = findElement("A"); | 148 ClassElement classA = findElement("A"); |
142 ClassElement classB = findElement("B"); | 149 ClassElement classB = findElement("B"); |
143 ClassElement classC = findElement("C"); | 150 ClassElement classC = findElement("C"); |
144 ClassElement classD = findElement("D"); | 151 ClassElement classD = findElement("D"); |
145 ClassElement classE = findElement("E"); | 152 ClassElement classE = findElement("E"); |
146 ClassMemberElement memberA = classA.methods[0]; | 153 ClassMemberElement memberA = classA.methods[0]; |
147 ClassMemberElement memberB = classB.methods[0]; | 154 ClassMemberElement memberB = classB.methods[0]; |
148 ClassMemberElement memberC = classC.methods[0]; | 155 ClassMemberElement memberC = classC.methods[0]; |
149 ClassMemberElement memberD = classD.methods[0]; | 156 ClassMemberElement memberD = classD.methods[0]; |
150 ClassMemberElement memberE = classE.methods[0]; | 157 ClassMemberElement memberE = classE.methods[0]; |
151 var futureA = getHierarchyMembers(searchEngine, memberA).then((members) { | 158 var futureA = |
| 159 getHierarchyMembers(searchEngine, memberA, false).then((members) { |
152 expect(members, unorderedEquals([memberA, memberB, memberC])); | 160 expect(members, unorderedEquals([memberA, memberB, memberC])); |
153 }); | 161 }); |
154 var futureB = getHierarchyMembers(searchEngine, memberB).then((members) { | 162 var futureB = |
| 163 getHierarchyMembers(searchEngine, memberB, false).then((members) { |
155 expect(members, unorderedEquals([memberA, memberB, memberC])); | 164 expect(members, unorderedEquals([memberA, memberB, memberC])); |
156 }); | 165 }); |
157 var futureC = getHierarchyMembers(searchEngine, memberC).then((members) { | 166 var futureC = |
| 167 getHierarchyMembers(searchEngine, memberC, false).then((members) { |
158 expect(members, unorderedEquals([memberA, memberB, memberC])); | 168 expect(members, unorderedEquals([memberA, memberB, memberC])); |
159 }); | 169 }); |
160 var futureD = getHierarchyMembers(searchEngine, memberD).then((members) { | 170 var futureD = |
| 171 getHierarchyMembers(searchEngine, memberD, false).then((members) { |
161 expect(members, unorderedEquals([memberD, memberE])); | 172 expect(members, unorderedEquals([memberD, memberE])); |
162 }); | 173 }); |
163 var futureE = getHierarchyMembers(searchEngine, memberE).then((members) { | 174 var futureE = |
| 175 getHierarchyMembers(searchEngine, memberE, false).then((members) { |
164 expect(members, unorderedEquals([memberD, memberE])); | 176 expect(members, unorderedEquals([memberD, memberE])); |
165 }); | 177 }); |
166 return Future.wait([futureA, futureB, futureC, futureD, futureE]); | 178 return Future.wait([futureA, futureB, futureC, futureD, futureE]); |
167 } | 179 } |
168 | 180 |
| 181 Future test_getHierarchyMembers_methods_onlySuper() { |
| 182 _indexTestUnit(''' |
| 183 class A { |
| 184 foo() {} |
| 185 } |
| 186 class B extends A { |
| 187 foo() {} |
| 188 } |
| 189 class C extends B { |
| 190 foo() {} |
| 191 } |
| 192 '''); |
| 193 ClassElement classA = findElement("A"); |
| 194 ClassElement classB = findElement("B"); |
| 195 ClassElement classC = findElement("C"); |
| 196 ClassMemberElement memberA = classA.methods[0]; |
| 197 ClassMemberElement memberB = classB.methods[0]; |
| 198 ClassMemberElement memberC = classC.methods[0]; |
| 199 var futureA = |
| 200 getHierarchyMembers(searchEngine, memberA, true).then((members) { |
| 201 expect(members, unorderedEquals([memberA])); |
| 202 }); |
| 203 var futureB = |
| 204 getHierarchyMembers(searchEngine, memberB, true).then((members) { |
| 205 expect(members, unorderedEquals([memberA, memberB])); |
| 206 }); |
| 207 var futureC = |
| 208 getHierarchyMembers(searchEngine, memberC, true).then((members) { |
| 209 expect(members, unorderedEquals([memberA, memberB, memberC])); |
| 210 }); |
| 211 return Future.wait([futureA, futureB, futureC]); |
| 212 } |
| 213 |
169 Future test_getHierarchyMembers_withInterfaces() { | 214 Future test_getHierarchyMembers_withInterfaces() { |
170 _indexTestUnit(''' | 215 _indexTestUnit(''' |
171 class A { | 216 class A { |
172 foo() {} | 217 foo() {} |
173 } | 218 } |
174 class B implements A { | 219 class B implements A { |
175 foo() {} | 220 foo() {} |
176 } | 221 } |
177 abstract class C implements A { | 222 abstract class C implements A { |
178 } | 223 } |
179 class D extends C { | 224 class D extends C { |
180 foo() {} | 225 foo() {} |
181 } | 226 } |
182 class E { | 227 class E { |
183 foo() {} | 228 foo() {} |
184 } | 229 } |
185 '''); | 230 '''); |
186 ClassElement classA = findElement("A"); | 231 ClassElement classA = findElement("A"); |
187 ClassElement classB = findElement("B"); | 232 ClassElement classB = findElement("B"); |
188 ClassElement classC = findElement("C"); | 233 ClassElement classC = findElement("C"); |
189 ClassElement classD = findElement("D"); | 234 ClassElement classD = findElement("D"); |
190 ClassElement classE = findElement("E"); | 235 ClassElement classE = findElement("E"); |
191 ClassMemberElement memberA = classA.methods[0]; | 236 ClassMemberElement memberA = classA.methods[0]; |
192 ClassMemberElement memberB = classB.methods[0]; | 237 ClassMemberElement memberB = classB.methods[0]; |
193 ClassMemberElement memberD = classD.methods[0]; | 238 ClassMemberElement memberD = classD.methods[0]; |
194 var futureA = getHierarchyMembers(searchEngine, memberA).then((members) { | 239 var futureA = |
| 240 getHierarchyMembers(searchEngine, memberA, false).then((members) { |
195 expect(members, unorderedEquals([memberA, memberB, memberD])); | 241 expect(members, unorderedEquals([memberA, memberB, memberD])); |
196 }); | 242 }); |
197 var futureB = getHierarchyMembers(searchEngine, memberB).then((members) { | 243 var futureB = |
| 244 getHierarchyMembers(searchEngine, memberB, false).then((members) { |
198 expect(members, unorderedEquals([memberA, memberB, memberD])); | 245 expect(members, unorderedEquals([memberA, memberB, memberD])); |
199 }); | 246 }); |
200 var futureD = getHierarchyMembers(searchEngine, memberD).then((members) { | 247 var futureD = |
| 248 getHierarchyMembers(searchEngine, memberD, false).then((members) { |
201 expect(members, unorderedEquals([memberA, memberB, memberD])); | 249 expect(members, unorderedEquals([memberA, memberB, memberD])); |
202 }); | 250 }); |
203 return Future.wait([futureA, futureB, futureD]); | 251 return Future.wait([futureA, futureB, futureD]); |
204 } | 252 } |
205 | 253 |
206 void test_getMembers() { | 254 void test_getMembers() { |
207 _indexTestUnit(''' | 255 _indexTestUnit(''' |
208 class A { | 256 class A { |
209 A() {} | 257 A() {} |
210 var ma1; | 258 var ma1; |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
313 Set<ClassElement> supers = getSuperClasses(classF); | 361 Set<ClassElement> supers = getSuperClasses(classF); |
314 expect(supers, unorderedEquals([objectElement, classA])); | 362 expect(supers, unorderedEquals([objectElement, classA])); |
315 } | 363 } |
316 } | 364 } |
317 | 365 |
318 void _indexTestUnit(String code) { | 366 void _indexTestUnit(String code) { |
319 resolveTestUnit(code); | 367 resolveTestUnit(code); |
320 index.indexUnit(context, testUnit); | 368 index.indexUnit(context, testUnit); |
321 } | 369 } |
322 } | 370 } |
OLD | NEW |