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.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 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
237 } | 237 } |
238 '''); | 238 '''); |
239 return findElementReferences('fff(p) {}', false).then((_) { | 239 return findElementReferences('fff(p) {}', false).then((_) { |
240 expect(searchElement.kind, ElementKind.FUNCTION); | 240 expect(searchElement.kind, ElementKind.FUNCTION); |
241 expect(results, hasLength(2)); | 241 expect(results, hasLength(2)); |
242 assertHasResult(SearchResultKind.INVOCATION, 'fff(1)'); | 242 assertHasResult(SearchResultKind.INVOCATION, 'fff(1)'); |
243 assertHasResult(SearchResultKind.REFERENCE, 'fff);'); | 243 assertHasResult(SearchResultKind.REFERENCE, 'fff);'); |
244 }); | 244 }); |
245 } | 245 } |
246 | 246 |
247 test_hierarchy_field_explicit() { | 247 test_hierarchy_whenExtends_field() { |
248 addTestFile(''' | 248 addTestFile(''' |
249 class A { | 249 class A { |
250 int fff; // in A | 250 int mmm; |
251 use_mmm_a() { | |
252 mmm = 1; | |
253 } | |
251 } | 254 } |
252 class B extends A { | 255 class B extends A { |
253 int fff; // in B | 256 int mmm; |
257 use_mmm_b() { | |
258 mmm = 2; | |
259 } | |
254 } | 260 } |
255 class C extends B { | 261 class C extends B { |
256 int fff; // in C | 262 int mmm; // of C |
263 use_mmm_c() { | |
264 mmm = 3; | |
265 } | |
257 } | 266 } |
258 main(A a, B b, C c) { | 267 class D extends A { |
259 a.fff = 10; | 268 int mmm; |
260 b.fff = 20; | 269 use_mmm_d() { |
261 c.fff = 30; | 270 mmm = 4; |
271 } | |
272 } | |
273 class E extends C { | |
274 use_mmm_e() { | |
275 mmm = 5; | |
276 } | |
277 } | |
278 class F extends C { | |
279 int mmm; | |
280 use_mmm_f() { | |
281 mmm = 6; | |
282 mmm(6); | |
283 } | |
284 } | |
285 main(A a, B b, C c, D d, E e, F f) { | |
286 a.mmm = 10; | |
287 b.mmm = 20; | |
288 c.mmm = 30; | |
289 d.mmm = 40; | |
290 e.mmm = 50; | |
291 f.mmm = 60; | |
262 } | 292 } |
263 '''); | 293 '''); |
264 return findElementReferences('fff; // in B', false).then((_) { | 294 return findElementReferences('mmm; // of C', false).then((_) { |
265 expect(searchElement.kind, ElementKind.FIELD); | 295 expect(searchElement.kind, ElementKind.FIELD); |
266 assertHasResult(SearchResultKind.DECLARATION, 'fff; // in A'); | 296 // unqualified |
267 assertHasResult(SearchResultKind.DECLARATION, 'fff; // in B'); | 297 { |
268 assertHasResult(SearchResultKind.DECLARATION, 'fff; // in C'); | 298 assertHasResult(SearchResultKind.WRITE, 'mmm = 1'); |
269 assertHasResult(SearchResultKind.WRITE, 'fff = 10;'); | 299 assertHasResult(SearchResultKind.WRITE, 'mmm = 2'); |
270 assertHasResult(SearchResultKind.WRITE, 'fff = 20;'); | 300 assertHasResult(SearchResultKind.WRITE, 'mmm = 3'); |
271 assertHasResult(SearchResultKind.WRITE, 'fff = 30;'); | 301 assertNoResult(SearchResultKind.WRITE, 'mmm = 4'); |
302 assertHasResult(SearchResultKind.WRITE, 'mmm = 5'); | |
303 assertNoResult(SearchResultKind.WRITE, 'mmm = 6'); | |
304 } | |
305 // qualified | |
306 { | |
307 assertHasResult(SearchResultKind.WRITE, 'mmm = 10'); | |
308 assertHasResult(SearchResultKind.WRITE, 'mmm = 20'); | |
309 assertHasResult(SearchResultKind.WRITE, 'mmm = 30'); | |
310 assertNoResult(SearchResultKind.WRITE, 'mmm = 40'); | |
311 assertHasResult(SearchResultKind.WRITE, 'mmm = 50'); | |
312 assertNoResult(SearchResultKind.WRITE, 'mmm = 60'); | |
313 } | |
272 }); | 314 }); |
273 } | 315 } |
274 | 316 |
275 test_hierarchy_method() { | 317 test_hierarchy_whenExtends_method() { |
318 // TODO(scheglov) ideally we need to remove D.mmm() declaration | |
319 // to actually we fixed | |
320 // test that https://code.google.com/p/dart/issues/detail?id=19697 | |
Paul Berry
2014/09/15 21:55:39
I'm having trouble understanding this comment. It
| |
276 addTestFile(''' | 321 addTestFile(''' |
277 class A { | 322 class A { |
278 mmm() {} // in A | 323 mmm(_) {} |
324 use_mmm_a() { | |
325 mmm(1); | |
326 } | |
279 } | 327 } |
280 class B extends A { | 328 class B extends A { |
281 mmm() {} // in B | 329 mmm(_) {} |
330 use_mmm_b() { | |
331 mmm(2); | |
332 } | |
282 } | 333 } |
283 class C extends B { | 334 class C extends B { |
284 mmm() {} // in C | 335 mmm(_) {} // of C |
336 use_mmm_c() { | |
337 mmm(3); | |
338 } | |
285 } | 339 } |
286 main(A a, B b, C c) { | 340 class D extends A { |
341 mmm(_) {} | |
342 use_mmm_d() { | |
343 mmm(4); | |
344 } | |
345 } | |
346 class E extends C { | |
347 use_mmm_e() { | |
348 mmm(5); | |
349 } | |
350 } | |
351 class F extends C { | |
352 mmm(_) {} | |
353 use_mmm_f() { | |
354 mmm(6); | |
355 } | |
356 } | |
357 main(A a, B b, C c, D d, E e, F f) { | |
287 a.mmm(10); | 358 a.mmm(10); |
288 b.mmm(20); | 359 b.mmm(20); |
289 c.mmm(30); | 360 c.mmm(30); |
361 d.mmm(40); | |
362 e.mmm(50); | |
363 f.mmm(60); | |
290 } | 364 } |
291 '''); | 365 '''); |
292 return findElementReferences('mmm() {} // in B', false).then((_) { | 366 return findElementReferences('mmm(_) {} // of C', false).then((_) { |
293 expect(searchElement.kind, ElementKind.METHOD); | 367 expect(searchElement.kind, ElementKind.METHOD); |
294 assertHasResult(SearchResultKind.INVOCATION, 'mmm(10)'); | 368 // unqualified |
295 assertHasResult(SearchResultKind.INVOCATION, 'mmm(20)'); | 369 { |
296 assertHasResult(SearchResultKind.INVOCATION, 'mmm(30)'); | 370 assertHasResult(SearchResultKind.INVOCATION, 'mmm(1)'); |
371 assertHasResult(SearchResultKind.INVOCATION, 'mmm(2)'); | |
372 assertHasResult(SearchResultKind.INVOCATION, 'mmm(3)'); | |
373 assertNoResult(SearchResultKind.INVOCATION, 'mmm(4)'); | |
374 assertHasResult(SearchResultKind.INVOCATION, 'mmm(5)'); | |
375 assertNoResult(SearchResultKind.INVOCATION, 'mmm(6)'); | |
376 } | |
377 // qualified | |
378 { | |
379 assertHasResult(SearchResultKind.INVOCATION, 'mmm(10)'); | |
380 assertHasResult(SearchResultKind.INVOCATION, 'mmm(20)'); | |
381 assertHasResult(SearchResultKind.INVOCATION, 'mmm(30)'); | |
382 assertNoResult(SearchResultKind.INVOCATION, 'mmm(40)'); | |
383 assertHasResult(SearchResultKind.INVOCATION, 'mmm(50)'); | |
384 assertNoResult(SearchResultKind.INVOCATION, 'mmm(60)'); | |
385 } | |
297 }); | 386 }); |
298 } | 387 } |
299 | 388 |
300 test_label() { | 389 test_label() { |
301 addTestFile(''' | 390 addTestFile(''' |
302 main() { | 391 main() { |
303 myLabel: | 392 myLabel: |
304 for (int i = 0; i < 10; i++) { | 393 for (int i = 0; i < 10; i++) { |
305 if (i == 2) { | 394 if (i == 2) { |
306 continue myLabel; // continue | 395 continue myLabel; // continue |
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
695 } | 784 } |
696 '''); | 785 '''); |
697 return findElementReferences('T> {', false).then((_) { | 786 return findElementReferences('T> {', false).then((_) { |
698 expect(searchElement.kind, ElementKind.TYPE_PARAMETER); | 787 expect(searchElement.kind, ElementKind.TYPE_PARAMETER); |
699 expect(results, hasLength(2)); | 788 expect(results, hasLength(2)); |
700 assertHasResult(SearchResultKind.REFERENCE, 'T f;'); | 789 assertHasResult(SearchResultKind.REFERENCE, 'T f;'); |
701 assertHasResult(SearchResultKind.REFERENCE, 'T m()'); | 790 assertHasResult(SearchResultKind.REFERENCE, 'T m()'); |
702 }); | 791 }); |
703 } | 792 } |
704 } | 793 } |
OLD | NEW |