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^ |