| Index: pkg/analysis_server/test/domain_completion_test.dart
|
| diff --git a/pkg/analysis_server/test/domain_completion_test.dart b/pkg/analysis_server/test/domain_completion_test.dart
|
| index acff0070be3084e49341b2301bf4c935140ec152..61734b6ddac1d076770436e611d2568a7a372897 100644
|
| --- a/pkg/analysis_server/test/domain_completion_test.dart
|
| +++ b/pkg/analysis_server/test/domain_completion_test.dart
|
| @@ -17,6 +17,7 @@ import 'package:unittest/unittest.dart';
|
|
|
| import 'analysis_abstract.dart';
|
| import 'domain_completion_util.dart';
|
| +import 'mocks.dart' show pumpEventQueue;
|
| import 'utils.dart';
|
|
|
| main() {
|
| @@ -53,6 +54,76 @@ class CompletionDomainHandlerTest extends AbstractCompletionDomainTest {
|
| });
|
| }
|
|
|
| + test_imports_aborted_new_request() async {
|
| + addTestFile('''
|
| + class foo { }
|
| + c^''');
|
| +
|
| + // Make a request for suggestions
|
| + Request request =
|
| + new CompletionGetSuggestionsParams(testFile, completionOffset)
|
| + .toRequest('7');
|
| + Response response = handleSuccessfulRequest(request);
|
| + var result1 = new CompletionGetSuggestionsResult.fromResponse(response);
|
| + var completionId1 = result1.id;
|
| + assertValidId(response.id);
|
| +
|
| + // Perform some analysis but assert that no suggestions have yet been made
|
| + completionId = completionId1;
|
| + await pumpEventQueue(25);
|
| + expect(suggestionsDone, isFalse);
|
| + expect(suggestions, hasLength(0));
|
| +
|
| + // Make another request before the first request completes
|
| + Request request2 =
|
| + new CompletionGetSuggestionsParams(testFile, completionOffset)
|
| + .toRequest('8');
|
| + Response response2 = handleSuccessfulRequest(request2);
|
| + var result2 = new CompletionGetSuggestionsResult.fromResponse(response2);
|
| + var completionId2 = result2.id;
|
| + assertValidId(completionId2);
|
| +
|
| + // Wait for both sets of suggestions
|
| + completionId = completionId2;
|
| + await pumpEventQueue();
|
| + expect(allSuggestions[completionId1], hasLength(0));
|
| + expect(allSuggestions[completionId2], same(suggestions));
|
| + assertHasResult(CompletionSuggestionKind.KEYWORD, 'class',
|
| + relevance: DART_RELEVANCE_HIGH);
|
| + }
|
| +
|
| + test_imports_aborted_source_changed() async {
|
| + addTestFile('''
|
| + class foo { }
|
| + c^''');
|
| +
|
| + // Make a request for suggestions
|
| + Request request =
|
| + new CompletionGetSuggestionsParams(testFile, completionOffset)
|
| + .toRequest('0');
|
| + Response response = handleSuccessfulRequest(request);
|
| + completionId = response.id;
|
| + assertValidId(completionId);
|
| +
|
| + // Perform some analysis but assert that no suggestions have yet been made
|
| + await pumpEventQueue(25);
|
| + expect(suggestionsDone, isFalse);
|
| + expect(suggestions, hasLength(0));
|
| +
|
| + // Simulate user deleting text after request but before suggestions returned
|
| + server.updateContent('uc1', {testFile: new AddContentOverlay(testCode)});
|
| + server.updateContent('uc2', {
|
| + testFile: new ChangeContentOverlay(
|
| + [new SourceEdit(completionOffset - 1, 1, '')])
|
| + });
|
| +
|
| + // Expect the completion domain to discard request because source changed
|
| + await pumpEventQueue().then((_) {
|
| + expect(suggestionsDone, isTrue);
|
| + });
|
| + expect(suggestions, hasLength(0));
|
| + }
|
| +
|
| test_imports_incremental() async {
|
| addTestFile('''library foo;
|
| e^
|
|
|