Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(210)

Unified Diff: pkg/analysis_server/test/domain_completion_test.dart

Issue 1685653002: abort completion request - fixes #24271 (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: address comment Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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^
« no previous file with comments | « pkg/analysis_server/test/analysis_abstract.dart ('k') | pkg/analysis_server/test/domain_completion_util.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698