Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(386)

Side by Side Diff: pkg/analysis_services/test/search/hierarchy_test.dart

Issue 395623006: Add hierarchy utils and use them in search. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4
5 // This code was auto-generated, is not intended to be edited, and is subject to
6 // significant change. Please see the README file for more information.
7
8 library services.src.search.hierarchy_test;
9
10 import 'dart:async';
11
12 import 'package:analysis_services/index/index.dart';
13 import 'package:analysis_services/index/local_memory_index.dart';
14 import 'package:analysis_services/search/hierarchy.dart';
15 import 'package:analysis_services/search/search_engine.dart';
16 import 'package:analysis_services/src/search/search_engine.dart';
17 import 'package:analysis_testing/mocks.dart';
18 import 'package:analysis_testing/reflective_tests.dart';
19 import 'package:analyzer/src/generated/element.dart';
20 import 'package:analyzer/src/generated/source.dart';
21 import 'package:typed_mock/typed_mock.dart';
22 import 'package:unittest/unittest.dart';
23
24 import '../index/abstract_single_unit.dart';
25
26
27 main() {
28 groupSep = ' | ';
29 group('HierarchyTest', () {
30 runReflectiveTests(HierarchyTest);
31 });
32 }
33
34
35 @ReflectiveTestCase()
36 class HierarchyTest extends AbstractSingleUnitTest {
37 Index index;
38 SearchEngineImpl searchEngine;
39
40 void setUp() {
41 super.setUp();
42 index = createLocalMemoryIndex();
43 searchEngine = new SearchEngineImpl(index);
44 }
45
46 void test_getDirectMembers() {
47 _indexTestUnit('''
48 class A {
49 A() {}
50 var ma1;
51 ma2() {}
52 }
53 class B extends A {
54 B() {}
55 B.named() {}
56 var mb1;
57 mb2() {}
58 }
59 ''');
60 {
61 ClassElement classA = findElement('A');
62 List<Element> members = getClassMembers(classA);
63 expect(members.map((e) => e.name), unorderedEquals(['ma1', 'ma2']));
64 }
65 {
66 ClassElement classB = findElement('B');
67 List<Element> members = getClassMembers(classB);
68 expect(members.map((e) => e.name), unorderedEquals(['mb1', 'mb2']));
69 }
70 }
71
72 Future test_getHierarchyMembers_constructors() {
73 _indexTestUnit('''
74 class A {
75 A() {}
76 }
77 class B extends A {
78 B() {}
79 }
80 ''');
81 ClassElement classA = findElement("A");
82 ClassElement classB = findElement("B");
83 ClassMemberElement memberA = classA.constructors[0];
84 ClassMemberElement memberB = classB.constructors[0];
85 var futureA = getHierarchyMembers(searchEngine, memberA).then((members) {
86 expect(members, unorderedEquals([memberA]));
87 });
88 var futureB = getHierarchyMembers(searchEngine, memberB).then((members) {
89 expect(members, unorderedEquals([memberB]));
90 });
91 return Future.wait([futureA, futureB]);
92 }
93
94 Future test_getHierarchyMembers_fields() {
95 _indexTestUnit('''
96 class A {
97 int foo;
98 }
99 class B extends A {
100 get foo => null;
101 }
102 class C extends B {
103 set foo(x) {}
104 }
105 class D {
106 int foo;
107 }
108 ''');
109 ClassElement classA = findElement("A");
110 ClassElement classB = findElement("B");
111 ClassElement classC = findElement("C");
112 ClassElement classD = findElement("D");
113 ClassElement classE = findElement("E");
114 ClassMemberElement memberA = classA.fields[0];
115 ClassMemberElement memberB = classB.fields[0];
116 ClassMemberElement memberC = classC.fields[0];
117 ClassMemberElement memberD = classD.fields[0];
118 var futureA = getHierarchyMembers(searchEngine, memberA).then((members) {
119 expect(members, unorderedEquals([memberA, memberB, memberC]));
120 });
121 var futureB = getHierarchyMembers(searchEngine, memberB).then((members) {
122 expect(members, unorderedEquals([memberA, memberB, memberC]));
123 });
124 var futureC = getHierarchyMembers(searchEngine, memberC).then((members) {
125 expect(members, unorderedEquals([memberA, memberB, memberC]));
126 });
127 var futureD = getHierarchyMembers(searchEngine, memberD).then((members) {
128 expect(members, unorderedEquals([memberD]));
129 });
130 return Future.wait([futureA, futureB, futureC, futureD]);
131 }
132
133 Future test_getHierarchyMembers_methods() {
134 _indexTestUnit('''
135 class A {
136 foo() {}
137 }
138 class B extends A {
139 foo() {}
140 }
141 class C extends B {
142 foo() {}
143 }
144 class D {
145 foo() {}
146 }
147 class E extends D {
148 foo() {}
149 }
150 ''');
151 ClassElement classA = findElement("A");
152 ClassElement classB = findElement("B");
153 ClassElement classC = findElement("C");
154 ClassElement classD = findElement("D");
155 ClassElement classE = findElement("E");
156 ClassMemberElement memberA = classA.methods[0];
157 ClassMemberElement memberB = classB.methods[0];
158 ClassMemberElement memberC = classC.methods[0];
159 ClassMemberElement memberD = classD.methods[0];
160 ClassMemberElement memberE = classE.methods[0];
161 var futureA = getHierarchyMembers(searchEngine, memberA).then((members) {
162 expect(members, unorderedEquals([memberA, memberB, memberC]));
163 });
164 var futureB = getHierarchyMembers(searchEngine, memberB).then((members) {
165 expect(members, unorderedEquals([memberA, memberB, memberC]));
166 });
167 var futureC = getHierarchyMembers(searchEngine, memberC).then((members) {
168 expect(members, unorderedEquals([memberA, memberB, memberC]));
169 });
170 var futureD = getHierarchyMembers(searchEngine, memberD).then((members) {
171 expect(members, unorderedEquals([memberD, memberE]));
172 });
173 var futureE = getHierarchyMembers(searchEngine, memberE).then((members) {
174 expect(members, unorderedEquals([memberD, memberE]));
175 });
176 return Future.wait([futureA, futureB, futureC, futureD, futureE]);
177 }
178
179 Future test_getHierarchyMembers_withInterfaces() {
180 _indexTestUnit('''
181 class A {
182 foo() {}
183 }
184 class B implements A {
185 foo() {}
186 }
187 abstract class C implements A {
188 }
189 class D extends C {
190 foo() {}
191 }
192 class E {
193 foo() {}
194 }
195 ''');
196 ClassElement classA = findElement("A");
197 ClassElement classB = findElement("B");
198 ClassElement classC = findElement("C");
199 ClassElement classD = findElement("D");
200 ClassElement classE = findElement("E");
201 ClassMemberElement memberA = classA.methods[0];
202 ClassMemberElement memberB = classB.methods[0];
203 ClassMemberElement memberD = classD.methods[0];
204 var futureA = getHierarchyMembers(searchEngine, memberA).then((members) {
205 expect(members, unorderedEquals([memberA, memberB, memberD]));
206 });
207 var futureB = getHierarchyMembers(searchEngine, memberB).then((members) {
208 expect(members, unorderedEquals([memberA, memberB, memberD]));
209 });
210 var futureD = getHierarchyMembers(searchEngine, memberD).then((members) {
211 expect(members, unorderedEquals([memberA, memberB, memberD]));
212 });
213 return Future.wait([futureA, futureB, futureD]);
214 }
215
216 Future test_getSubClasses() {
217 _indexTestUnit('''
218 class A {}
219 class B extends A {}
220 class C extends B {}
221 class D extends B implements A {}
222 class M {}
223 class E extends A with M {}
224 ''');
225 ClassElement classA = findElement("A");
226 ClassElement classB = findElement("B");
227 ClassElement classC = findElement("C");
228 ClassElement classD = findElement("D");
229 ClassElement classM = findElement("M");
230 ClassElement classE = findElement("E");
231 var futureA = getSubClasses(searchEngine, classA).then((subs) {
232 expect(subs, unorderedEquals([classB, classC, classD, classE]));
233 });
234 var futureB = getSubClasses(searchEngine, classB).then((subs) {
235 expect(subs, unorderedEquals([classC, classD]));
236 });
237 var futureC = getSubClasses(searchEngine, classC).then((subs) {
238 expect(subs, isEmpty);
239 });
240 var futureM = getSubClasses(searchEngine, classM).then((subs) {
241 expect(subs, unorderedEquals([classE]));
242 });
243 return Future.wait([futureA, futureB, futureC, futureM]);
244 }
245
246 void test_getSuperClasses() {
247 _indexTestUnit('''
248 class A {}
249 class B extends A {}
250 class C extends B {}
251 class D extends B implements A {}
252 class M {}
253 class E extends A with M {}
254 class F implements A {}
255 ''');
256 ClassElement classA = findElement("A");
257 ClassElement classB = findElement("B");
258 ClassElement classC = findElement("C");
259 ClassElement classD = findElement("D");
260 ClassElement classE = findElement("E");
261 ClassElement classF = findElement("F");
262 ClassElement objectElement = classA.supertype.element;
263 // Object
264 {
265 Set<ClassElement> supers = getSuperClasses(objectElement);
266 expect(supers, isEmpty);
267 }
268 // A
269 {
270 Set<ClassElement> supers = getSuperClasses(classA);
271 expect(supers, unorderedEquals([objectElement]));
272 }
273 // B
274 {
275 Set<ClassElement> supers = getSuperClasses(classB);
276 expect(supers, unorderedEquals([objectElement, classA]));
277 }
278 // C
279 {
280 Set<ClassElement> supers = getSuperClasses(classC);
281 expect(supers, unorderedEquals([objectElement, classA, classB]));
282 }
283 // D
284 {
285 Set<ClassElement> supers = getSuperClasses(classD);
286 expect(supers, unorderedEquals([objectElement, classA, classB]));
287 }
288 // E
289 {
290 Set<ClassElement> supers = getSuperClasses(classE);
291 expect(supers, unorderedEquals([objectElement, classA]));
292 }
293 // F
294 {
295 Set<ClassElement> supers = getSuperClasses(classF);
296 expect(supers, unorderedEquals([objectElement, classA]));
297 }
298 }
299
300 void _indexTestUnit(String code) {
301 resolveTestUnit(code);
302 index.indexUnit(context, testUnit);
303 }
304 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698