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

Side by Side 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 unified diff | Download patch
OLDNEW
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_reflective_loader/test_reflective_loader.dart'; 15 import 'package:test_reflective_loader/test_reflective_loader.dart';
16 import 'package:unittest/unittest.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 'utils.dart'; 21 import 'utils.dart';
21 22
22 main() { 23 main() {
23 initializeTestEnvironment(); 24 initializeTestEnvironment();
24 defineReflectiveTests(CompletionDomainHandlerTest); 25 defineReflectiveTests(CompletionDomainHandlerTest);
25 defineReflectiveTests(_NoSearchEngine); 26 defineReflectiveTests(_NoSearchEngine);
26 } 27 }
27 28
28 @reflectiveTest 29 @reflectiveTest
29 class CompletionDomainHandlerTest extends AbstractCompletionDomainTest { 30 class CompletionDomainHandlerTest extends AbstractCompletionDomainTest {
(...skipping 16 matching lines...) Expand all
46 '''); 47 ''');
47 return getSuggestions().then((_) { 48 return getSuggestions().then((_) {
48 expect(replacementOffset, equals(completionOffset)); 49 expect(replacementOffset, equals(completionOffset));
49 expect(replacementLength, equals(0)); 50 expect(replacementLength, equals(0));
50 assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object'); 51 assertHasResult(CompletionSuggestionKind.INVOCATION, 'Object');
51 assertHasResult(CompletionSuggestionKind.INVOCATION, 'HtmlElement'); 52 assertHasResult(CompletionSuggestionKind.INVOCATION, 'HtmlElement');
52 assertNoResult('test'); 53 assertNoResult('test');
53 }); 54 });
54 } 55 }
55 56
57 test_imports_aborted_new_request() async {
58 addTestFile('''
59 class foo { }
60 c^''');
61
62 // Make a request for suggestions
63 Request request =
64 new CompletionGetSuggestionsParams(testFile, completionOffset)
65 .toRequest('7');
66 Response response = handleSuccessfulRequest(request);
67 var result1 = new CompletionGetSuggestionsResult.fromResponse(response);
68 var completionId1 = result1.id;
69 assertValidId(response.id);
70
71 // Perform some analysis but assert that no suggestions have yet been made
72 completionId = completionId1;
73 await pumpEventQueue(25);
74 expect(suggestionsDone, isFalse);
75 expect(suggestions, hasLength(0));
76
77 // Make another request before the first request completes
78 Request request2 =
79 new CompletionGetSuggestionsParams(testFile, completionOffset)
80 .toRequest('8');
81 Response response2 = handleSuccessfulRequest(request2);
82 var result2 = new CompletionGetSuggestionsResult.fromResponse(response2);
83 var completionId2 = result2.id;
84 assertValidId(completionId2);
85
86 // Wait for both sets of suggestions
87 completionId = completionId2;
88 await pumpEventQueue();
89 expect(allSuggestions[completionId1], hasLength(0));
90 expect(allSuggestions[completionId2], same(suggestions));
91 assertHasResult(CompletionSuggestionKind.KEYWORD, 'class',
92 relevance: DART_RELEVANCE_HIGH);
93 }
94
95 test_imports_aborted_source_changed() async {
96 addTestFile('''
97 class foo { }
98 c^''');
99
100 // Make a request for suggestions
101 Request request =
102 new CompletionGetSuggestionsParams(testFile, completionOffset)
103 .toRequest('0');
104 Response response = handleSuccessfulRequest(request);
105 completionId = response.id;
106 assertValidId(completionId);
107
108 // Perform some analysis but assert that no suggestions have yet been made
109 await pumpEventQueue(25);
110 expect(suggestionsDone, isFalse);
111 expect(suggestions, hasLength(0));
112
113 // Simulate user deleting text after request but before suggestions returned
114 server.updateContent('uc1', {testFile: new AddContentOverlay(testCode)});
115 server.updateContent('uc2', {
116 testFile: new ChangeContentOverlay(
117 [new SourceEdit(completionOffset - 1, 1, '')])
118 });
119
120 // Expect the completion domain to discard request because source changed
121 await pumpEventQueue().then((_) {
122 expect(suggestionsDone, isTrue);
123 });
124 expect(suggestions, hasLength(0));
125 }
126
56 test_imports_incremental() async { 127 test_imports_incremental() async {
57 addTestFile('''library foo; 128 addTestFile('''library foo;
58 e^ 129 e^
59 import "dart:async"; 130 import "dart:async";
60 import "package:foo/foo.dart"; 131 import "package:foo/foo.dart";
61 class foo { }'''); 132 class foo { }''');
62 await waitForTasksFinished(); 133 await waitForTasksFinished();
63 server.updateContent('uc1', {testFile: new AddContentOverlay(testCode)}); 134 server.updateContent('uc1', {testFile: new AddContentOverlay(testCode)});
64 server.updateContent('uc2', { 135 server.updateContent('uc2', {
65 testFile: 136 testFile:
(...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after
472 } 543 }
473 '''); 544 ''');
474 await waitForTasksFinished(); 545 await waitForTasksFinished();
475 Request request = 546 Request request =
476 new CompletionGetSuggestionsParams(testFile, 0).toRequest('0'); 547 new CompletionGetSuggestionsParams(testFile, 0).toRequest('0');
477 Response response = handler.handleRequest(request); 548 Response response = handler.handleRequest(request);
478 expect(response.error, isNotNull); 549 expect(response.error, isNotNull);
479 expect(response.error.code, RequestErrorCode.NO_INDEX_GENERATED); 550 expect(response.error.code, RequestErrorCode.NO_INDEX_GENERATED);
480 } 551 }
481 } 552 }
OLDNEW
« 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