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

Side by Side Diff: pkg/analysis_server/test/domain_completion_test.dart

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

Powered by Google App Engine
This is Rietveld 408576698