| 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/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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |