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

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

Issue 2842243003: Add completion support for plugins. (Closed)
Patch Set: Created 3 years, 7 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
« no previous file with comments | « pkg/analysis_server/lib/src/domain_completion.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/domain_completion.dart'; 10 import 'package:analysis_server/src/domain_completion.dart';
11 import 'package:analysis_server/src/plugin/plugin_manager.dart';
11 import 'package:analysis_server/src/provisional/completion/completion_core.dart' ; 12 import 'package:analysis_server/src/provisional/completion/completion_core.dart' ;
12 import 'package:analysis_server/src/provisional/completion/dart/completion_dart. dart'; 13 import 'package:analysis_server/src/provisional/completion/dart/completion_dart. dart';
13 import 'package:analysis_server/src/services/completion/dart/completion_manager. dart'; 14 import 'package:analysis_server/src/services/completion/dart/completion_manager. dart';
14 import 'package:analysis_server/src/services/completion/dart/contribution_sorter .dart'; 15 import 'package:analysis_server/src/services/completion/dart/contribution_sorter .dart';
16 import 'package:analyzer_plugin/protocol/protocol.dart' as plugin;
17 import 'package:analyzer_plugin/protocol/protocol_constants.dart' as plugin;
18 import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin;
15 import 'package:test/test.dart'; 19 import 'package:test/test.dart';
16 import 'package:test_reflective_loader/test_reflective_loader.dart'; 20 import 'package:test_reflective_loader/test_reflective_loader.dart';
17 21
18 import 'analysis_abstract.dart'; 22 import 'analysis_abstract.dart';
19 import 'domain_completion_util.dart'; 23 import 'domain_completion_util.dart';
20 import 'mocks.dart' show pumpEventQueue; 24 import 'mocks.dart' show pumpEventQueue;
21 25
22 main() { 26 main() {
23 defineReflectiveSuite(() { 27 defineReflectiveSuite(() {
24 defineReflectiveTests(CompletionDomainHandlerTest); 28 defineReflectiveTests(CompletionDomainHandlerTest);
25 defineReflectiveTests(_NoSearchEngine); 29 defineReflectiveTests(_NoSearchEngine);
26 }); 30 });
27 } 31 }
28 32
29 @reflectiveTest 33 @reflectiveTest
30 class CompletionDomainHandlerTest extends AbstractCompletionDomainTest { 34 class CompletionDomainHandlerTest extends AbstractCompletionDomainTest {
35 @override
36 void setUp() {
37 enableNewAnalysisDriver = true;
38 super.setUp();
39 }
40
31 test_ArgumentList_constructor_named_param_label() async { 41 test_ArgumentList_constructor_named_param_label() async {
32 addTestFile('main() { new A(^);}' 42 addTestFile('main() { new A(^);}'
33 'class A { A({one, two}) {} }'); 43 'class A { A({one, two}) {} }');
34 await getSuggestions(); 44 await getSuggestions();
35 assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'one: ', 45 assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'one: ',
36 relevance: DART_RELEVANCE_NAMED_PARAMETER); 46 relevance: DART_RELEVANCE_NAMED_PARAMETER);
37 assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'two: ', 47 assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'two: ',
38 relevance: DART_RELEVANCE_NAMED_PARAMETER); 48 relevance: DART_RELEVANCE_NAMED_PARAMETER);
39 expect(suggestions, hasLength(2)); 49 expect(suggestions, hasLength(2));
40 } 50 }
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
162 test_catch5() async { 172 test_catch5() async {
163 addTestFile('main() {try {} ^ finally {}}'); 173 addTestFile('main() {try {} ^ finally {}}');
164 await getSuggestions(); 174 await getSuggestions();
165 assertHasResult(CompletionSuggestionKind.KEYWORD, 'on', 175 assertHasResult(CompletionSuggestionKind.KEYWORD, 'on',
166 relevance: DART_RELEVANCE_KEYWORD); 176 relevance: DART_RELEVANCE_KEYWORD);
167 assertHasResult(CompletionSuggestionKind.KEYWORD, 'catch', 177 assertHasResult(CompletionSuggestionKind.KEYWORD, 'catch',
168 relevance: DART_RELEVANCE_KEYWORD); 178 relevance: DART_RELEVANCE_KEYWORD);
169 expect(suggestions, hasLength(2)); 179 expect(suggestions, hasLength(2));
170 } 180 }
171 181
182 @failingTest
172 test_html() { 183 test_html() {
184 //
185 // We no longer support the analysis of non-dart files.
186 //
173 testFile = '/project/web/test.html'; 187 testFile = '/project/web/test.html';
174 addTestFile(''' 188 addTestFile('''
175 <html>^</html> 189 <html>^</html>
176 '''); 190 ''');
177 return getSuggestions().then((_) { 191 return getSuggestions().then((_) {
178 expect(replacementOffset, equals(completionOffset)); 192 expect(replacementOffset, equals(completionOffset));
179 expect(replacementLength, equals(0)); 193 expect(replacementLength, equals(0));
180 expect(suggestions, hasLength(0)); 194 expect(suggestions, hasLength(0));
181 }); 195 });
182 } 196 }
(...skipping 19 matching lines...) Expand all
202 '''); 216 ''');
203 return getSuggestions().then((_) { 217 return getSuggestions().then((_) {
204 expect(replacementOffset, equals(completionOffset)); 218 expect(replacementOffset, equals(completionOffset));
205 expect(replacementLength, equals(0)); 219 expect(replacementLength, equals(0));
206 assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object'); 220 assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object');
207 assertHasResult(CompletionSuggestionKind.INVOCATION, 'HtmlElement'); 221 assertHasResult(CompletionSuggestionKind.INVOCATION, 'HtmlElement');
208 assertNoResult('test'); 222 assertNoResult('test');
209 }); 223 });
210 } 224 }
211 225
226 @failingTest
212 test_imports_aborted_new_request() async { 227 test_imports_aborted_new_request() async {
228 // TODO(brianwilkerson) Figure out whether this test makes sense when
229 // running the new driver. It waits for an initial empty notification then
230 // waits for a new notification. But I think that under the driver we only
231 // ever send one notification.
213 addTestFile(''' 232 addTestFile('''
214 class foo { } 233 class foo { }
215 c^'''); 234 c^''');
216 235
217 // Make a request for suggestions 236 // Make a request for suggestions
218 Request request1 = 237 Request request1 =
219 new CompletionGetSuggestionsParams(testFile, completionOffset) 238 new CompletionGetSuggestionsParams(testFile, completionOffset)
220 .toRequest('7'); 239 .toRequest('7');
221 Response response1 = await waitResponse(request1); 240 Response response1 = await waitResponse(request1);
222 var result1 = new CompletionGetSuggestionsResult.fromResponse(response1); 241 var result1 = new CompletionGetSuggestionsResult.fromResponse(response1);
(...skipping 17 matching lines...) Expand all
240 259
241 // Wait for both sets of suggestions 260 // Wait for both sets of suggestions
242 completionId = completionId2; 261 completionId = completionId2;
243 await pumpEventQueue(); 262 await pumpEventQueue();
244 expect(allSuggestions[completionId1], hasLength(0)); 263 expect(allSuggestions[completionId1], hasLength(0));
245 expect(allSuggestions[completionId2], same(suggestions)); 264 expect(allSuggestions[completionId2], same(suggestions));
246 assertHasResult(CompletionSuggestionKind.KEYWORD, 'class', 265 assertHasResult(CompletionSuggestionKind.KEYWORD, 'class',
247 relevance: DART_RELEVANCE_HIGH); 266 relevance: DART_RELEVANCE_HIGH);
248 } 267 }
249 268
269 @failingTest
250 test_imports_aborted_source_changed() async { 270 test_imports_aborted_source_changed() async {
271 // TODO(brianwilkerson) Figure out whether this test makes sense when
272 // running the new driver. It waits for an initial empty notification then
273 // waits for a new notification. But I think that under the driver we only
274 // ever send one notification.
251 addTestFile(''' 275 addTestFile('''
252 class foo { } 276 class foo { }
253 c^'''); 277 c^''');
254 278
255 // Make a request for suggestions 279 // Make a request for suggestions
256 Request request = 280 Request request =
257 new CompletionGetSuggestionsParams(testFile, completionOffset) 281 new CompletionGetSuggestionsParams(testFile, completionOffset)
258 .toRequest('0'); 282 .toRequest('0');
259 Response response = await waitResponse(request); 283 Response response = await waitResponse(request);
260 completionId = response.id; 284 completionId = response.id;
(...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after
619 return getSuggestions().then((_) { 643 return getSuggestions().then((_) {
620 expect(replacementOffset, equals(completionOffset)); 644 expect(replacementOffset, equals(completionOffset));
621 expect(replacementLength, equals(0)); 645 expect(replacementLength, equals(0));
622 assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object'); 646 assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object');
623 assertHasResult(CompletionSuggestionKind.INVOCATION, 'HtmlElement'); 647 assertHasResult(CompletionSuggestionKind.INVOCATION, 'HtmlElement');
624 assertHasResult(CompletionSuggestionKind.INVOCATION, 'A'); 648 assertHasResult(CompletionSuggestionKind.INVOCATION, 'A');
625 assertNoResult('test'); 649 assertNoResult('test');
626 }); 650 });
627 } 651 }
628 652
653 test_sentToPlugins() async {
654 addTestFile('''
655 void main() {
656 ^
657 }
658 ''');
659 PluginInfo info = new PluginInfo('a', 'b', 'c', null, null);
660 plugin.CompletionGetSuggestionsResult result =
661 new plugin.CompletionGetSuggestionsResult(
662 1, 2, <plugin.CompletionSuggestion>[
663 new plugin.CompletionSuggestion(
664 plugin.CompletionSuggestionKind.IDENTIFIER,
665 DART_RELEVANCE_DEFAULT,
666 'plugin completion',
667 3,
668 0,
669 false,
670 false)
671 ]);
672 pluginManager.broadcastResults = <PluginInfo, Future<plugin.Response>>{
673 info: new Future.value(result.toResponse('-'))
674 };
675 await getSuggestions();
676 assertHasResult(CompletionSuggestionKind.IDENTIFIER, 'plugin completion',
677 selectionOffset: 3);
678 }
679
629 test_simple() { 680 test_simple() {
630 addTestFile(''' 681 addTestFile('''
631 void main() { 682 void main() {
632 ^ 683 ^
633 } 684 }
634 '''); 685 ''');
635 return getSuggestions().then((_) { 686 return getSuggestions().then((_) {
636 expect(replacementOffset, equals(completionOffset)); 687 expect(replacementOffset, equals(completionOffset));
637 expect(replacementLength, equals(0)); 688 expect(replacementLength, equals(0));
638 assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object'); 689 assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object');
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
698 } 749 }
699 '''); 750 ''');
700 await waitForTasksFinished(); 751 await waitForTasksFinished();
701 Request request = 752 Request request =
702 new CompletionGetSuggestionsParams(testFile, 0).toRequest('0'); 753 new CompletionGetSuggestionsParams(testFile, 0).toRequest('0');
703 Response response = handler.handleRequest(request); 754 Response response = handler.handleRequest(request);
704 expect(response.error, isNotNull); 755 expect(response.error, isNotNull);
705 expect(response.error.code, RequestErrorCode.NO_INDEX_GENERATED); 756 expect(response.error.code, RequestErrorCode.NO_INDEX_GENERATED);
706 } 757 }
707 } 758 }
OLDNEW
« no previous file with comments | « pkg/analysis_server/lib/src/domain_completion.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698