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

Side by Side Diff: pkg/analysis_server/test/services/completion/common_usage_computer_test.dart

Issue 1470863003: Rework contribution sorter to use futures (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: merge Created 5 years 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
(Empty)
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
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.
4
5 library test.services.completion.computer.dart.relevance;
6
7 import 'dart:async';
8
9 import 'package:analysis_server/plugin/protocol/protocol.dart';
10 import 'package:analysis_server/src/analysis_server.dart'
11 show ContextSourcePair;
12 import 'package:analysis_server/src/constants.dart';
13 import 'package:analysis_server/src/domain_completion.dart';
14 import 'package:analysis_server/src/services/completion/common_usage_computer.da rt';
15 import 'package:analysis_server/src/services/completion/dart_completion_cache.da rt';
16 import 'package:analysis_server/src/services/completion/dart_completion_manager. dart';
17 import 'package:analysis_server/src/services/index/index.dart';
18 import 'package:analysis_server/src/services/index/local_memory_index.dart';
19 import 'package:analyzer/src/generated/engine.dart';
20 import 'package:analyzer/src/generated/source.dart';
21 import 'package:test_reflective_loader/test_reflective_loader.dart';
22 import 'package:unittest/unittest.dart';
23
24 import '../../analysis_abstract.dart';
25 import '../../mocks.dart';
26 import '../../utils.dart';
27
28 main() {
29 initializeTestEnvironment();
30 defineReflectiveTests(CommonUsageComputerTest);
31 }
32
33 @reflectiveTest
34 class CommonUsageComputerTest extends AbstractAnalysisTest {
35 String completionId;
36 int completionOffset;
37 int replacementOffset;
38 int replacementLength;
39 List<CompletionSuggestion> suggestions = [];
40 bool suggestionsDone = false;
41
42 String addTestFile(String content) {
43 completionOffset = content.indexOf('^');
44 expect(completionOffset, isNot(equals(-1)), reason: 'missing ^');
45 int nextOffset = content.indexOf('^', completionOffset + 1);
46 expect(nextOffset, equals(-1), reason: 'too many ^');
47 return super.addTestFile(content.substring(0, completionOffset) +
48 content.substring(completionOffset + 1));
49 }
50
51 void assertHasResult(CompletionSuggestionKind kind, String completion,
52 [int relevance = DART_RELEVANCE_DEFAULT,
53 bool isDeprecated = false,
54 bool isPotential = false]) {
55 var cs;
56 suggestions.forEach((s) {
57 if (s.completion == completion) {
58 if (cs == null) {
59 cs = s;
60 } else {
61 fail('expected exactly one $completion but found > 1');
62 }
63 }
64 });
65 if (cs == null) {
66 var completions = suggestions.map((s) => s.completion).toList();
67 fail('expected "$completion" but found\n $completions');
68 }
69 expect(cs.kind, equals(kind));
70 expect(cs.relevance, equals(relevance));
71 expect(cs.selectionOffset, equals(completion.length));
72 expect(cs.selectionLength, equals(0));
73 expect(cs.isDeprecated, equals(isDeprecated));
74 expect(cs.isPotential, equals(isPotential));
75 }
76
77 void assertNoResult(String completion) {
78 if (suggestions.any((cs) => cs.completion == completion)) {
79 fail('did not expect completion: $completion');
80 }
81 }
82
83 void assertValidId(String id) {
84 expect(id, isNotNull);
85 expect(id.isNotEmpty, isTrue);
86 }
87
88 @override
89 Index createIndex() {
90 return createLocalMemoryIndex();
91 }
92
93 Future getSuggestions(Map<String, List<String>> selectorRelevance) async {
94 await waitForTasksFinished();
95 CompletionGetSuggestionsParams params =
96 new CompletionGetSuggestionsParams(testFile, completionOffset);
97 Request request = params.toRequest('0');
98 CompletionDomainHandler domainHandler = new CompletionDomainHandler(server);
99 handler = domainHandler;
100
101 ContextSourcePair contextSource = server.getContextSourcePair(params.file);
102 AnalysisContext context = contextSource.context;
103 Source source = contextSource.source;
104 DartCompletionManager completionManager = new DartCompletionManager(
105 context,
106 server.searchEngine,
107 source,
108 new DartCompletionCache(context, source),
109 null,
110 new CommonUsageComputer(selectorRelevance));
111
112 Response response =
113 domainHandler.processRequest(request, completionManager);
114 expect(response, isResponseSuccess('0'));
115 completionId = response.id;
116 assertValidId(completionId);
117 await pumpEventQueue();
118 expect(suggestionsDone, isTrue);
119 }
120
121 void processNotification(Notification notification) {
122 if (notification.event == COMPLETION_RESULTS) {
123 var params = new CompletionResultsParams.fromNotification(notification);
124 String id = params.id;
125 assertValidId(id);
126 if (id == completionId) {
127 expect(suggestionsDone, isFalse);
128 replacementOffset = params.replacementOffset;
129 replacementLength = params.replacementLength;
130 suggestionsDone = params.isLast;
131 expect(suggestionsDone, isNotNull);
132 suggestions = params.results;
133 }
134 }
135 }
136
137 @override
138 void setUp() {
139 super.setUp();
140 createProject();
141 }
142
143 test_ConstructorName() async {
144 // SimpleIdentifier ConstructorName InstanceCreationExpression
145 addTestFile('import "dart:async"; class A {x() {new Future.^}}');
146 await getSuggestions({
147 'dart.async.Future': ['value', 'wait']
148 });
149 expect(replacementOffset, equals(completionOffset));
150 expect(replacementLength, equals(0));
151 assertHasResult(CompletionSuggestionKind.INVOCATION, 'delayed');
152 assertHasResult(CompletionSuggestionKind.INVOCATION, 'value',
153 DART_RELEVANCE_COMMON_USAGE);
154 assertNoResult('Future');
155 assertNoResult('Object');
156 assertNoResult('A');
157 }
158
159 test_PrefixedIdentifier_field() async {
160 // SimpleIdentifier PrefixedIdentifeir ExpressionStatement
161 addTestFile('class A {static int s1; static int s2; x() {A.^}}');
162 await getSuggestions({
163 '.A': ['s2']
164 });
165 expect(replacementOffset, equals(completionOffset));
166 expect(replacementLength, equals(0));
167 assertHasResult(CompletionSuggestionKind.INVOCATION, 's1');
168 assertHasResult(
169 CompletionSuggestionKind.INVOCATION, 's2', DART_RELEVANCE_COMMON_USAGE);
170 assertNoResult('Future');
171 assertNoResult('Object');
172 assertNoResult('A');
173 }
174
175 test_PrefixedIdentifier_field_inPart() async {
176 // SimpleIdentifier PrefixedIdentifeir ExpressionStatement
177 addFile('/project/bin/myLib.dart',
178 'library L; part "$testFile"; class A {static int s2;}');
179 addTestFile('part of L; foo() {A.^}');
180 await getSuggestions({
181 'L.A': ['s2']
182 });
183 expect(replacementOffset, equals(completionOffset));
184 expect(replacementLength, equals(0));
185 assertHasResult(
186 CompletionSuggestionKind.INVOCATION, 's2', DART_RELEVANCE_COMMON_USAGE);
187 assertNoResult('Future');
188 assertNoResult('Object');
189 assertNoResult('A');
190 }
191
192 test_PrefixedIdentifier_getter() async {
193 // SimpleIdentifier PrefixedIdentifeir ExpressionStatement
194 addTestFile('class A {int get g1 => 1; int get g2 => 2; x() {new A().^}}');
195 await getSuggestions({
196 '.A': ['g2']
197 });
198 expect(replacementOffset, equals(completionOffset));
199 expect(replacementLength, equals(0));
200 assertHasResult(CompletionSuggestionKind.INVOCATION, 'g1');
201 assertHasResult(
202 CompletionSuggestionKind.INVOCATION, 'g2', DART_RELEVANCE_COMMON_USAGE);
203 assertNoResult('Future');
204 assertNoResult('Object');
205 assertNoResult('A');
206 }
207
208 test_PrefixedIdentifier_setter() async {
209 // SimpleIdentifier PrefixedIdentifeir ExpressionStatement
210 addTestFile('class A {set s1(v) {}; set s2(v) {}; x() {new A().^}}');
211 await getSuggestions({
212 '.A': ['s2']
213 });
214 expect(replacementOffset, equals(completionOffset));
215 expect(replacementLength, equals(0));
216 assertHasResult(CompletionSuggestionKind.INVOCATION, 's1');
217 assertHasResult(
218 CompletionSuggestionKind.INVOCATION, 's2', DART_RELEVANCE_COMMON_USAGE);
219 assertNoResult('Future');
220 assertNoResult('Object');
221 assertNoResult('A');
222 }
223
224 test_PrefixedIdentifier_static_method() async {
225 // SimpleIdentifier PrefixedIdentifeir ExpressionStatement
226 addTestFile('import "dart:async"; class A {x() {Future.^}}');
227 await getSuggestions({
228 'dart.async.Future': ['value', 'wait']
229 });
230 expect(replacementOffset, equals(completionOffset));
231 expect(replacementLength, equals(0));
232 assertHasResult(CompletionSuggestionKind.INVOCATION, 'wait',
233 DART_RELEVANCE_COMMON_USAGE - 1);
234 assertNoResult('Future');
235 assertNoResult('Object');
236 assertNoResult('A');
237 }
238
239 test_PropertyAccess() async {
240 // SimpleIdentifier PropertyAccess ExpressionStatement
241 addTestFile('import "dart:math"; class A {x() {new Random().^}}');
242 await getSuggestions({
243 'dart.math.Random': ['nextInt', 'nextDouble']
244 });
245 expect(replacementOffset, equals(completionOffset));
246 expect(replacementLength, equals(0));
247 assertHasResult(CompletionSuggestionKind.INVOCATION, 'nextBool');
248 assertHasResult(CompletionSuggestionKind.INVOCATION, 'nextDouble',
249 DART_RELEVANCE_COMMON_USAGE - 1);
250 assertHasResult(CompletionSuggestionKind.INVOCATION, 'nextInt',
251 DART_RELEVANCE_COMMON_USAGE);
252 assertNoResult('Random');
253 assertNoResult('Object');
254 assertNoResult('A');
255 }
256 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698