| 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.completion.toplevel; | 5 library test.services.completion.toplevel; |
| 6 | 6 |
| 7 import 'package:analysis_server/src/protocol.dart'; | 7 import 'package:analysis_server/src/protocol.dart'; |
| 8 import 'package:analysis_server/src/services/completion/completion_manager.dart'
; | 8 import 'package:analysis_server/src/services/completion/completion_manager.dart'
; |
| 9 import 'package:analysis_server/src/services/completion/dart_completion_cache.da
rt'; | 9 import 'package:analysis_server/src/services/completion/dart_completion_cache.da
rt'; |
| 10 import 'package:analysis_server/src/services/completion/dart_completion_manager.
dart'; | 10 import 'package:analysis_server/src/services/completion/dart_completion_manager.
dart'; |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 100 if (isCached(cache.importedTypeSuggestions, completion) || | 100 if (isCached(cache.importedTypeSuggestions, completion) || |
| 101 isCached(cache.importedVoidReturnSuggestions, completion) || | 101 isCached(cache.importedVoidReturnSuggestions, completion) || |
| 102 isCached(cache.libraryPrefixSuggestions, completion) || | 102 isCached(cache.libraryPrefixSuggestions, completion) || |
| 103 isCached(cache.otherImportedSuggestions, completion)) { | 103 isCached(cache.otherImportedSuggestions, completion)) { |
| 104 fail('expected $completion NOT to be cached'); | 104 fail('expected $completion NOT to be cached'); |
| 105 } | 105 } |
| 106 } | 106 } |
| 107 | 107 |
| 108 @override | 108 @override |
| 109 CompletionSuggestion assertSuggestImportedField(String name, String type, | 109 CompletionSuggestion assertSuggestImportedField(String name, String type, |
| 110 [int relevance = COMPLETION_RELEVANCE_DEFAULT]) { | 110 {int relevance: DART_RELEVANCE_INHERITED_FIELD}) { |
| 111 return assertSuggestField(name, type, relevance: relevance); | 111 return assertSuggestField(name, type, relevance: relevance); |
| 112 } | 112 } |
| 113 | 113 |
| 114 CompletionSuggestion assertSuggestImportedGetter(String name, |
| 115 String returnType, {int relevance: DART_RELEVANCE_INHERITED_ACCESSOR}) { |
| 116 return assertSuggestGetter(name, returnType, relevance: relevance); |
| 117 } |
| 118 |
| 119 CompletionSuggestion assertSuggestImportedMethod(String name, |
| 120 String declaringType, String returnType, {int relevance: |
| 121 DART_RELEVANCE_INHERITED_METHOD}) { |
| 122 return assertSuggestMethod( |
| 123 name, |
| 124 declaringType, |
| 125 returnType, |
| 126 relevance: relevance); |
| 127 } |
| 128 |
| 129 CompletionSuggestion assertSuggestImportedSetter(String name, {int relevance: |
| 130 DART_RELEVANCE_INHERITED_ACCESSOR}) { |
| 131 return assertSuggestSetter(name, relevance); |
| 132 } |
| 133 |
| 114 bool isCached(List<CompletionSuggestion> suggestions, String completion) => | 134 bool isCached(List<CompletionSuggestion> suggestions, String completion) => |
| 115 suggestions.any((CompletionSuggestion s) => s.completion == completion); | 135 suggestions.any((CompletionSuggestion s) => s.completion == completion); |
| 116 | 136 |
| 117 @override | 137 @override |
| 118 void setUpComputer() { | 138 void setUpComputer() { |
| 119 computer = new ImportedComputer(shouldWaitForLowPrioritySuggestions: true); | 139 computer = new ImportedComputer(shouldWaitForLowPrioritySuggestions: true); |
| 120 } | 140 } |
| 121 | 141 |
| 122 @override | 142 @override |
| 123 test_ArgumentList() { | 143 test_ArgumentList() { |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 342 void m(x, {int y}) {} | 362 void m(x, {int y}) {} |
| 343 } | 363 } |
| 344 '''); | 364 '''); |
| 345 addTestSource(''' | 365 addTestSource(''' |
| 346 import '/libA.dart'; | 366 import '/libA.dart'; |
| 347 class B extends A { | 367 class B extends A { |
| 348 main() {^} | 368 main() {^} |
| 349 } | 369 } |
| 350 '''); | 370 '''); |
| 351 return computeFull((bool result) { | 371 return computeFull((bool result) { |
| 352 CompletionSuggestion suggestion = assertSuggestMethod('m', 'A', 'void'); | 372 CompletionSuggestion suggestion = |
| 373 assertSuggestImportedMethod('m', 'A', 'void'); |
| 353 expect(suggestion.parameterNames, hasLength(2)); | 374 expect(suggestion.parameterNames, hasLength(2)); |
| 354 expect(suggestion.parameterNames[0], 'x'); | 375 expect(suggestion.parameterNames[0], 'x'); |
| 355 expect(suggestion.parameterTypes[0], 'dynamic'); | 376 expect(suggestion.parameterTypes[0], 'dynamic'); |
| 356 expect(suggestion.parameterNames[1], 'y'); | 377 expect(suggestion.parameterNames[1], 'y'); |
| 357 expect(suggestion.parameterTypes[1], 'int'); | 378 expect(suggestion.parameterTypes[1], 'int'); |
| 358 expect(suggestion.requiredParameterCount, 1); | 379 expect(suggestion.requiredParameterCount, 1); |
| 359 expect(suggestion.hasNamedParameters, true); | 380 expect(suggestion.hasNamedParameters, true); |
| 360 }); | 381 }); |
| 361 } | 382 } |
| 362 | 383 |
| 363 test_method_parameters_mixed_required_and_positional() { | 384 test_method_parameters_mixed_required_and_positional() { |
| 364 addSource('/libA.dart', ''' | 385 addSource('/libA.dart', ''' |
| 365 class A { | 386 class A { |
| 366 void m(x, [int y]) {} | 387 void m(x, [int y]) {} |
| 367 } | 388 } |
| 368 '''); | 389 '''); |
| 369 addTestSource(''' | 390 addTestSource(''' |
| 370 import '/libA.dart'; | 391 import '/libA.dart'; |
| 371 class B extends A { | 392 class B extends A { |
| 372 main() {^} | 393 main() {^} |
| 373 } | 394 } |
| 374 '''); | 395 '''); |
| 375 return computeFull((bool result) { | 396 return computeFull((bool result) { |
| 376 CompletionSuggestion suggestion = assertSuggestMethod('m', 'A', 'void'); | 397 CompletionSuggestion suggestion = |
| 398 assertSuggestImportedMethod('m', 'A', 'void'); |
| 377 expect(suggestion.parameterNames, hasLength(2)); | 399 expect(suggestion.parameterNames, hasLength(2)); |
| 378 expect(suggestion.parameterNames[0], 'x'); | 400 expect(suggestion.parameterNames[0], 'x'); |
| 379 expect(suggestion.parameterTypes[0], 'dynamic'); | 401 expect(suggestion.parameterTypes[0], 'dynamic'); |
| 380 expect(suggestion.parameterNames[1], 'y'); | 402 expect(suggestion.parameterNames[1], 'y'); |
| 381 expect(suggestion.parameterTypes[1], 'int'); | 403 expect(suggestion.parameterTypes[1], 'int'); |
| 382 expect(suggestion.requiredParameterCount, 1); | 404 expect(suggestion.requiredParameterCount, 1); |
| 383 expect(suggestion.hasNamedParameters, false); | 405 expect(suggestion.hasNamedParameters, false); |
| 384 }); | 406 }); |
| 385 } | 407 } |
| 386 | 408 |
| 387 test_method_parameters_named() { | 409 test_method_parameters_named() { |
| 388 addSource('/libA.dart', ''' | 410 addSource('/libA.dart', ''' |
| 389 class A { | 411 class A { |
| 390 void m({x, int y}) {} | 412 void m({x, int y}) {} |
| 391 } | 413 } |
| 392 '''); | 414 '''); |
| 393 addTestSource(''' | 415 addTestSource(''' |
| 394 import '/libA.dart'; | 416 import '/libA.dart'; |
| 395 class B extends A { | 417 class B extends A { |
| 396 main() {^} | 418 main() {^} |
| 397 } | 419 } |
| 398 '''); | 420 '''); |
| 399 return computeFull((bool result) { | 421 return computeFull((bool result) { |
| 400 CompletionSuggestion suggestion = assertSuggestMethod('m', 'A', 'void'); | 422 CompletionSuggestion suggestion = |
| 423 assertSuggestImportedMethod('m', 'A', 'void'); |
| 401 expect(suggestion.parameterNames, hasLength(2)); | 424 expect(suggestion.parameterNames, hasLength(2)); |
| 402 expect(suggestion.parameterNames[0], 'x'); | 425 expect(suggestion.parameterNames[0], 'x'); |
| 403 expect(suggestion.parameterTypes[0], 'dynamic'); | 426 expect(suggestion.parameterTypes[0], 'dynamic'); |
| 404 expect(suggestion.parameterNames[1], 'y'); | 427 expect(suggestion.parameterNames[1], 'y'); |
| 405 expect(suggestion.parameterTypes[1], 'int'); | 428 expect(suggestion.parameterTypes[1], 'int'); |
| 406 expect(suggestion.requiredParameterCount, 0); | 429 expect(suggestion.requiredParameterCount, 0); |
| 407 expect(suggestion.hasNamedParameters, true); | 430 expect(suggestion.hasNamedParameters, true); |
| 408 }); | 431 }); |
| 409 } | 432 } |
| 410 | 433 |
| 411 test_method_parameters_none() { | 434 test_method_parameters_none() { |
| 412 addSource('/libA.dart', ''' | 435 addSource('/libA.dart', ''' |
| 413 class A { | 436 class A { |
| 414 void m() {} | 437 void m() {} |
| 415 } | 438 } |
| 416 '''); | 439 '''); |
| 417 addTestSource(''' | 440 addTestSource(''' |
| 418 import '/libA.dart'; | 441 import '/libA.dart'; |
| 419 class B extends A { | 442 class B extends A { |
| 420 main() {^} | 443 main() {^} |
| 421 } | 444 } |
| 422 '''); | 445 '''); |
| 423 computeFast(); | 446 computeFast(); |
| 424 return computeFull((bool result) { | 447 return computeFull((bool result) { |
| 425 CompletionSuggestion suggestion = assertSuggestMethod('m', 'A', 'void'); | 448 CompletionSuggestion suggestion = |
| 449 assertSuggestImportedMethod('m', 'A', 'void'); |
| 426 expect(suggestion.parameterNames, isEmpty); | 450 expect(suggestion.parameterNames, isEmpty); |
| 427 expect(suggestion.parameterTypes, isEmpty); | 451 expect(suggestion.parameterTypes, isEmpty); |
| 428 expect(suggestion.requiredParameterCount, 0); | 452 expect(suggestion.requiredParameterCount, 0); |
| 429 expect(suggestion.hasNamedParameters, false); | 453 expect(suggestion.hasNamedParameters, false); |
| 430 }); | 454 }); |
| 431 } | 455 } |
| 432 | 456 |
| 433 test_method_parameters_positional() { | 457 test_method_parameters_positional() { |
| 434 addSource('/libA.dart', ''' | 458 addSource('/libA.dart', ''' |
| 435 class A { | 459 class A { |
| 436 void m([x, int y]) {} | 460 void m([x, int y]) {} |
| 437 } | 461 } |
| 438 '''); | 462 '''); |
| 439 addTestSource(''' | 463 addTestSource(''' |
| 440 import '/libA.dart'; | 464 import '/libA.dart'; |
| 441 class B extends A { | 465 class B extends A { |
| 442 main() {^} | 466 main() {^} |
| 443 } | 467 } |
| 444 '''); | 468 '''); |
| 445 return computeFull((bool result) { | 469 return computeFull((bool result) { |
| 446 CompletionSuggestion suggestion = assertSuggestMethod('m', 'A', 'void'); | 470 CompletionSuggestion suggestion = |
| 471 assertSuggestImportedMethod('m', 'A', 'void'); |
| 447 expect(suggestion.parameterNames, hasLength(2)); | 472 expect(suggestion.parameterNames, hasLength(2)); |
| 448 expect(suggestion.parameterNames[0], 'x'); | 473 expect(suggestion.parameterNames[0], 'x'); |
| 449 expect(suggestion.parameterTypes[0], 'dynamic'); | 474 expect(suggestion.parameterTypes[0], 'dynamic'); |
| 450 expect(suggestion.parameterNames[1], 'y'); | 475 expect(suggestion.parameterNames[1], 'y'); |
| 451 expect(suggestion.parameterTypes[1], 'int'); | 476 expect(suggestion.parameterTypes[1], 'int'); |
| 452 expect(suggestion.requiredParameterCount, 0); | 477 expect(suggestion.requiredParameterCount, 0); |
| 453 expect(suggestion.hasNamedParameters, false); | 478 expect(suggestion.hasNamedParameters, false); |
| 454 }); | 479 }); |
| 455 } | 480 } |
| 456 | 481 |
| 457 test_method_parameters_required() { | 482 test_method_parameters_required() { |
| 458 addSource('/libA.dart', ''' | 483 addSource('/libA.dart', ''' |
| 459 class A { | 484 class A { |
| 460 void m(x, int y) {} | 485 void m(x, int y) {} |
| 461 } | 486 } |
| 462 '''); | 487 '''); |
| 463 addTestSource(''' | 488 addTestSource(''' |
| 464 import '/libA.dart'; | 489 import '/libA.dart'; |
| 465 class B extends A { | 490 class B extends A { |
| 466 main() {^} | 491 main() {^} |
| 467 } | 492 } |
| 468 '''); | 493 '''); |
| 469 return computeFull((bool result) { | 494 return computeFull((bool result) { |
| 470 CompletionSuggestion suggestion = assertSuggestMethod('m', 'A', 'void'); | 495 CompletionSuggestion suggestion = |
| 496 assertSuggestImportedMethod('m', 'A', 'void'); |
| 471 expect(suggestion.parameterNames, hasLength(2)); | 497 expect(suggestion.parameterNames, hasLength(2)); |
| 472 expect(suggestion.parameterNames[0], 'x'); | 498 expect(suggestion.parameterNames[0], 'x'); |
| 473 expect(suggestion.parameterTypes[0], 'dynamic'); | 499 expect(suggestion.parameterTypes[0], 'dynamic'); |
| 474 expect(suggestion.parameterNames[1], 'y'); | 500 expect(suggestion.parameterNames[1], 'y'); |
| 475 expect(suggestion.parameterTypes[1], 'int'); | 501 expect(suggestion.parameterTypes[1], 'int'); |
| 476 expect(suggestion.requiredParameterCount, 2); | 502 expect(suggestion.requiredParameterCount, 2); |
| 477 expect(suggestion.hasNamedParameters, false); | 503 expect(suggestion.hasNamedParameters, false); |
| 478 }); | 504 }); |
| 479 } | 505 } |
| 480 | 506 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 493 '''); | 519 '''); |
| 494 addTestSource(''' | 520 addTestSource(''' |
| 495 import '/libA.dart'; | 521 import '/libA.dart'; |
| 496 class C extends B with M1, M2 { | 522 class C extends B with M1, M2 { |
| 497 void f() { | 523 void f() { |
| 498 ^ | 524 ^ |
| 499 } | 525 } |
| 500 } | 526 } |
| 501 '''); | 527 '''); |
| 502 return computeFull((bool result) { | 528 return computeFull((bool result) { |
| 503 assertSuggestMethod('m', 'M2', 'void'); | 529 assertSuggestImportedMethod('m', 'M2', 'void'); |
| 504 }); | 530 }); |
| 505 } | 531 } |
| 506 | 532 |
| 507 /** | 533 /** |
| 508 * Ensure that completions in one context don't appear in another | 534 * Ensure that completions in one context don't appear in another |
| 509 */ | 535 */ |
| 510 test_multiple_contexts() { | 536 test_multiple_contexts() { |
| 511 | 537 |
| 512 // Create a 2nd context with source | 538 // Create a 2nd context with source |
| 513 var context2 = AnalysisEngine.instance.createAnalysisContext(); | 539 var context2 = AnalysisEngine.instance.createAnalysisContext(); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 557 int x; | 583 int x; |
| 558 } | 584 } |
| 559 '''); | 585 '''); |
| 560 addTestSource(''' | 586 addTestSource(''' |
| 561 import '/libA.dart'; | 587 import '/libA.dart'; |
| 562 class B extends A { | 588 class B extends A { |
| 563 main() {^} | 589 main() {^} |
| 564 } | 590 } |
| 565 '''); | 591 '''); |
| 566 return computeFull((bool result) { | 592 return computeFull((bool result) { |
| 567 CompletionSuggestion suggestion = assertSuggestField('x', 'int'); | 593 CompletionSuggestion suggestion = assertSuggestImportedField('x', 'int'); |
| 568 assertHasNoParameterInfo(suggestion); | 594 assertHasNoParameterInfo(suggestion); |
| 569 }); | 595 }); |
| 570 } | 596 } |
| 571 | 597 |
| 572 test_no_parameters_getter() { | 598 test_no_parameters_getter() { |
| 573 addSource('/libA.dart', ''' | 599 addSource('/libA.dart', ''' |
| 574 class A { | 600 class A { |
| 575 int get x => null; | 601 int get x => null; |
| 576 } | 602 } |
| 577 '''); | 603 '''); |
| 578 addTestSource(''' | 604 addTestSource(''' |
| 579 import '/libA.dart'; | 605 import '/libA.dart'; |
| 580 class B extends A { | 606 class B extends A { |
| 581 main() {^} | 607 main() {^} |
| 582 } | 608 } |
| 583 '''); | 609 '''); |
| 584 return computeFull((bool result) { | 610 return computeFull((bool result) { |
| 585 CompletionSuggestion suggestion = assertSuggestGetter('x', 'int'); | 611 CompletionSuggestion suggestion = assertSuggestImportedGetter('x', 'int'); |
| 586 assertHasNoParameterInfo(suggestion); | 612 assertHasNoParameterInfo(suggestion); |
| 587 }); | 613 }); |
| 588 } | 614 } |
| 589 | 615 |
| 590 test_no_parameters_setter() { | 616 test_no_parameters_setter() { |
| 591 addSource('/libA.dart', ''' | 617 addSource('/libA.dart', ''' |
| 592 class A { | 618 class A { |
| 593 set x(int value) {}; | 619 set x(int value) {}; |
| 594 } | 620 } |
| 595 '''); | 621 '''); |
| 596 addTestSource(''' | 622 addTestSource(''' |
| 597 import '/libA.dart'; | 623 import '/libA.dart'; |
| 598 class B extends A { | 624 class B extends A { |
| 599 main() {^} | 625 main() {^} |
| 600 } | 626 } |
| 601 '''); | 627 '''); |
| 602 return computeFull((bool result) { | 628 return computeFull((bool result) { |
| 603 CompletionSuggestion suggestion = assertSuggestSetter('x'); | 629 CompletionSuggestion suggestion = assertSuggestImportedSetter('x'); |
| 604 assertHasNoParameterInfo(suggestion); | 630 assertHasNoParameterInfo(suggestion); |
| 605 }); | 631 }); |
| 606 } | 632 } |
| 607 | 633 |
| 608 @override | 634 @override |
| 609 test_partFile_TypeName() { | 635 test_partFile_TypeName() { |
| 610 return super.test_partFile_TypeName().then((_) { | 636 return super.test_partFile_TypeName().then((_) { |
| 611 expect(request.cache.importKey, 'part of libA;'); | 637 expect(request.cache.importKey, 'part of libA;'); |
| 612 }); | 638 }); |
| 613 } | 639 } |
| 614 | 640 |
| 615 @override | 641 @override |
| 616 test_partFile_TypeName2() { | 642 test_partFile_TypeName2() { |
| 617 return super.test_partFile_TypeName2().then((_) { | 643 return super.test_partFile_TypeName2().then((_) { |
| 618 expect( | 644 expect( |
| 619 request.cache.importKey, | 645 request.cache.importKey, |
| 620 'library libA;import "/testB.dart";part "/testA.dart";'); | 646 'library libA;import "/testB.dart";part "/testA.dart";'); |
| 621 }); | 647 }); |
| 622 } | 648 } |
| 623 } | 649 } |
| OLD | NEW |