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 |