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

Side by Side Diff: pkg/analysis_server/test/search/element_references_test.dart

Issue 894323003: Wait for analysis in search domain. Rewrite with async/await. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 10 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
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.search.element_references; 5 library test.search.element_references;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 8
9 import 'package:analysis_server/src/protocol.dart'; 9 import 'package:analysis_server/src/protocol.dart';
10 import 'package:unittest/unittest.dart'; 10 import 'package:unittest/unittest.dart';
(...skipping 10 matching lines...) Expand all
21 21
22 @reflectiveTest 22 @reflectiveTest
23 class ElementReferencesTest extends AbstractSearchDomainTest { 23 class ElementReferencesTest extends AbstractSearchDomainTest {
24 Element searchElement; 24 Element searchElement;
25 25
26 void assertHasRef(SearchResultKind kind, String search, bool isPotential) { 26 void assertHasRef(SearchResultKind kind, String search, bool isPotential) {
27 assertHasResult(kind, search); 27 assertHasResult(kind, search);
28 expect(result.isPotential, isPotential); 28 expect(result.isPotential, isPotential);
29 } 29 }
30 30
31 Future findElementReferences(String search, bool includePotential) { 31 Future findElementReferences(String search, bool includePotential) async {
32 int offset = findOffset(search); 32 int offset = findOffset(search);
33 return waitForTasksFinished().then((_) { 33 await waitForTasksFinished();
34 Request request = new SearchFindElementReferencesParams( 34 Request request = new SearchFindElementReferencesParams(
35 testFile, 35 testFile,
36 offset, 36 offset,
37 includePotential).toRequest('0'); 37 includePotential).toRequest('0');
38 Response response = handleSuccessfulRequest(request); 38 Response response = await waitResponse(request);
39 var result = new SearchFindElementReferencesResult.fromResponse(response); 39 var result = new SearchFindElementReferencesResult.fromResponse(response);
40 searchId = result.id; 40 searchId = result.id;
41 searchElement = result.element; 41 searchElement = result.element;
42 results.clear(); 42 if (searchId == null) {
43 searchDone = false; 43 return null;
44 if (searchId == null) { 44 } else {
45 return null; 45 return waitForSearchResults();
46 } else { 46 }
47 return waitForSearchResults();
48 }
49 });
50 } 47 }
51 48
52 test_constructor_named() { 49 test_constructor_named() async {
53 addTestFile(''' 50 addTestFile('''
54 class A { 51 class A {
55 A.named(p); 52 A.named(p);
56 } 53 }
57 main() { 54 main() {
58 new A.named(1); 55 new A.named(1);
59 new A.named(2); 56 new A.named(2);
60 } 57 }
61 '''); 58 ''');
62 return findElementReferences('named(p)', false).then((_) { 59 await findElementReferences('named(p)', false);
63 expect(searchElement.kind, ElementKind.CONSTRUCTOR); 60 expect(searchElement.kind, ElementKind.CONSTRUCTOR);
64 assertHasResult(SearchResultKind.REFERENCE, '.named(1)', 6); 61 assertHasResult(SearchResultKind.REFERENCE, '.named(1)', 6);
65 assertHasResult(SearchResultKind.REFERENCE, '.named(2)', 6); 62 assertHasResult(SearchResultKind.REFERENCE, '.named(2)', 6);
66 });
67 } 63 }
68 64
69 test_constructor_named_potential() { 65 test_constructor_named_potential() async {
70 // Constructors in other classes shouldn't be considered potential matches, 66 // Constructors in other classes shouldn't be considered potential matches,
71 // nor should unresolved method calls, since constructor call sites are 67 // nor should unresolved method calls, since constructor call sites are
72 // statically bound to their targets). 68 // statically bound to their targets).
73 addTestFile(''' 69 addTestFile('''
74 class A { 70 class A {
75 A.named(p); // A 71 A.named(p); // A
76 } 72 }
77 class B { 73 class B {
78 B.named(p); 74 B.named(p);
79 } 75 }
80 f(x) { 76 f(x) {
81 new A.named(1); 77 new A.named(1);
82 new B.named(2); 78 new B.named(2);
83 x.named(3); 79 x.named(3);
84 } 80 }
85 '''); 81 ''');
86 return findElementReferences('named(p); // A', true).then((_) { 82 await findElementReferences('named(p); // A', true);
87 expect(searchElement.kind, ElementKind.CONSTRUCTOR); 83 expect(searchElement.kind, ElementKind.CONSTRUCTOR);
88 assertHasResult(SearchResultKind.DECLARATION, '.named(p)', 6); 84 assertHasResult(SearchResultKind.DECLARATION, '.named(p)', 6);
89 assertHasResult(SearchResultKind.REFERENCE, '.named(1)', 6); 85 assertHasResult(SearchResultKind.REFERENCE, '.named(1)', 6);
90 expect(results, hasLength(2)); 86 expect(results, hasLength(2));
91 });
92 } 87 }
93 88
94 test_constructor_unnamed() { 89 test_constructor_unnamed() async {
95 addTestFile(''' 90 addTestFile('''
96 class A { 91 class A {
97 A(p); 92 A(p);
98 } 93 }
99 main() { 94 main() {
100 new A(1); 95 new A(1);
101 new A(2); 96 new A(2);
102 } 97 }
103 '''); 98 ''');
104 return findElementReferences('A(p)', false).then((_) { 99 await findElementReferences('A(p)', false);
105 expect(searchElement.kind, ElementKind.CONSTRUCTOR); 100 expect(searchElement.kind, ElementKind.CONSTRUCTOR);
106 assertHasResult(SearchResultKind.REFERENCE, '(1)', 0); 101 assertHasResult(SearchResultKind.REFERENCE, '(1)', 0);
107 assertHasResult(SearchResultKind.REFERENCE, '(2)', 0); 102 assertHasResult(SearchResultKind.REFERENCE, '(2)', 0);
108 });
109 } 103 }
110 104
111 test_constructor_unnamed_potential() { 105 test_constructor_unnamed_potential() async {
112 // Constructors in other classes shouldn't be considered potential matches, 106 // Constructors in other classes shouldn't be considered potential matches,
113 // even if they are also unnamed (since constructor call sites are 107 // even if they are also unnamed (since constructor call sites are
114 // statically bound to their targets). 108 // statically bound to their targets).
115 // Also, assignments to local variables shouldn't be considered potential 109 // Also, assignments to local variables shouldn't be considered potential
116 // matches. 110 // matches.
117 addTestFile(''' 111 addTestFile('''
118 class A { 112 class A {
119 A(p); // A 113 A(p); // A
120 } 114 }
121 class B { 115 class B {
122 B(p); 116 B(p);
123 foo() { 117 foo() {
124 int k; 118 int k;
125 k = 3; 119 k = 3;
126 } 120 }
127 } 121 }
128 main() { 122 main() {
129 new A(1); 123 new A(1);
130 new B(2); 124 new B(2);
131 } 125 }
132 '''); 126 ''');
133 return findElementReferences('A(p)', true).then((_) { 127 await findElementReferences('A(p)', true);
134 expect(searchElement.kind, ElementKind.CONSTRUCTOR); 128 expect(searchElement.kind, ElementKind.CONSTRUCTOR);
135 assertHasResult(SearchResultKind.DECLARATION, '(p); // A', 0); 129 assertHasResult(SearchResultKind.DECLARATION, '(p); // A', 0);
136 assertHasResult(SearchResultKind.REFERENCE, '(1)', 0); 130 assertHasResult(SearchResultKind.REFERENCE, '(1)', 0);
137 expect(results, hasLength(2)); 131 expect(results, hasLength(2));
138 });
139 } 132 }
140 133
141 test_field_explicit() { 134 test_field_explicit() async {
142 addTestFile(''' 135 addTestFile('''
143 class A { 136 class A {
144 var fff; // declaration 137 var fff; // declaration
145 A(this.fff); // in constructor 138 A(this.fff); // in constructor
146 m() { 139 m() {
147 fff = 2; 140 fff = 2;
148 fff += 3; 141 fff += 3;
149 print(fff); // in m() 142 print(fff); // in m()
150 fff(); // in m() 143 fff(); // in m()
151 } 144 }
152 } 145 }
153 main(A a) { 146 main(A a) {
154 a.fff = 20; 147 a.fff = 20;
155 a.fff += 30; 148 a.fff += 30;
156 print(a.fff); // in main() 149 print(a.fff); // in main()
157 a.fff(); // in main() 150 a.fff(); // in main()
158 } 151 }
159 '''); 152 ''');
160 return findElementReferences('fff; // declaration', false).then((_) { 153 await findElementReferences('fff; // declaration', false);
161 expect(searchElement.kind, ElementKind.FIELD); 154 expect(searchElement.kind, ElementKind.FIELD);
162 expect(results, hasLength(10)); 155 expect(results, hasLength(10));
163 assertHasResult(SearchResultKind.DECLARATION, 'fff; // declaration'); 156 assertHasResult(SearchResultKind.DECLARATION, 'fff; // declaration');
164 assertHasResult(SearchResultKind.REFERENCE, 'fff); // in constructor'); 157 assertHasResult(SearchResultKind.REFERENCE, 'fff); // in constructor');
165 // m() 158 // m()
166 assertHasResult(SearchResultKind.WRITE, 'fff = 2;'); 159 assertHasResult(SearchResultKind.WRITE, 'fff = 2;');
167 assertHasResult(SearchResultKind.WRITE, 'fff += 3;'); 160 assertHasResult(SearchResultKind.WRITE, 'fff += 3;');
168 assertHasResult(SearchResultKind.READ, 'fff); // in m()'); 161 assertHasResult(SearchResultKind.READ, 'fff); // in m()');
169 assertHasResult(SearchResultKind.INVOCATION, 'fff(); // in m()'); 162 assertHasResult(SearchResultKind.INVOCATION, 'fff(); // in m()');
170 // main() 163 // main()
171 assertHasResult(SearchResultKind.WRITE, 'fff = 20;'); 164 assertHasResult(SearchResultKind.WRITE, 'fff = 20;');
172 assertHasResult(SearchResultKind.WRITE, 'fff += 30;'); 165 assertHasResult(SearchResultKind.WRITE, 'fff += 30;');
173 assertHasResult(SearchResultKind.READ, 'fff); // in main()'); 166 assertHasResult(SearchResultKind.READ, 'fff); // in main()');
174 assertHasResult(SearchResultKind.INVOCATION, 'fff(); // in main()'); 167 assertHasResult(SearchResultKind.INVOCATION, 'fff(); // in main()');
175 });
176 } 168 }
177 169
178 test_field_implicit() { 170 test_field_implicit() async {
179 addTestFile(''' 171 addTestFile('''
180 class A { 172 class A {
181 var get fff => null; 173 var get fff => null;
182 void set fff(x) {} 174 void set fff(x) {}
183 m() { 175 m() {
184 print(fff); // in m() 176 print(fff); // in m()
185 fff = 1; 177 fff = 1;
186 } 178 }
187 } 179 }
188 main(A a) { 180 main(A a) {
189 print(a.fff); // in main() 181 print(a.fff); // in main()
190 a.fff = 10; 182 a.fff = 10;
191 } 183 }
192 '''); 184 ''');
193 return findElementReferences('fff =>', false).then((_) { 185 {
186 await findElementReferences('fff =>', false);
194 expect(searchElement.kind, ElementKind.FIELD); 187 expect(searchElement.kind, ElementKind.FIELD);
195 expect(results, hasLength(4)); 188 expect(results, hasLength(4));
196 assertHasResult(SearchResultKind.READ, 'fff); // in m()'); 189 assertHasResult(SearchResultKind.READ, 'fff); // in m()');
197 assertHasResult(SearchResultKind.WRITE, 'fff = 1;'); 190 assertHasResult(SearchResultKind.WRITE, 'fff = 1;');
198 assertHasResult(SearchResultKind.READ, 'fff); // in main()'); 191 assertHasResult(SearchResultKind.READ, 'fff); // in main()');
199 assertHasResult(SearchResultKind.WRITE, 'fff = 10;'); 192 assertHasResult(SearchResultKind.WRITE, 'fff = 10;');
200 return findElementReferences('fff(x) {}', false); 193 }
201 }).then((_) { 194 {
195 await findElementReferences('fff(x) {}', false);
202 expect(results, hasLength(4)); 196 expect(results, hasLength(4));
203 assertHasResult(SearchResultKind.READ, 'fff); // in m()'); 197 assertHasResult(SearchResultKind.READ, 'fff); // in m()');
204 assertHasResult(SearchResultKind.WRITE, 'fff = 1;'); 198 assertHasResult(SearchResultKind.WRITE, 'fff = 1;');
205 assertHasResult(SearchResultKind.READ, 'fff); // in main()'); 199 assertHasResult(SearchResultKind.READ, 'fff); // in main()');
206 assertHasResult(SearchResultKind.WRITE, 'fff = 10;'); 200 assertHasResult(SearchResultKind.WRITE, 'fff = 10;');
207 }); 201 }
208 } 202 }
209 203
210 test_field_inFormalParameter() { 204 test_field_inFormalParameter() async {
211 addTestFile(''' 205 addTestFile('''
212 class A { 206 class A {
213 var fff; // declaration 207 var fff; // declaration
214 A(this.fff); // in constructor 208 A(this.fff); // in constructor
215 m() { 209 m() {
216 fff = 2; 210 fff = 2;
217 print(fff); // in m() 211 print(fff); // in m()
218 } 212 }
219 } 213 }
220 '''); 214 ''');
221 return findElementReferences('fff); // in constructor', false).then((_) { 215 await findElementReferences('fff); // in constructor', false);
222 expect(searchElement.kind, ElementKind.FIELD); 216 expect(searchElement.kind, ElementKind.FIELD);
223 expect(results, hasLength(4)); 217 expect(results, hasLength(4));
224 assertHasResult(SearchResultKind.DECLARATION, 'fff; // declaration'); 218 assertHasResult(SearchResultKind.DECLARATION, 'fff; // declaration');
225 assertHasResult(SearchResultKind.REFERENCE, 'fff); // in constructor'); 219 assertHasResult(SearchResultKind.REFERENCE, 'fff); // in constructor');
226 assertHasResult(SearchResultKind.WRITE, 'fff = 2;'); 220 assertHasResult(SearchResultKind.WRITE, 'fff = 2;');
227 assertHasResult(SearchResultKind.READ, 'fff); // in m()'); 221 assertHasResult(SearchResultKind.READ, 'fff); // in m()');
228 });
229 } 222 }
230 223
231 test_function() { 224 test_function() async {
232 addTestFile(''' 225 addTestFile('''
233 fff(p) {} 226 fff(p) {}
234 main() { 227 main() {
235 fff(1); 228 fff(1);
236 print(fff); 229 print(fff);
237 } 230 }
238 '''); 231 ''');
239 return findElementReferences('fff(p) {}', false).then((_) { 232 await findElementReferences('fff(p) {}', false);
240 expect(searchElement.kind, ElementKind.FUNCTION); 233 expect(searchElement.kind, ElementKind.FUNCTION);
241 expect(results, hasLength(2)); 234 expect(results, hasLength(2));
242 assertHasResult(SearchResultKind.INVOCATION, 'fff(1)'); 235 assertHasResult(SearchResultKind.INVOCATION, 'fff(1)');
243 assertHasResult(SearchResultKind.REFERENCE, 'fff);'); 236 assertHasResult(SearchResultKind.REFERENCE, 'fff);');
244 });
245 } 237 }
246 238
247 test_hierarchy_field_explicit() { 239 test_hierarchy_field_explicit() async {
248 addTestFile(''' 240 addTestFile('''
249 class A { 241 class A {
250 int fff; // in A 242 int fff; // in A
251 } 243 }
252 class B extends A { 244 class B extends A {
253 int fff; // in B 245 int fff; // in B
254 } 246 }
255 class C extends B { 247 class C extends B {
256 int fff; // in C 248 int fff; // in C
257 } 249 }
258 main(A a, B b, C c) { 250 main(A a, B b, C c) {
259 a.fff = 10; 251 a.fff = 10;
260 b.fff = 20; 252 b.fff = 20;
261 c.fff = 30; 253 c.fff = 30;
262 } 254 }
263 '''); 255 ''');
264 return findElementReferences('fff; // in B', false).then((_) { 256 await findElementReferences('fff; // in B', false);
265 expect(searchElement.kind, ElementKind.FIELD); 257 expect(searchElement.kind, ElementKind.FIELD);
266 assertHasResult(SearchResultKind.DECLARATION, 'fff; // in A'); 258 assertHasResult(SearchResultKind.DECLARATION, 'fff; // in A');
267 assertHasResult(SearchResultKind.DECLARATION, 'fff; // in B'); 259 assertHasResult(SearchResultKind.DECLARATION, 'fff; // in B');
268 assertHasResult(SearchResultKind.DECLARATION, 'fff; // in C'); 260 assertHasResult(SearchResultKind.DECLARATION, 'fff; // in C');
269 assertHasResult(SearchResultKind.WRITE, 'fff = 10;'); 261 assertHasResult(SearchResultKind.WRITE, 'fff = 10;');
270 assertHasResult(SearchResultKind.WRITE, 'fff = 20;'); 262 assertHasResult(SearchResultKind.WRITE, 'fff = 20;');
271 assertHasResult(SearchResultKind.WRITE, 'fff = 30;'); 263 assertHasResult(SearchResultKind.WRITE, 'fff = 30;');
272 });
273 } 264 }
274 265
275 test_hierarchy_method() { 266 test_hierarchy_method() async {
276 addTestFile(''' 267 addTestFile('''
277 class A { 268 class A {
278 mmm() {} // in A 269 mmm() {} // in A
279 } 270 }
280 class B extends A { 271 class B extends A {
281 mmm() {} // in B 272 mmm() {} // in B
282 } 273 }
283 class C extends B { 274 class C extends B {
284 mmm() {} // in C 275 mmm() {} // in C
285 } 276 }
286 main(A a, B b, C c) { 277 main(A a, B b, C c) {
287 a.mmm(10); 278 a.mmm(10);
288 b.mmm(20); 279 b.mmm(20);
289 c.mmm(30); 280 c.mmm(30);
290 } 281 }
291 '''); 282 ''');
292 return findElementReferences('mmm() {} // in B', false).then((_) { 283 await findElementReferences('mmm() {} // in B', false);
293 expect(searchElement.kind, ElementKind.METHOD); 284 expect(searchElement.kind, ElementKind.METHOD);
294 assertHasResult(SearchResultKind.INVOCATION, 'mmm(10)'); 285 assertHasResult(SearchResultKind.INVOCATION, 'mmm(10)');
295 assertHasResult(SearchResultKind.INVOCATION, 'mmm(20)'); 286 assertHasResult(SearchResultKind.INVOCATION, 'mmm(20)');
296 assertHasResult(SearchResultKind.INVOCATION, 'mmm(30)'); 287 assertHasResult(SearchResultKind.INVOCATION, 'mmm(30)');
297 });
298 } 288 }
299 289
300 test_label() { 290 test_label() async {
301 addTestFile(''' 291 addTestFile('''
302 main() { 292 main() {
303 myLabel: 293 myLabel:
304 for (int i = 0; i < 10; i++) { 294 for (int i = 0; i < 10; i++) {
305 if (i == 2) { 295 if (i == 2) {
306 continue myLabel; // continue 296 continue myLabel; // continue
307 } 297 }
308 break myLabel; // break 298 break myLabel; // break
309 } 299 }
310 } 300 }
311 '''); 301 ''');
312 return findElementReferences('myLabel; // break', false).then((_) { 302 await findElementReferences('myLabel; // break', false);
313 expect(searchElement.kind, ElementKind.LABEL); 303 expect(searchElement.kind, ElementKind.LABEL);
314 expect(results, hasLength(3)); 304 expect(results, hasLength(3));
315 assertHasResult(SearchResultKind.DECLARATION, 'myLabel:'); 305 assertHasResult(SearchResultKind.DECLARATION, 'myLabel:');
316 assertHasResult(SearchResultKind.REFERENCE, 'myLabel; // continue'); 306 assertHasResult(SearchResultKind.REFERENCE, 'myLabel; // continue');
317 assertHasResult(SearchResultKind.REFERENCE, 'myLabel; // break'); 307 assertHasResult(SearchResultKind.REFERENCE, 'myLabel; // break');
318 });
319 } 308 }
320 309
321 test_localVariable() { 310 test_localVariable() async {
322 addTestFile(''' 311 addTestFile('''
323 main() { 312 main() {
324 var vvv = 1; 313 var vvv = 1;
325 print(vvv); 314 print(vvv);
326 vvv += 3; 315 vvv += 3;
327 vvv = 2; 316 vvv = 2;
328 vvv(); 317 vvv();
329 } 318 }
330 '''); 319 ''');
331 return findElementReferences('vvv = 1', false).then((_) { 320 await findElementReferences('vvv = 1', false);
332 expect(searchElement.kind, ElementKind.LOCAL_VARIABLE); 321 expect(searchElement.kind, ElementKind.LOCAL_VARIABLE);
333 expect(results, hasLength(5)); 322 expect(results, hasLength(5));
334 assertHasResult(SearchResultKind.DECLARATION, 'vvv = 1'); 323 assertHasResult(SearchResultKind.DECLARATION, 'vvv = 1');
335 assertHasResult(SearchResultKind.READ, 'vvv);'); 324 assertHasResult(SearchResultKind.READ, 'vvv);');
336 assertHasResult(SearchResultKind.READ_WRITE, 'vvv += 3'); 325 assertHasResult(SearchResultKind.READ_WRITE, 'vvv += 3');
337 assertHasResult(SearchResultKind.WRITE, 'vvv = 2'); 326 assertHasResult(SearchResultKind.WRITE, 'vvv = 2');
338 assertHasResult(SearchResultKind.INVOCATION, 'vvv();'); 327 assertHasResult(SearchResultKind.INVOCATION, 'vvv();');
339 });
340 } 328 }
341 329
342 test_method() { 330 test_method() async {
343 addTestFile(''' 331 addTestFile('''
344 class A { 332 class A {
345 mmm(p) {} 333 mmm(p) {}
346 m() { 334 m() {
347 mmm(1); 335 mmm(1);
348 print(mmm); // in m() 336 print(mmm); // in m()
349 } 337 }
350 } 338 }
351 main(A a) { 339 main(A a) {
352 a.mmm(10); 340 a.mmm(10);
353 print(a.mmm); // in main() 341 print(a.mmm); // in main()
354 } 342 }
355 '''); 343 ''');
356 return findElementReferences('mmm(p) {}', false).then((_) { 344 await findElementReferences('mmm(p) {}', false);
357 expect(searchElement.kind, ElementKind.METHOD); 345 expect(searchElement.kind, ElementKind.METHOD);
358 expect(results, hasLength(4)); 346 expect(results, hasLength(4));
359 assertHasResult(SearchResultKind.INVOCATION, 'mmm(1);'); 347 assertHasResult(SearchResultKind.INVOCATION, 'mmm(1);');
360 assertHasResult(SearchResultKind.REFERENCE, 'mmm); // in m()'); 348 assertHasResult(SearchResultKind.REFERENCE, 'mmm); // in m()');
361 assertHasResult(SearchResultKind.INVOCATION, 'mmm(10);'); 349 assertHasResult(SearchResultKind.INVOCATION, 'mmm(10);');
362 assertHasResult(SearchResultKind.REFERENCE, 'mmm); // in main()'); 350 assertHasResult(SearchResultKind.REFERENCE, 'mmm); // in main()');
363 });
364 } 351 }
365 352
366 test_method_propagatedType() { 353 test_method_propagatedType() async {
367 addTestFile(''' 354 addTestFile('''
368 class A { 355 class A {
369 mmm(p) {} 356 mmm(p) {}
370 } 357 }
371 main() { 358 main() {
372 var a = new A(); 359 var a = new A();
373 a.mmm(10); 360 a.mmm(10);
374 print(a.mmm); 361 print(a.mmm);
375 } 362 }
376 '''); 363 ''');
377 return findElementReferences('mmm(p) {}', false).then((_) { 364 await findElementReferences('mmm(p) {}', false);
378 expect(searchElement.kind, ElementKind.METHOD); 365 expect(searchElement.kind, ElementKind.METHOD);
379 expect(results, hasLength(2)); 366 expect(results, hasLength(2));
380 assertHasResult(SearchResultKind.INVOCATION, 'mmm(10);'); 367 assertHasResult(SearchResultKind.INVOCATION, 'mmm(10);');
381 assertHasResult(SearchResultKind.REFERENCE, 'mmm);'); 368 assertHasResult(SearchResultKind.REFERENCE, 'mmm);');
382 });
383 } 369 }
384 370
385 test_noElement() { 371 test_noElement() async {
386 addTestFile(''' 372 addTestFile('''
387 main() { 373 main() {
388 print(noElement); 374 print(noElement);
389 } 375 }
390 '''); 376 ''');
391 return findElementReferences('noElement', false).then((_) { 377 await findElementReferences('noElement', false);
392 expect(searchId, isNull); 378 expect(searchId, isNull);
393 });
394 } 379 }
395 380
396 test_oneUnit_twoLibraries() { 381 test_oneUnit_twoLibraries() async {
397 var pathA = '/project/bin/libA.dart'; 382 var pathA = '/project/bin/libA.dart';
398 var pathB = '/project/bin/libB.dart'; 383 var pathB = '/project/bin/libB.dart';
399 var codeA = ''' 384 var codeA = '''
400 library lib; 385 library lib;
401 part 'test.dart'; 386 part 'test.dart';
402 main() { 387 main() {
403 fff(1); 388 fff(1);
404 } 389 }
405 '''; 390 ''';
406 var codeB = ''' 391 var codeB = '''
407 library lib; 392 library lib;
408 part 'test.dart'; 393 part 'test.dart';
409 main() { 394 main() {
410 fff(2); 395 fff(2);
411 } 396 }
412 '''; 397 ''';
413 addFile(pathA, codeA); 398 addFile(pathA, codeA);
414 addFile(pathB, codeB); 399 addFile(pathB, codeB);
415 addTestFile(''' 400 addTestFile('''
416 part of lib; 401 part of lib;
417 fff(p) {} 402 fff(p) {}
418 '''); 403 ''');
419 return findElementReferences('fff(p) {}', false).then((_) { 404 await findElementReferences('fff(p) {}', false);
420 expect(searchElement.kind, ElementKind.FUNCTION); 405 expect(searchElement.kind, ElementKind.FUNCTION);
421 expect(results, hasLength(2)); 406 expect(results, hasLength(2));
422 findResult( 407 findResult(
423 SearchResultKind.INVOCATION, 408 SearchResultKind.INVOCATION,
424 pathA, 409 pathA,
425 codeA.indexOf('fff(1)'), 410 codeA.indexOf('fff(1)'),
426 3, 411 3,
427 true); 412 true);
428 findResult( 413 findResult(
429 SearchResultKind.INVOCATION, 414 SearchResultKind.INVOCATION,
430 pathB, 415 pathB,
431 codeB.indexOf('fff(2)'), 416 codeB.indexOf('fff(2)'),
432 3, 417 3,
433 true); 418 true);
434 });
435 } 419 }
436 420
437 test_oneUnit_zeroLibraries() { 421 test_oneUnit_zeroLibraries() async {
438 addTestFile(''' 422 addTestFile('''
439 part of lib; 423 part of lib;
440 fff(p) {} 424 fff(p) {}
441 main() { 425 main() {
442 fff(10); 426 fff(10);
443 } 427 }
444 '''); 428 ''');
445 return findElementReferences('fff(p) {}', false).then((_) { 429 await findElementReferences('fff(p) {}', false);
446 expect(results, isEmpty); 430 expect(results, isEmpty);
447 });
448 } 431 }
449 432
450 test_parameter() { 433 test_parameter() async {
451 addTestFile(''' 434 addTestFile('''
452 main(ppp) { 435 main(ppp) {
453 print(ppp); 436 print(ppp);
454 ppp += 3; 437 ppp += 3;
455 ppp = 2; 438 ppp = 2;
456 ppp(); 439 ppp();
457 } 440 }
458 '''); 441 ''');
459 return findElementReferences('ppp) {', false).then((_) { 442 await findElementReferences('ppp) {', false);
460 expect(searchElement.kind, ElementKind.PARAMETER); 443 expect(searchElement.kind, ElementKind.PARAMETER);
461 expect(results, hasLength(5)); 444 expect(results, hasLength(5));
462 assertHasResult(SearchResultKind.DECLARATION, 'ppp) {'); 445 assertHasResult(SearchResultKind.DECLARATION, 'ppp) {');
463 assertHasResult(SearchResultKind.READ, 'ppp);'); 446 assertHasResult(SearchResultKind.READ, 'ppp);');
464 assertHasResult(SearchResultKind.READ_WRITE, 'ppp += 3'); 447 assertHasResult(SearchResultKind.READ_WRITE, 'ppp += 3');
465 assertHasResult(SearchResultKind.WRITE, 'ppp = 2'); 448 assertHasResult(SearchResultKind.WRITE, 'ppp = 2');
466 assertHasResult(SearchResultKind.INVOCATION, 'ppp();'); 449 assertHasResult(SearchResultKind.INVOCATION, 'ppp();');
467 });
468 } 450 }
469 451
470 test_path_inConstructor_named() { 452 test_path_inConstructor_named() async {
471 addTestFile(''' 453 addTestFile('''
472 library my_lib; 454 library my_lib;
473 class A {} 455 class A {}
474 class B { 456 class B {
475 B.named() { 457 B.named() {
476 A a = null; 458 A a = null;
477 } 459 }
478 } 460 }
479 '''); 461 ''');
480 return findElementReferences('A {}', false).then((_) { 462 await findElementReferences('A {}', false);
481 assertHasResult(SearchResultKind.REFERENCE, 'A a = null;'); 463 assertHasResult(SearchResultKind.REFERENCE, 'A a = null;');
482 expect(getPathString(result.path), ''' 464 expect(getPathString(result.path), '''
483 LOCAL_VARIABLE a 465 LOCAL_VARIABLE a
484 CONSTRUCTOR named 466 CONSTRUCTOR named
485 CLASS B 467 CLASS B
486 COMPILATION_UNIT test.dart 468 COMPILATION_UNIT test.dart
487 LIBRARY my_lib'''); 469 LIBRARY my_lib''');
488 });
489 } 470 }
490 471
491 test_path_inConstructor_unnamed() { 472 test_path_inConstructor_unnamed() async {
492 addTestFile(''' 473 addTestFile('''
493 library my_lib; 474 library my_lib;
494 class A {} 475 class A {}
495 class B { 476 class B {
496 B() { 477 B() {
497 A a = null; 478 A a = null;
498 } 479 }
499 } 480 }
500 '''); 481 ''');
501 return findElementReferences('A {}', false).then((_) { 482 await findElementReferences('A {}', false);
502 assertHasResult(SearchResultKind.REFERENCE, 'A a = null;'); 483 assertHasResult(SearchResultKind.REFERENCE, 'A a = null;');
503 expect(getPathString(result.path), ''' 484 expect(getPathString(result.path), '''
504 LOCAL_VARIABLE a 485 LOCAL_VARIABLE a
505 CONSTRUCTOR 486 CONSTRUCTOR
506 CLASS B 487 CLASS B
507 COMPILATION_UNIT test.dart 488 COMPILATION_UNIT test.dart
508 LIBRARY my_lib'''); 489 LIBRARY my_lib''');
509 });
510 } 490 }
511 491
512 test_path_inFunction() { 492 test_path_inFunction() async {
513 addTestFile(''' 493 addTestFile('''
514 library my_lib; 494 library my_lib;
515 class A {} 495 class A {}
516 main() { 496 main() {
517 A a = null; 497 A a = null;
518 } 498 }
519 '''); 499 ''');
520 return findElementReferences('A {}', false).then((_) { 500 await findElementReferences('A {}', false);
521 assertHasResult(SearchResultKind.REFERENCE, 'A a = null;'); 501 assertHasResult(SearchResultKind.REFERENCE, 'A a = null;');
522 expect(getPathString(result.path), ''' 502 expect(getPathString(result.path), '''
523 LOCAL_VARIABLE a 503 LOCAL_VARIABLE a
524 FUNCTION main 504 FUNCTION main
525 COMPILATION_UNIT test.dart 505 COMPILATION_UNIT test.dart
526 LIBRARY my_lib'''); 506 LIBRARY my_lib''');
527 });
528 } 507 }
529 508
530 test_potential_disabled() { 509 test_potential_disabled() async {
531 addTestFile(''' 510 addTestFile('''
532 class A { 511 class A {
533 test(p) {} 512 test(p) {}
534 } 513 }
535 main(A a, p) { 514 main(A a, p) {
536 a.test(1); 515 a.test(1);
537 p.test(2); 516 p.test(2);
538 } 517 }
539 '''); 518 ''');
540 return findElementReferences('test(p) {}', false).then((_) { 519 await findElementReferences('test(p) {}', false);
541 assertHasResult(SearchResultKind.INVOCATION, 'test(1);'); 520 assertHasResult(SearchResultKind.INVOCATION, 'test(1);');
542 assertNoResult(SearchResultKind.INVOCATION, 'test(2);'); 521 assertNoResult(SearchResultKind.INVOCATION, 'test(2);');
543 });
544 } 522 }
545 523
546 test_potential_field() { 524 test_potential_field() async {
547 addTestFile(''' 525 addTestFile('''
548 class A { 526 class A {
549 var test; // declaration 527 var test; // declaration
550 } 528 }
551 main(A a, p) { 529 main(A a, p) {
552 a.test = 1; 530 a.test = 1;
553 p.test = 2; 531 p.test = 2;
554 print(p.test); // p 532 print(p.test); // p
555 } 533 }
556 '''); 534 ''');
557 return findElementReferences('test; // declaration', true).then((_) { 535 await findElementReferences('test; // declaration', true);
558 { 536 {
559 assertHasResult(SearchResultKind.WRITE, 'test = 1;'); 537 assertHasResult(SearchResultKind.WRITE, 'test = 1;');
560 expect(result.isPotential, isFalse); 538 expect(result.isPotential, isFalse);
561 } 539 }
562 { 540 {
563 assertHasResult(SearchResultKind.WRITE, 'test = 2;'); 541 assertHasResult(SearchResultKind.WRITE, 'test = 2;');
564 expect(result.isPotential, isTrue); 542 expect(result.isPotential, isTrue);
565 } 543 }
566 { 544 {
567 assertHasResult(SearchResultKind.READ, 'test); // p'); 545 assertHasResult(SearchResultKind.READ, 'test); // p');
568 expect(result.isPotential, isTrue); 546 expect(result.isPotential, isTrue);
569 } 547 }
570 });
571 } 548 }
572 549
573 test_potential_method() { 550 test_potential_method() async {
574 addTestFile(''' 551 addTestFile('''
575 class A { 552 class A {
576 test(p) {} 553 test(p) {}
577 } 554 }
578 main(A a, p) { 555 main(A a, p) {
579 a.test(1); 556 a.test(1);
580 p.test(2); 557 p.test(2);
581 } 558 }
582 '''); 559 ''');
583 return findElementReferences('test(p) {}', true).then((_) { 560 await findElementReferences('test(p) {}', true);
584 { 561 {
585 assertHasResult(SearchResultKind.INVOCATION, 'test(1);'); 562 assertHasResult(SearchResultKind.INVOCATION, 'test(1);');
586 expect(result.isPotential, isFalse); 563 expect(result.isPotential, isFalse);
587 } 564 }
588 { 565 {
589 assertHasResult(SearchResultKind.INVOCATION, 'test(2);'); 566 assertHasResult(SearchResultKind.INVOCATION, 'test(2);');
590 expect(result.isPotential, isTrue); 567 expect(result.isPotential, isTrue);
591 } 568 }
592 });
593 } 569 }
594 570
595 test_potential_method_definedInSubclass() { 571 test_potential_method_definedInSubclass() async {
596 addTestFile(''' 572 addTestFile('''
597 class Base { 573 class Base {
598 methodInBase() { 574 methodInBase() {
599 test(1); 575 test(1);
600 } 576 }
601 } 577 }
602 class Derived extends Base { 578 class Derived extends Base {
603 test(_) {} // of Derived 579 test(_) {} // of Derived
604 methodInDerived() { 580 methodInDerived() {
605 test(2); 581 test(2);
606 } 582 }
607 } 583 }
608 globalFunction(Base b) { 584 globalFunction(Base b) {
609 b.test(3); 585 b.test(3);
610 } 586 }
611 '''); 587 ''');
612 return findElementReferences('test(_) {} // of Derived', true).then((_) { 588 await findElementReferences('test(_) {} // of Derived', true);
613 assertHasRef(SearchResultKind.INVOCATION, 'test(1);', true); 589 assertHasRef(SearchResultKind.INVOCATION, 'test(1);', true);
614 assertHasRef(SearchResultKind.INVOCATION, 'test(2);', false); 590 assertHasRef(SearchResultKind.INVOCATION, 'test(2);', false);
615 assertHasRef(SearchResultKind.INVOCATION, 'test(3);', true); 591 assertHasRef(SearchResultKind.INVOCATION, 'test(3);', true);
616 });
617 } 592 }
618 593
619 test_prefix() { 594 test_prefix() async {
620 addTestFile(''' 595 addTestFile('''
621 import 'dart:async' as ppp; 596 import 'dart:async' as ppp;
622 main() { 597 main() {
623 ppp.Future a; 598 ppp.Future a;
624 ppp.Stream b; 599 ppp.Stream b;
625 } 600 }
626 '''); 601 ''');
627 return findElementReferences("ppp;", false).then((_) { 602 await findElementReferences("ppp;", false);
628 expect(searchElement.kind, ElementKind.PREFIX); 603 expect(searchElement.kind, ElementKind.PREFIX);
629 expect(searchElement.name, 'ppp'); 604 expect(searchElement.name, 'ppp');
630 expect(searchElement.location.startLine, 1); 605 expect(searchElement.location.startLine, 1);
631 expect(results, hasLength(3)); 606 expect(results, hasLength(3));
632 assertHasResult(SearchResultKind.DECLARATION, 'ppp;'); 607 assertHasResult(SearchResultKind.DECLARATION, 'ppp;');
633 assertHasResult(SearchResultKind.REFERENCE, 'ppp.Future'); 608 assertHasResult(SearchResultKind.REFERENCE, 'ppp.Future');
634 assertHasResult(SearchResultKind.REFERENCE, 'ppp.Stream'); 609 assertHasResult(SearchResultKind.REFERENCE, 'ppp.Stream');
635 });
636 } 610 }
637 611
638 test_prefix_null() { 612 test_prefix_null() async {
639 addTestFile(''' 613 addTestFile('''
640 import 'dart:async'; 614 import 'dart:async';
641 main() { 615 main() {
642 Future a; 616 Future a;
643 Stream b; 617 Stream b;
644 } 618 }
645 '''); 619 ''');
646 return findElementReferences("import ", false).then((_) { 620 await findElementReferences("import ", false);
647 expect(searchElement, isNull); 621 expect(searchElement, isNull);
648 });
649 } 622 }
650 623
651 test_topLevelVariable_explicit() { 624 test_topLevelVariable_explicit() async {
652 addTestFile(''' 625 addTestFile('''
653 var vvv = 1; 626 var vvv = 1;
654 main() { 627 main() {
655 print(vvv); 628 print(vvv);
656 vvv += 3; 629 vvv += 3;
657 vvv = 2; 630 vvv = 2;
658 vvv(); 631 vvv();
659 } 632 }
660 '''); 633 ''');
661 return findElementReferences('vvv = 1', false).then((_) { 634 await findElementReferences('vvv = 1', false);
662 expect(searchElement.kind, ElementKind.TOP_LEVEL_VARIABLE); 635 expect(searchElement.kind, ElementKind.TOP_LEVEL_VARIABLE);
663 expect(results, hasLength(5)); 636 expect(results, hasLength(5));
664 assertHasResult(SearchResultKind.DECLARATION, 'vvv = 1;'); 637 assertHasResult(SearchResultKind.DECLARATION, 'vvv = 1;');
665 assertHasResult(SearchResultKind.READ, 'vvv);'); 638 assertHasResult(SearchResultKind.READ, 'vvv);');
666 assertHasResult(SearchResultKind.WRITE, 'vvv += 3'); 639 assertHasResult(SearchResultKind.WRITE, 'vvv += 3');
667 assertHasResult(SearchResultKind.WRITE, 'vvv = 2'); 640 assertHasResult(SearchResultKind.WRITE, 'vvv = 2');
668 assertHasResult(SearchResultKind.INVOCATION, 'vvv();'); 641 assertHasResult(SearchResultKind.INVOCATION, 'vvv();');
669 });
670 } 642 }
671 643
672 test_topLevelVariable_implicit() { 644 test_topLevelVariable_implicit() async {
673 addTestFile(''' 645 addTestFile('''
674 get vvv => null; 646 get vvv => null;
675 set vvv(x) {} 647 set vvv(x) {}
676 main() { 648 main() {
677 print(vvv); 649 print(vvv);
678 vvv = 1; 650 vvv = 1;
679 } 651 }
680 '''); 652 ''');
681 return findElementReferences('vvv =>', false).then((_) { 653 {
654 await findElementReferences('vvv =>', false);
682 expect(searchElement.kind, ElementKind.TOP_LEVEL_VARIABLE); 655 expect(searchElement.kind, ElementKind.TOP_LEVEL_VARIABLE);
683 expect(results, hasLength(2)); 656 expect(results, hasLength(2));
684 assertHasResult(SearchResultKind.READ, 'vvv);'); 657 assertHasResult(SearchResultKind.READ, 'vvv);');
685 assertHasResult(SearchResultKind.WRITE, 'vvv = 1;'); 658 assertHasResult(SearchResultKind.WRITE, 'vvv = 1;');
686 return findElementReferences('vvv(x) {}', false); 659 }
687 }).then((_) { 660 {
661 await findElementReferences('vvv(x) {}', false);
688 expect(results, hasLength(2)); 662 expect(results, hasLength(2));
689 assertHasResult(SearchResultKind.READ, 'vvv);'); 663 assertHasResult(SearchResultKind.READ, 'vvv);');
690 assertHasResult(SearchResultKind.WRITE, 'vvv = 1;'); 664 assertHasResult(SearchResultKind.WRITE, 'vvv = 1;');
691 }); 665 }
692 } 666 }
693 667
694 test_typeReference_class() { 668 test_typeReference_class() async {
695 addTestFile(''' 669 addTestFile('''
696 main() { 670 main() {
697 int a = 1; 671 int a = 1;
698 int b = 2; 672 int b = 2;
699 } 673 }
700 '''); 674 ''');
701 return findElementReferences('int a', false).then((_) { 675 await findElementReferences('int a', false);
702 expect(searchElement.kind, ElementKind.CLASS); 676 expect(searchElement.kind, ElementKind.CLASS);
703 assertHasResult(SearchResultKind.REFERENCE, 'int a'); 677 assertHasResult(SearchResultKind.REFERENCE, 'int a');
704 assertHasResult(SearchResultKind.REFERENCE, 'int b'); 678 assertHasResult(SearchResultKind.REFERENCE, 'int b');
705 });
706 } 679 }
707 680
708 test_typeReference_functionType() { 681 test_typeReference_functionType() async {
709 addTestFile(''' 682 addTestFile('''
710 typedef F(); 683 typedef F();
711 main(F f) { 684 main(F f) {
712 } 685 }
713 '''); 686 ''');
714 return findElementReferences('F()', false).then((_) { 687 await findElementReferences('F()', false);
715 expect(searchElement.kind, ElementKind.FUNCTION_TYPE_ALIAS); 688 expect(searchElement.kind, ElementKind.FUNCTION_TYPE_ALIAS);
716 expect(results, hasLength(1)); 689 expect(results, hasLength(1));
717 assertHasResult(SearchResultKind.REFERENCE, 'F f'); 690 assertHasResult(SearchResultKind.REFERENCE, 'F f');
718 });
719 } 691 }
720 692
721 test_typeReference_typeVariable() { 693 test_typeReference_typeVariable() async {
722 addTestFile(''' 694 addTestFile('''
723 class A<T> { 695 class A<T> {
724 T f; 696 T f;
725 T m() => null; 697 T m() => null;
726 } 698 }
727 '''); 699 ''');
728 return findElementReferences('T> {', false).then((_) { 700 await findElementReferences('T> {', false);
729 expect(searchElement.kind, ElementKind.TYPE_PARAMETER); 701 expect(searchElement.kind, ElementKind.TYPE_PARAMETER);
730 expect(results, hasLength(2)); 702 expect(results, hasLength(2));
731 assertHasResult(SearchResultKind.REFERENCE, 'T f;'); 703 assertHasResult(SearchResultKind.REFERENCE, 'T f;');
732 assertHasResult(SearchResultKind.REFERENCE, 'T m()'); 704 assertHasResult(SearchResultKind.REFERENCE, 'T m()');
733 });
734 } 705 }
735 } 706 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698