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'; |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 assertNoResult('test'); | 116 assertNoResult('test'); |
117 }); | 117 }); |
118 } | 118 } |
119 | 119 |
120 test_imports_aborted_new_request() async { | 120 test_imports_aborted_new_request() async { |
121 addTestFile(''' | 121 addTestFile(''' |
122 class foo { } | 122 class foo { } |
123 c^'''); | 123 c^'''); |
124 | 124 |
125 // Make a request for suggestions | 125 // Make a request for suggestions |
126 Request request = | 126 Request request1 = |
127 new CompletionGetSuggestionsParams(testFile, completionOffset) | 127 new CompletionGetSuggestionsParams(testFile, completionOffset) |
128 .toRequest('7'); | 128 .toRequest('7'); |
129 Response response = handleSuccessfulRequest(request); | 129 Response response1 = await waitResponse(request1); |
130 var result1 = new CompletionGetSuggestionsResult.fromResponse(response); | 130 var result1 = new CompletionGetSuggestionsResult.fromResponse(response1); |
131 var completionId1 = result1.id; | 131 var completionId1 = result1.id; |
132 assertValidId(response.id); | 132 assertValidId(completionId1); |
133 | 133 |
134 // Perform some analysis but assert that no suggestions have yet been made | 134 // Perform some analysis but assert that no suggestions have yet been made |
135 completionId = completionId1; | 135 completionId = completionId1; |
136 await pumpEventQueue(25); | 136 await pumpEventQueue(25); |
137 expect(suggestionsDone, isFalse); | 137 expect(suggestionsDone, isFalse); |
138 expect(suggestions, hasLength(0)); | 138 expect(suggestions, hasLength(0)); |
139 | 139 |
140 // Make another request before the first request completes | 140 // Make another request before the first request completes |
141 Request request2 = | 141 Request request2 = |
142 new CompletionGetSuggestionsParams(testFile, completionOffset) | 142 new CompletionGetSuggestionsParams(testFile, completionOffset) |
143 .toRequest('8'); | 143 .toRequest('8'); |
144 Response response2 = handleSuccessfulRequest(request2); | 144 Response response2 = await waitResponse(request2); |
145 var result2 = new CompletionGetSuggestionsResult.fromResponse(response2); | 145 var result2 = new CompletionGetSuggestionsResult.fromResponse(response2); |
146 var completionId2 = result2.id; | 146 var completionId2 = result2.id; |
147 assertValidId(completionId2); | 147 assertValidId(completionId2); |
148 | 148 |
149 // Wait for both sets of suggestions | 149 // Wait for both sets of suggestions |
150 completionId = completionId2; | 150 completionId = completionId2; |
151 await pumpEventQueue(); | 151 await pumpEventQueue(); |
152 expect(allSuggestions[completionId1], hasLength(0)); | 152 expect(allSuggestions[completionId1], hasLength(0)); |
153 expect(allSuggestions[completionId2], same(suggestions)); | 153 expect(allSuggestions[completionId2], same(suggestions)); |
154 assertHasResult(CompletionSuggestionKind.KEYWORD, 'class', | 154 assertHasResult(CompletionSuggestionKind.KEYWORD, 'class', |
155 relevance: DART_RELEVANCE_HIGH); | 155 relevance: DART_RELEVANCE_HIGH); |
156 } | 156 } |
157 | 157 |
158 test_imports_aborted_source_changed() async { | 158 test_imports_aborted_source_changed() async { |
159 addTestFile(''' | 159 addTestFile(''' |
160 class foo { } | 160 class foo { } |
161 c^'''); | 161 c^'''); |
162 | 162 |
163 // Make a request for suggestions | 163 // Make a request for suggestions |
164 Request request = | 164 Request request = |
165 new CompletionGetSuggestionsParams(testFile, completionOffset) | 165 new CompletionGetSuggestionsParams(testFile, completionOffset) |
166 .toRequest('0'); | 166 .toRequest('0'); |
167 Response response = handleSuccessfulRequest(request); | 167 Response response = await waitResponse(request); |
168 completionId = response.id; | 168 completionId = response.id; |
169 assertValidId(completionId); | 169 assertValidId(completionId); |
170 | 170 |
171 // Perform some analysis but assert that no suggestions have yet been made | 171 // Perform some analysis but assert that no suggestions have yet been made |
172 await pumpEventQueue(25); | 172 await pumpEventQueue(25); |
173 expect(suggestionsDone, isFalse); | 173 expect(suggestionsDone, isFalse); |
174 expect(suggestions, hasLength(0)); | 174 expect(suggestions, hasLength(0)); |
175 | 175 |
176 // Simulate user deleting text after request but before suggestions returned | 176 // Simulate user deleting text after request but before suggestions returned |
177 server.updateContent('uc1', {testFile: new AddContentOverlay(testCode)}); | 177 server.updateContent('uc1', {testFile: new AddContentOverlay(testCode)}); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
220 // Wait for analysis then edit the content | 220 // Wait for analysis then edit the content |
221 await waitForTasksFinished(); | 221 await waitForTasksFinished(); |
222 String revisedContent = testCode.substring(0, completionOffset) + | 222 String revisedContent = testCode.substring(0, completionOffset) + |
223 'i' + | 223 'i' + |
224 testCode.substring(completionOffset); | 224 testCode.substring(completionOffset); |
225 ++completionOffset; | 225 ++completionOffset; |
226 server.handleRequest(new AnalysisUpdateContentParams( | 226 server.handleRequest(new AnalysisUpdateContentParams( |
227 {testFile: new AddContentOverlay(revisedContent)}).toRequest('add1')); | 227 {testFile: new AddContentOverlay(revisedContent)}).toRequest('add1')); |
228 | 228 |
229 // Request code completion immediately after edit | 229 // Request code completion immediately after edit |
230 Response response = handleSuccessfulRequest( | 230 Response response = await waitResponse( |
231 new CompletionGetSuggestionsParams(testFile, completionOffset) | 231 new CompletionGetSuggestionsParams(testFile, completionOffset) |
232 .toRequest('0')); | 232 .toRequest('0')); |
233 completionId = response.id; | 233 completionId = response.id; |
234 assertValidId(completionId); | 234 assertValidId(completionId); |
235 await waitForTasksFinished(); | 235 await waitForTasksFinished(); |
236 expect(replacementOffset, completionOffset - 1); | 236 expect(replacementOffset, completionOffset - 1); |
237 expect(replacementLength, 1); | 237 expect(replacementLength, 1); |
238 assertHasResult(CompletionSuggestionKind.KEYWORD, 'library', | 238 assertHasResult(CompletionSuggestionKind.KEYWORD, 'library', |
239 relevance: DART_RELEVANCE_HIGH); | 239 relevance: DART_RELEVANCE_HIGH); |
240 assertHasResult(CompletionSuggestionKind.KEYWORD, 'import \'\';', | 240 assertHasResult(CompletionSuggestionKind.KEYWORD, 'import \'\';', |
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
459 assertHasResult(CompletionSuggestionKind.INVOCATION, 'a', | 459 assertHasResult(CompletionSuggestionKind.INVOCATION, 'a', |
460 relevance: DART_RELEVANCE_LOCAL_FIELD); | 460 relevance: DART_RELEVANCE_LOCAL_FIELD); |
461 assertHasResult(CompletionSuggestionKind.INVOCATION, 'b', | 461 assertHasResult(CompletionSuggestionKind.INVOCATION, 'b', |
462 relevance: DART_RELEVANCE_LOCAL_VARIABLE); | 462 relevance: DART_RELEVANCE_LOCAL_VARIABLE); |
463 assertHasResult(CompletionSuggestionKind.INVOCATION, 'x', | 463 assertHasResult(CompletionSuggestionKind.INVOCATION, 'x', |
464 relevance: DART_RELEVANCE_LOCAL_METHOD); | 464 relevance: DART_RELEVANCE_LOCAL_METHOD); |
465 assertHasResult(CompletionSuggestionKind.INVOCATION, 'DateTime'); | 465 assertHasResult(CompletionSuggestionKind.INVOCATION, 'DateTime'); |
466 }); | 466 }); |
467 } | 467 } |
468 | 468 |
469 test_offset_past_eof() { | 469 test_offset_past_eof() async { |
470 addTestFile('main() { }', offset: 300); | 470 addTestFile('main() { }', offset: 300); |
471 Request request = | 471 Request request = |
472 new CompletionGetSuggestionsParams(testFile, completionOffset) | 472 new CompletionGetSuggestionsParams(testFile, completionOffset) |
473 .toRequest('0'); | 473 .toRequest('0'); |
474 Response response = handler.handleRequest(request); | 474 Response response = await waitResponse(request); |
475 expect(response.id, '0'); | 475 expect(response.id, '0'); |
476 expect(response.error.code, RequestErrorCode.INVALID_PARAMETER); | 476 expect(response.error.code, RequestErrorCode.INVALID_PARAMETER); |
477 } | 477 } |
478 | 478 |
479 test_overrides() { | 479 test_overrides() { |
480 addFile('/libA.dart', 'class A {m() {}}'); | 480 addFile('/libA.dart', 'class A {m() {}}'); |
481 addTestFile(''' | 481 addTestFile(''' |
482 import '/libA.dart'; | 482 import '/libA.dart'; |
483 class B extends A {m() {^}} | 483 class B extends A {m() {^}} |
484 '''); | 484 '''); |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
606 } | 606 } |
607 '''); | 607 '''); |
608 await waitForTasksFinished(); | 608 await waitForTasksFinished(); |
609 Request request = | 609 Request request = |
610 new CompletionGetSuggestionsParams(testFile, 0).toRequest('0'); | 610 new CompletionGetSuggestionsParams(testFile, 0).toRequest('0'); |
611 Response response = handler.handleRequest(request); | 611 Response response = handler.handleRequest(request); |
612 expect(response.error, isNotNull); | 612 expect(response.error, isNotNull); |
613 expect(response.error.code, RequestErrorCode.NO_INDEX_GENERATED); | 613 expect(response.error.code, RequestErrorCode.NO_INDEX_GENERATED); |
614 } | 614 } |
615 } | 615 } |
OLD | NEW |