| 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/provisional/completion/completion_core.dart'
; | 11 import 'package:analysis_server/src/provisional/completion/completion_core.dart'
; |
| 12 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.
dart'; | 12 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.
dart'; |
| 13 import 'package:analysis_server/src/services/completion/dart/completion_manager.
dart'; | 13 import 'package:analysis_server/src/services/completion/dart/completion_manager.
dart'; |
| 14 import 'package:analysis_server/src/services/completion/dart/contribution_sorter
.dart'; | 14 import 'package:analysis_server/src/services/completion/dart/contribution_sorter
.dart'; |
| 15 import 'package:test/test.dart'; |
| 15 import 'package:test_reflective_loader/test_reflective_loader.dart'; | 16 import 'package:test_reflective_loader/test_reflective_loader.dart'; |
| 16 import 'package:unittest/unittest.dart'; | |
| 17 | 17 |
| 18 import 'analysis_abstract.dart'; | 18 import 'analysis_abstract.dart'; |
| 19 import 'domain_completion_util.dart'; | 19 import 'domain_completion_util.dart'; |
| 20 import 'mocks.dart' show pumpEventQueue; | 20 import 'mocks.dart' show pumpEventQueue; |
| 21 import 'utils.dart'; | 21 import 'utils.dart'; |
| 22 | 22 |
| 23 main() { | 23 main() { |
| 24 initializeTestEnvironment(); | 24 initializeTestEnvironment(); |
| 25 defineReflectiveTests(CompletionDomainHandlerTest); | 25 defineReflectiveSuite(() { |
| 26 defineReflectiveTests(_NoSearchEngine); | 26 defineReflectiveTests(CompletionDomainHandlerTest); |
| 27 defineReflectiveTests(_NoSearchEngine); |
| 28 }); |
| 27 } | 29 } |
| 28 | 30 |
| 29 @reflectiveTest | 31 @reflectiveTest |
| 30 class CompletionDomainHandlerTest extends AbstractCompletionDomainTest { | 32 class CompletionDomainHandlerTest extends AbstractCompletionDomainTest { |
| 31 test_ArgumentList_imported_function_named_param() async { | 33 test_ArgumentList_imported_function_named_param() async { |
| 32 addTestFile('main() { int.parse("16", ^);}'); | 34 addTestFile('main() { int.parse("16", ^);}'); |
| 33 await getSuggestions(); | 35 await getSuggestions(); |
| 34 assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'radix: ', | 36 assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'radix: ', |
| 35 relevance: DART_RELEVANCE_NAMED_PARAMETER); | 37 relevance: DART_RELEVANCE_NAMED_PARAMETER); |
| 36 assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'onError: ', | 38 assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'onError: ', |
| 37 relevance: DART_RELEVANCE_NAMED_PARAMETER); | 39 relevance: DART_RELEVANCE_NAMED_PARAMETER); |
| 38 expect(suggestions, hasLength(2)); | 40 expect(suggestions, hasLength(2)); |
| 39 } | 41 } |
| 40 | 42 |
| 41 test_ArgumentList_imported_function_named_param1() async { | 43 test_ArgumentList_imported_function_named_param1() async { |
| 42 addTestFile('main() { foo(o^);} foo({one, two}) {}'); | 44 addTestFile('main() { foo(o^);} foo({one, two}) {}'); |
| 43 await getSuggestions(); | 45 await getSuggestions(); |
| 44 assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'one: ', | 46 assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'one: ', |
| 45 relevance: DART_RELEVANCE_NAMED_PARAMETER); | 47 relevance: DART_RELEVANCE_NAMED_PARAMETER); |
| 46 assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'two: ', | 48 assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'two: ', |
| 47 relevance: DART_RELEVANCE_NAMED_PARAMETER); | 49 relevance: DART_RELEVANCE_NAMED_PARAMETER); |
| 48 expect(suggestions, hasLength(2)); | 50 expect(suggestions, hasLength(2)); |
| 49 } | 51 } |
| 50 | 52 |
| 53 test_ArgumentList_imported_function_named_param2() async { |
| 54 addTestFile('mainx() {A a = new A(); a.foo(one: 7, ^);}' |
| 55 'class A { foo({one, two}) {} }'); |
| 56 await getSuggestions(); |
| 57 assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'two: ', |
| 58 relevance: DART_RELEVANCE_NAMED_PARAMETER); |
| 59 expect(suggestions, hasLength(1)); |
| 60 } |
| 61 |
| 51 test_ArgumentList_imported_function_named_param_label1() async { | 62 test_ArgumentList_imported_function_named_param_label1() async { |
| 52 addTestFile('main() { int.parse("16", r^: 16);}'); | 63 addTestFile('main() { int.parse("16", r^: 16);}'); |
| 53 await getSuggestions(); | 64 await getSuggestions(); |
| 54 assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'radix', | 65 assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'radix', |
| 55 relevance: DART_RELEVANCE_NAMED_PARAMETER); | 66 relevance: DART_RELEVANCE_NAMED_PARAMETER); |
| 56 assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'onError', | 67 assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'onError', |
| 57 relevance: DART_RELEVANCE_NAMED_PARAMETER); | 68 relevance: DART_RELEVANCE_NAMED_PARAMETER); |
| 58 expect(suggestions, hasLength(2)); | 69 expect(suggestions, hasLength(2)); |
| 59 } | 70 } |
| 60 | 71 |
| 61 test_ArgumentList_imported_function_named_param_label3() async { | 72 test_ArgumentList_imported_function_named_param_label3() async { |
| 62 addTestFile('main() { int.parse("16", ^: 16);}'); | 73 addTestFile('main() { int.parse("16", ^: 16);}'); |
| 63 await getSuggestions(); | 74 await getSuggestions(); |
| 64 assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'radix: ', | 75 assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'radix: ', |
| 65 relevance: DART_RELEVANCE_NAMED_PARAMETER); | 76 relevance: DART_RELEVANCE_NAMED_PARAMETER); |
| 66 assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'onError: ', | 77 assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'onError: ', |
| 67 relevance: DART_RELEVANCE_NAMED_PARAMETER); | 78 relevance: DART_RELEVANCE_NAMED_PARAMETER); |
| 68 expect(suggestions, hasLength(2)); | 79 expect(suggestions, hasLength(2)); |
| 69 } | 80 } |
| 70 | 81 |
| 71 test_ArgumentList_imported_function_named_param2() async { | |
| 72 addTestFile('mainx() {A a = new A(); a.foo(one: 7, ^);}' | |
| 73 'class A { foo({one, two}) {} }'); | |
| 74 await getSuggestions(); | |
| 75 assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'two: ', | |
| 76 relevance: DART_RELEVANCE_NAMED_PARAMETER); | |
| 77 expect(suggestions, hasLength(1)); | |
| 78 } | |
| 79 | |
| 80 test_html() { | 82 test_html() { |
| 81 testFile = '/project/web/test.html'; | 83 testFile = '/project/web/test.html'; |
| 82 addTestFile(''' | 84 addTestFile(''' |
| 83 <html>^</html> | 85 <html>^</html> |
| 84 '''); | 86 '''); |
| 85 return getSuggestions().then((_) { | 87 return getSuggestions().then((_) { |
| 86 expect(replacementOffset, equals(completionOffset)); | 88 expect(replacementOffset, equals(completionOffset)); |
| 87 expect(replacementLength, equals(0)); | 89 expect(replacementLength, equals(0)); |
| 88 expect(suggestions, hasLength(0)); | 90 expect(suggestions, hasLength(0)); |
| 89 }); | 91 }); |
| 90 } | 92 } |
| 91 | 93 |
| 94 test_import_uri_with_trailing() { |
| 95 addFile('/project/bin/testA.dart', 'library libA;'); |
| 96 addTestFile(''' |
| 97 import '/project/bin/t^.dart'; |
| 98 main() {}'''); |
| 99 return getSuggestions().then((_) { |
| 100 expect(replacementOffset, equals(completionOffset - 14)); |
| 101 expect(replacementLength, equals(5 + 14)); |
| 102 assertHasResult( |
| 103 CompletionSuggestionKind.IMPORT, '/project/bin/testA.dart'); |
| 104 assertNoResult('test'); |
| 105 }); |
| 106 } |
| 107 |
| 92 test_imports() { | 108 test_imports() { |
| 93 addTestFile(''' | 109 addTestFile(''' |
| 94 import 'dart:html'; | 110 import 'dart:html'; |
| 95 main() {^} | 111 main() {^} |
| 96 '''); | 112 '''); |
| 97 return getSuggestions().then((_) { | 113 return getSuggestions().then((_) { |
| 98 expect(replacementOffset, equals(completionOffset)); | 114 expect(replacementOffset, equals(completionOffset)); |
| 99 expect(replacementLength, equals(0)); | 115 expect(replacementLength, equals(0)); |
| 100 assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object'); | 116 assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object'); |
| 101 assertHasResult(CompletionSuggestionKind.INVOCATION, 'HtmlElement'); | 117 assertHasResult(CompletionSuggestionKind.INVOCATION, 'HtmlElement'); |
| (...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 554 return getSuggestions().then((_) { | 570 return getSuggestions().then((_) { |
| 555 expect(replacementOffset, equals(completionOffset - 3)); | 571 expect(replacementOffset, equals(completionOffset - 3)); |
| 556 expect(replacementLength, equals(4)); | 572 expect(replacementLength, equals(4)); |
| 557 // Suggestions based upon imported elements are partially filtered | 573 // Suggestions based upon imported elements are partially filtered |
| 558 //assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object'); | 574 //assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object'); |
| 559 assertHasResult(CompletionSuggestionKind.INVOCATION, 'test', | 575 assertHasResult(CompletionSuggestionKind.INVOCATION, 'test', |
| 560 relevance: DART_RELEVANCE_LOCAL_TOP_LEVEL_VARIABLE); | 576 relevance: DART_RELEVANCE_LOCAL_TOP_LEVEL_VARIABLE); |
| 561 assertNoResult('HtmlElement'); | 577 assertNoResult('HtmlElement'); |
| 562 }); | 578 }); |
| 563 } | 579 } |
| 564 | |
| 565 test_import_uri_with_trailing() { | |
| 566 addFile('/project/bin/testA.dart', 'library libA;'); | |
| 567 addTestFile(''' | |
| 568 import '/project/bin/t^.dart'; | |
| 569 main() {}'''); | |
| 570 return getSuggestions().then((_) { | |
| 571 expect(replacementOffset, equals(completionOffset - 14)); | |
| 572 expect(replacementLength, equals(5 + 14)); | |
| 573 assertHasResult( | |
| 574 CompletionSuggestionKind.IMPORT, '/project/bin/testA.dart'); | |
| 575 assertNoResult('test'); | |
| 576 }); | |
| 577 } | |
| 578 } | 580 } |
| 579 | 581 |
| 580 class MockRelevancySorter implements DartContributionSorter { | 582 class MockRelevancySorter implements DartContributionSorter { |
| 581 bool enabled = true; | 583 bool enabled = true; |
| 582 | 584 |
| 583 @override | 585 @override |
| 584 Future sort( | 586 Future sort( |
| 585 CompletionRequest request, Iterable<CompletionSuggestion> suggestions) { | 587 CompletionRequest request, Iterable<CompletionSuggestion> suggestions) { |
| 586 if (!enabled) { | 588 if (!enabled) { |
| 587 throw 'unexpected sort'; | 589 throw 'unexpected sort'; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 606 } | 608 } |
| 607 '''); | 609 '''); |
| 608 await waitForTasksFinished(); | 610 await waitForTasksFinished(); |
| 609 Request request = | 611 Request request = |
| 610 new CompletionGetSuggestionsParams(testFile, 0).toRequest('0'); | 612 new CompletionGetSuggestionsParams(testFile, 0).toRequest('0'); |
| 611 Response response = handler.handleRequest(request); | 613 Response response = handler.handleRequest(request); |
| 612 expect(response.error, isNotNull); | 614 expect(response.error, isNotNull); |
| 613 expect(response.error.code, RequestErrorCode.NO_INDEX_GENERATED); | 615 expect(response.error.code, RequestErrorCode.NO_INDEX_GENERATED); |
| 614 } | 616 } |
| 615 } | 617 } |
| OLD | NEW |