| 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.domain.completion; | 5 library test.domain.completion; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 | 8 |
| 9 import 'package:analysis_server/plugin/protocol/protocol.dart'; | 9 import 'package:analysis_server/plugin/protocol/protocol.dart'; |
| 10 import 'package:analysis_server/src/analysis_server.dart'; | 10 import 'package:analysis_server/src/analysis_server.dart'; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 import 'package:analysis_server/src/services/completion/dart_completion_manager.
dart'; | 23 import 'package:analysis_server/src/services/completion/dart_completion_manager.
dart'; |
| 24 import 'package:analysis_server/src/services/index/index.dart' show Index; | 24 import 'package:analysis_server/src/services/index/index.dart' show Index; |
| 25 import 'package:analysis_server/src/services/index/local_memory_index.dart'; | 25 import 'package:analysis_server/src/services/index/local_memory_index.dart'; |
| 26 import 'package:analysis_server/src/services/search/search_engine.dart'; | 26 import 'package:analysis_server/src/services/search/search_engine.dart'; |
| 27 import 'package:analyzer/file_system/file_system.dart'; | 27 import 'package:analyzer/file_system/file_system.dart'; |
| 28 import 'package:analyzer/instrumentation/instrumentation.dart'; | 28 import 'package:analyzer/instrumentation/instrumentation.dart'; |
| 29 import 'package:analyzer/source/pub_package_map_provider.dart'; | 29 import 'package:analyzer/source/pub_package_map_provider.dart'; |
| 30 import 'package:analyzer/src/generated/engine.dart'; | 30 import 'package:analyzer/src/generated/engine.dart'; |
| 31 import 'package:analyzer/src/generated/sdk.dart'; | 31 import 'package:analyzer/src/generated/sdk.dart'; |
| 32 import 'package:analyzer/src/generated/source.dart'; | 32 import 'package:analyzer/src/generated/source.dart'; |
| 33 import 'package:analyzer/src/task/dart.dart'; |
| 34 import 'package:analyzer/task/dart.dart'; |
| 35 import 'package:analyzer/task/model.dart'; |
| 33 import 'package:plugin/manager.dart'; | 36 import 'package:plugin/manager.dart'; |
| 34 import 'package:test_reflective_loader/test_reflective_loader.dart'; | 37 import 'package:test_reflective_loader/test_reflective_loader.dart'; |
| 35 import 'package:unittest/unittest.dart'; | 38 import 'package:unittest/unittest.dart'; |
| 36 | 39 |
| 37 import 'analysis_abstract.dart'; | 40 import 'analysis_abstract.dart'; |
| 38 import 'mock_sdk.dart'; | 41 import 'mock_sdk.dart'; |
| 39 import 'mocks.dart'; | 42 import 'mocks.dart'; |
| 40 import 'utils.dart'; | 43 import 'utils.dart'; |
| 41 | 44 |
| 42 main() { | 45 main() { |
| (...skipping 567 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 610 return getSuggestions().then((_) { | 613 return getSuggestions().then((_) { |
| 611 expect(replacementOffset, equals(completionOffset)); | 614 expect(replacementOffset, equals(completionOffset)); |
| 612 expect(replacementLength, equals(0)); | 615 expect(replacementLength, equals(0)); |
| 613 assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object'); | 616 assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object'); |
| 614 assertHasResult(CompletionSuggestionKind.INVOCATION, 'HtmlElement'); | 617 assertHasResult(CompletionSuggestionKind.INVOCATION, 'HtmlElement'); |
| 615 assertHasResult(CompletionSuggestionKind.INVOCATION, 'A'); | 618 assertHasResult(CompletionSuggestionKind.INVOCATION, 'A'); |
| 616 assertNoResult('test'); | 619 assertNoResult('test'); |
| 617 }); | 620 }); |
| 618 } | 621 } |
| 619 | 622 |
| 623 test_relevancy_sorter_analysis() { |
| 624 var originalSorter = DartCompletionManager.defaultContributionSorter; |
| 625 |
| 626 // Setup the mock sorter to request additional analysis |
| 627 var mockSorter = new MockRelevancySorter(); |
| 628 mockSorter.addTask(PARSED_UNIT); |
| 629 mockSorter.addTask(LIBRARY_ELEMENT1); |
| 630 mockSorter.addTask(RESOLVED_UNIT3); |
| 631 mockSorter.addTask(RESOLVED_UNIT3); |
| 632 |
| 633 DartCompletionManager.defaultContributionSorter = mockSorter; |
| 634 addTestFile('main() {Map m; m.^}'); |
| 635 |
| 636 return getSuggestions().then((_) { |
| 637 DartCompletionManager.defaultContributionSorter = originalSorter; |
| 638 mockSorter.enabled = false; |
| 639 |
| 640 // Assert that the analysis requests were processed |
| 641 mockSorter.assertAnalysisRequestsProcessed(); |
| 642 }); |
| 643 } |
| 644 |
| 620 test_simple() { | 645 test_simple() { |
| 621 addTestFile(''' | 646 addTestFile(''' |
| 622 void main() { | 647 void main() { |
| 623 ^ | 648 ^ |
| 624 } | 649 } |
| 625 '''); | 650 '''); |
| 626 return getSuggestions().then((_) { | 651 return getSuggestions().then((_) { |
| 627 expect(replacementOffset, equals(completionOffset)); | 652 expect(replacementOffset, equals(completionOffset)); |
| 628 expect(replacementLength, equals(0)); | 653 expect(replacementLength, equals(0)); |
| 629 assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object'); | 654 assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object'); |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 717 @override | 742 @override |
| 718 TimestampedData<String> getContents(Source source) { | 743 TimestampedData<String> getContents(Source source) { |
| 719 return source.contents; | 744 return source.contents; |
| 720 } | 745 } |
| 721 | 746 |
| 722 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); | 747 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); |
| 723 } | 748 } |
| 724 | 749 |
| 725 class MockRelevancySorter implements ContributionSorter { | 750 class MockRelevancySorter implements ContributionSorter { |
| 726 bool enabled = true; | 751 bool enabled = true; |
| 752 List<ResultDescriptor> descriptors = <ResultDescriptor>[]; |
| 753 |
| 754 void addTask(ResultDescriptor descriptor) { |
| 755 descriptors.add(descriptor); |
| 756 } |
| 757 |
| 758 void assertAnalysisRequestsProcessed() { |
| 759 expect(descriptors, hasLength(0)); |
| 760 } |
| 727 | 761 |
| 728 @override | 762 @override |
| 729 AnalysisRequest sort(CompletionRequest request, | 763 AnalysisRequest sort( |
| 730 Iterable<CompletionSuggestion> suggestions) { | 764 CompletionRequest request, Iterable<CompletionSuggestion> suggestions) { |
| 731 if (!enabled) { | 765 if (!enabled) { |
| 732 throw 'unexpected sort'; | 766 throw 'unexpected sort'; |
| 733 } | 767 } |
| 734 return null; | 768 return _nextAnalysisRequest(request); |
| 769 } |
| 770 |
| 771 AnalysisRequest _callback(CompletionRequest request, var value) { |
| 772 expect(value, isNotNull); |
| 773 return _nextAnalysisRequest(request); |
| 774 } |
| 775 |
| 776 AnalysisRequest _nextAnalysisRequest(CompletionRequest request) { |
| 777 if (descriptors.length == 0) { |
| 778 return null; |
| 779 } |
| 780 return new AnalysisRequest( |
| 781 request.source, descriptors.removeAt(0), _callback); |
| 735 } | 782 } |
| 736 } | 783 } |
| 737 | 784 |
| 738 /** | 785 /** |
| 739 * Mock stream for tracking calls to listen and subscription.cancel. | 786 * Mock stream for tracking calls to listen and subscription.cancel. |
| 740 */ | 787 */ |
| 741 class MockStream<E> implements Stream<E> { | 788 class MockStream<E> implements Stream<E> { |
| 742 MockSubscription<E> mockSubscription = new MockSubscription<E>(); | 789 MockSubscription<E> mockSubscription = new MockSubscription<E>(); |
| 743 int listenCount = 0; | 790 int listenCount = 0; |
| 744 | 791 |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 846 } | 893 } |
| 847 '''); | 894 '''); |
| 848 await waitForTasksFinished(); | 895 await waitForTasksFinished(); |
| 849 Request request = | 896 Request request = |
| 850 new CompletionGetSuggestionsParams(testFile, 0).toRequest('0'); | 897 new CompletionGetSuggestionsParams(testFile, 0).toRequest('0'); |
| 851 Response response = handler.handleRequest(request); | 898 Response response = handler.handleRequest(request); |
| 852 expect(response.error, isNotNull); | 899 expect(response.error, isNotNull); |
| 853 expect(response.error.code, RequestErrorCode.NO_INDEX_GENERATED); | 900 expect(response.error.code, RequestErrorCode.NO_INDEX_GENERATED); |
| 854 } | 901 } |
| 855 } | 902 } |
| OLD | NEW |