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

Side by Side Diff: pkg/analyzer_plugin/test/plugin/plugin_test.dart

Issue 2932553004: Add tests for recently added mixins and improve plugin tests (Closed)
Patch Set: Created 3 years, 6 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) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, 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 import 'dart:async';
6
7 import 'package:analyzer/file_system/file_system.dart'; 5 import 'package:analyzer/file_system/file_system.dart';
8 import 'package:analyzer/file_system/memory_file_system.dart'; 6 import 'package:analyzer/file_system/memory_file_system.dart';
9 import 'package:analyzer/src/dart/analysis/driver.dart'; 7 import 'package:analyzer/src/dart/analysis/driver.dart';
10 import 'package:analyzer_plugin/plugin/plugin.dart'; 8 import 'package:analyzer_plugin/protocol/protocol.dart';
11 import 'package:analyzer_plugin/protocol/protocol_common.dart'; 9 import 'package:analyzer_plugin/protocol/protocol_common.dart';
12 import 'package:analyzer_plugin/protocol/protocol_generated.dart'; 10 import 'package:analyzer_plugin/protocol/protocol_generated.dart';
13 import 'package:path/src/context.dart'; 11 import 'package:path/src/context.dart';
14 import 'package:test/test.dart'; 12 import 'package:test/test.dart';
15 import 'package:test_reflective_loader/test_reflective_loader.dart'; 13 import 'package:test_reflective_loader/test_reflective_loader.dart';
16 14
15 import 'mocks.dart';
16
17 void main() { 17 void main() {
18 defineReflectiveTests(ServerPluginTest); 18 defineReflectiveTests(ServerPluginTest);
19 } 19 }
20 20
21 class MockAnalysisDriver extends AnalysisDriverGeneric {
22 /**
23 * The files that have been added to this driver.
24 */
25 List<String> addedFiles = <String>[];
26
27 @override
28 bool get hasFilesToAnalyze => false;
29
30 @override
31 set priorityFiles(List<String> priorityPaths) {}
32
33 @override
34 AnalysisDriverPriority get workPriority => AnalysisDriverPriority.nothing;
35
36 @override
37 void addFile(String path) {
38 addedFiles.add(path);
39 }
40
41 @override
42 void dispose() {}
43
44 @override
45 Future<Null> performWork() => new Future.value(null);
46 }
47
48 @reflectiveTest 21 @reflectiveTest
49 class ServerPluginTest { 22 class ServerPluginTest {
50 MemoryResourceProvider resourceProvider = new MemoryResourceProvider(); 23 MemoryResourceProvider resourceProvider = new MemoryResourceProvider();
51 24
52 TestServerPlugin plugin; 25 MockChannel channel;
26 _TestServerPlugin plugin;
53 27
54 String packagePath1; 28 String packagePath1;
55 String filePath1; 29 String filePath1;
56 ContextRoot contextRoot1; 30 ContextRoot contextRoot1;
57 31
58 String packagePath2; 32 String packagePath2;
59 String filePath2; 33 String filePath2;
60 ContextRoot contextRoot2; 34 ContextRoot contextRoot2;
61 35
62 void setUp() { 36 void setUp() {
63 Context pathContext = resourceProvider.pathContext; 37 Context pathContext = resourceProvider.pathContext;
64 38
65 packagePath1 = resourceProvider.convertPath('/package1'); 39 packagePath1 = resourceProvider.convertPath('/package1');
66 filePath1 = pathContext.join(packagePath1, 'lib', 'test.dart'); 40 filePath1 = pathContext.join(packagePath1, 'lib', 'test.dart');
67 resourceProvider.newFile(filePath1, ''); 41 resourceProvider.newFile(filePath1, '');
68 contextRoot1 = new ContextRoot(packagePath1, <String>[]); 42 contextRoot1 = new ContextRoot(packagePath1, <String>[]);
69 43
70 packagePath2 = resourceProvider.convertPath('/package2'); 44 packagePath2 = resourceProvider.convertPath('/package2');
71 filePath2 = pathContext.join(packagePath2, 'lib', 'test.dart'); 45 filePath2 = pathContext.join(packagePath2, 'lib', 'test.dart');
72 resourceProvider.newFile(filePath2, ''); 46 resourceProvider.newFile(filePath2, '');
73 contextRoot2 = new ContextRoot(packagePath2, <String>[]); 47 contextRoot2 = new ContextRoot(packagePath2, <String>[]);
74 48
75 plugin = new TestServerPlugin(resourceProvider); 49 channel = new MockChannel();
50 plugin = new _TestServerPlugin(resourceProvider);
51 plugin.start(channel);
76 } 52 }
77 53
78 test_contextRootContaining_insideRoot() async { 54 test_contextRootContaining_insideRoot() async {
79 await plugin.handleAnalysisSetContextRoots( 55 await plugin.handleAnalysisSetContextRoots(
80 new AnalysisSetContextRootsParams([contextRoot1])); 56 new AnalysisSetContextRootsParams([contextRoot1]));
81 57
82 expect(plugin.contextRootContaining(filePath1), isNotNull); 58 expect(plugin.contextRootContaining(filePath1), isNotNull);
83 } 59 }
84 60
85 void test_contextRootContaining_noRoots() { 61 void test_contextRootContaining_noRoots() {
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 var result = await plugin.handleAnalysisSetContextBuilderOptions( 105 var result = await plugin.handleAnalysisSetContextBuilderOptions(
130 new AnalysisSetContextBuilderOptionsParams( 106 new AnalysisSetContextBuilderOptionsParams(
131 new ContextBuilderOptions())); 107 new ContextBuilderOptions()));
132 expect(result, isNotNull); 108 expect(result, isNotNull);
133 } 109 }
134 110
135 test_handleAnalysisSetContextRoots() async { 111 test_handleAnalysisSetContextRoots() async {
136 var result = await plugin.handleAnalysisSetContextRoots( 112 var result = await plugin.handleAnalysisSetContextRoots(
137 new AnalysisSetContextRootsParams([contextRoot1])); 113 new AnalysisSetContextRootsParams([contextRoot1]));
138 expect(result, isNotNull); 114 expect(result, isNotNull);
139 AnalysisDriverGeneric driver = plugin.driverMap[contextRoot1]; 115 AnalysisDriverGeneric driver = _getDriver(contextRoot1);
140 expect(driver, isNotNull); 116 expect(driver, isNotNull);
141 expect((driver as MockAnalysisDriver).addedFiles, hasLength(1)); 117 expect((driver as MockAnalysisDriver).addedFiles, hasLength(1));
142 } 118 }
143 119
144 test_handleAnalysisSetPriorityFiles() async { 120 test_handleAnalysisSetPriorityFiles() async {
145 await plugin.handleAnalysisSetContextRoots( 121 await plugin.handleAnalysisSetContextRoots(
146 new AnalysisSetContextRootsParams([contextRoot1])); 122 new AnalysisSetContextRootsParams([contextRoot1]));
147 123
148 var result = await plugin.handleAnalysisSetPriorityFiles( 124 var result = await plugin.handleAnalysisSetPriorityFiles(
149 new AnalysisSetPriorityFilesParams([filePath1])); 125 new AnalysisSetPriorityFilesParams([filePath1]));
150 expect(result, isNotNull); 126 expect(result, isNotNull);
151 } 127 }
152 128
153 test_handleAnalysisSetSubscriptions() async { 129 test_handleAnalysisSetSubscriptions() async {
154 await plugin.handleAnalysisSetContextRoots( 130 await plugin.handleAnalysisSetContextRoots(
155 new AnalysisSetContextRootsParams([contextRoot1])); 131 new AnalysisSetContextRootsParams([contextRoot1]));
156 expect(plugin.subscriptionManager.servicesForFile(filePath1), isEmpty); 132 expect(plugin.subscriptionManager.servicesForFile(filePath1), isEmpty);
157 133
158 AnalysisSetSubscriptionsResult result = await plugin 134 AnalysisSetSubscriptionsResult result = await plugin
159 .handleAnalysisSetSubscriptions(new AnalysisSetSubscriptionsParams({ 135 .handleAnalysisSetSubscriptions(new AnalysisSetSubscriptionsParams({
160 AnalysisService.OUTLINE: [filePath1] 136 AnalysisService.OUTLINE: [filePath1]
161 })); 137 }));
162 expect(result, isNotNull); 138 expect(result, isNotNull);
163 expect(plugin.subscriptionManager.servicesForFile(filePath1), 139 expect(plugin.subscriptionManager.servicesForFile(filePath1),
164 [AnalysisService.OUTLINE]); 140 [AnalysisService.OUTLINE]);
165 } 141 }
166 142
167 test_handleAnalysisUpdateContent() async { 143 test_handleAnalysisUpdateContent_addChangeRemove() async {
168 await plugin.handleAnalysisSetContextRoots( 144 await plugin.handleAnalysisSetContextRoots(
169 new AnalysisSetContextRootsParams([contextRoot1])); 145 new AnalysisSetContextRootsParams([contextRoot1]));
170 var addResult = await plugin.handleAnalysisUpdateContent( 146 var addResult = await plugin.handleAnalysisUpdateContent(
171 new AnalysisUpdateContentParams( 147 new AnalysisUpdateContentParams(
172 {filePath1: new AddContentOverlay('class C {}')})); 148 {filePath1: new AddContentOverlay('class C {}')}));
173 expect(addResult, isNotNull); 149 expect(addResult, isNotNull);
174 var changeResult = await plugin 150 var changeResult = await plugin
175 .handleAnalysisUpdateContent(new AnalysisUpdateContentParams({ 151 .handleAnalysisUpdateContent(new AnalysisUpdateContentParams({
176 filePath1: 152 filePath1:
177 new ChangeContentOverlay([new SourceEdit(7, 0, ' extends Object')]) 153 new ChangeContentOverlay([new SourceEdit(7, 0, ' extends Object')])
178 })); 154 }));
179 expect(changeResult, isNotNull); 155 expect(changeResult, isNotNull);
180 var removeResult = await plugin.handleAnalysisUpdateContent( 156 var removeResult = await plugin.handleAnalysisUpdateContent(
181 new AnalysisUpdateContentParams( 157 new AnalysisUpdateContentParams(
182 {filePath1: new RemoveContentOverlay()})); 158 {filePath1: new RemoveContentOverlay()}));
183 expect(removeResult, isNotNull); 159 expect(removeResult, isNotNull);
184 } 160 }
185 161
162 test_handleAnalysisUpdateContent_changeNoAdd() async {
163 await plugin.handleAnalysisSetContextRoots(
164 new AnalysisSetContextRootsParams([contextRoot1]));
165 try {
166 await plugin.handleAnalysisUpdateContent(new AnalysisUpdateContentParams({
167 filePath1:
168 new ChangeContentOverlay([new SourceEdit(7, 0, ' extends Object')])
169 }));
170 fail('Expected RequestFailure');
171 } on RequestFailure {
172 // Expected
173 }
174 }
175
176 test_handleAnalysisUpdateContent_invalidChange() async {
177 await plugin.handleAnalysisSetContextRoots(
178 new AnalysisSetContextRootsParams([contextRoot1]));
179 await plugin.handleAnalysisUpdateContent(new AnalysisUpdateContentParams(
180 {filePath1: new AddContentOverlay('class C {}')}));
181 try {
182 await plugin.handleAnalysisUpdateContent(new AnalysisUpdateContentParams({
183 filePath1:
184 new ChangeContentOverlay([new SourceEdit(20, 5, 'class D {}')])
185 }));
186 fail('Expected RequestFailure');
187 } on RequestFailure {
188 // Expected
189 }
190 }
191
186 test_handleCompletionGetSuggestions() async { 192 test_handleCompletionGetSuggestions() async {
187 await plugin.handleAnalysisSetContextRoots( 193 await plugin.handleAnalysisSetContextRoots(
188 new AnalysisSetContextRootsParams([contextRoot1])); 194 new AnalysisSetContextRootsParams([contextRoot1]));
189 195
190 CompletionGetSuggestionsResult result = 196 CompletionGetSuggestionsResult result =
191 await plugin.handleCompletionGetSuggestions( 197 await plugin.handleCompletionGetSuggestions(
192 new CompletionGetSuggestionsParams(filePath1, 12)); 198 new CompletionGetSuggestionsParams(filePath1, 12));
193 expect(result, isNotNull); 199 expect(result, isNotNull);
194 } 200 }
195 201
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 expect(result.isCompatible, isTrue); 251 expect(result.isCompatible, isTrue);
246 expect(result.name, 'Test Plugin'); 252 expect(result.name, 'Test Plugin');
247 expect(result.version, '0.1.0'); 253 expect(result.version, '0.1.0');
248 } 254 }
249 255
250 @failingTest 256 @failingTest
251 void test_isCompatibleWith() { 257 void test_isCompatibleWith() {
252 fail('Not yet implemented.'); 258 fail('Not yet implemented.');
253 } 259 }
254 260
255 @failingTest
256 void test_onDone() { 261 void test_onDone() {
257 fail('Not yet implemented.'); 262 channel.sendDone();
258 } 263 }
259 264
260 @failingTest
261 void test_onError() { 265 void test_onError() {
262 fail('Not yet implemented.'); 266 channel.sendError(new ArgumentError(), new StackTrace.fromString(''));
263 } 267 }
264 268
265 @failingTest 269 test_onRequest_analysisGetNavigation() async {
266 void test_start() { 270 var result =
267 fail('Not yet implemented.'); 271 await channel.sendRequest(new AnalysisGetNavigationParams('', 1, 2));
272 expect(result, isNotNull);
273 }
274
275 test_onRequest_analysisHandleWatchEvents() async {
276 var result =
277 await channel.sendRequest(new AnalysisHandleWatchEventsParams([]));
278 expect(result, isNotNull);
279 }
280
281 test_onRequest_analysisReanalyze_all() async {
282 await channel
283 .sendRequest(new AnalysisSetContextRootsParams([contextRoot1]));
284 var result = await channel.sendRequest(new AnalysisReanalyzeParams());
285 expect(result, isNotNull);
286 }
287
288 test_onRequest_analysisReanalyze_subset() async {
289 await channel
290 .sendRequest(new AnalysisSetContextRootsParams([contextRoot1]));
291 await channel
292 .sendRequest(new AnalysisSetContextRootsParams([contextRoot2]));
293 var result = await channel
294 .sendRequest(new AnalysisReanalyzeParams(roots: [packagePath2]));
295 expect(result, isNotNull);
296 }
297
298 test_onRequest_analysisSetContextBuilderOptions() async {
299 var result = await channel.sendRequest(
300 new AnalysisSetContextBuilderOptionsParams(
301 new ContextBuilderOptions()));
302 expect(result, isNotNull);
303 }
304
305 test_onRequest_analysisSetContextRoots() async {
306 var result = await channel
307 .sendRequest(new AnalysisSetContextRootsParams([contextRoot1]));
308 expect(result, isNotNull);
309 AnalysisDriverGeneric driver = _getDriver(contextRoot1);
310 expect(driver, isNotNull);
311 expect((driver as MockAnalysisDriver).addedFiles, hasLength(1));
312 }
313
314 test_onRequest_analysisSetPriorityFiles() async {
315 await channel
316 .sendRequest(new AnalysisSetContextRootsParams([contextRoot1]));
317
318 var result = await channel
319 .sendRequest(new AnalysisSetPriorityFilesParams([filePath1]));
320 expect(result, isNotNull);
321 }
322
323 test_onRequest_analysisSetSubscriptions() async {
324 await channel
325 .sendRequest(new AnalysisSetContextRootsParams([contextRoot1]));
326 expect(plugin.subscriptionManager.servicesForFile(filePath1), isEmpty);
327
328 var result = await channel.sendRequest(new AnalysisSetSubscriptionsParams({
329 AnalysisService.OUTLINE: [filePath1]
330 }));
331 expect(result, isNotNull);
332 expect(plugin.subscriptionManager.servicesForFile(filePath1),
333 [AnalysisService.OUTLINE]);
334 }
335
336 test_onRequest_analysisUpdateContent_addChangeRemove() async {
337 await channel
338 .sendRequest(new AnalysisSetContextRootsParams([contextRoot1]));
339 var addResult = await channel.sendRequest(new AnalysisUpdateContentParams(
340 {filePath1: new AddContentOverlay('class C {}')}));
341 expect(addResult, isNotNull);
342 var changeResult =
343 await channel.sendRequest(new AnalysisUpdateContentParams({
344 filePath1:
345 new ChangeContentOverlay([new SourceEdit(7, 0, ' extends Object')])
346 }));
347 expect(changeResult, isNotNull);
348 var removeResult = await channel.sendRequest(
349 new AnalysisUpdateContentParams(
350 {filePath1: new RemoveContentOverlay()}));
351 expect(removeResult, isNotNull);
352 }
353
354 test_onRequest_completionGetSuggestions() async {
355 await channel
356 .sendRequest(new AnalysisSetContextRootsParams([contextRoot1]));
357
358 var result = await channel
359 .sendRequest(new CompletionGetSuggestionsParams(filePath1, 12));
360 expect(result, isNotNull);
361 }
362
363 test_onRequest_editGetAssists() async {
364 await channel
365 .sendRequest(new AnalysisSetContextRootsParams([contextRoot1]));
366
367 var result =
368 await channel.sendRequest(new EditGetAssistsParams(filePath1, 10, 0));
369 expect(result, isNotNull);
370 }
371
372 test_onRequest_editGetAvailableRefactorings() async {
373 await channel
374 .sendRequest(new AnalysisSetContextRootsParams([contextRoot1]));
375
376 var result = await channel
377 .sendRequest(new EditGetAvailableRefactoringsParams(filePath1, 10, 0));
378 expect(result, isNotNull);
379 }
380
381 test_onRequest_editGetFixes() async {
382 await channel
383 .sendRequest(new AnalysisSetContextRootsParams([contextRoot1]));
384
385 var result =
386 await channel.sendRequest(new EditGetFixesParams(filePath1, 13));
387 expect(result, isNotNull);
388 }
389
390 test_onRequest_editGetRefactoring() async {
391 await channel
392 .sendRequest(new AnalysisSetContextRootsParams([contextRoot1]));
393
394 var result = await channel.sendRequest(new EditGetRefactoringParams(
395 RefactoringKind.RENAME, filePath1, 7, 0, false));
396 expect(result, isNotNull);
397 }
398
399 test_onRequest_pluginShutdown() async {
400 var result = await channel.sendRequest(new PluginShutdownParams());
401 expect(result, isNotNull);
402 }
403
404 test_onRequest_pluginVersionCheck() async {
405 var response = (await channel.sendRequest(
406 new PluginVersionCheckParams('byteStorePath', 'sdkPath', '0.1.0')));
407 PluginVersionCheckResult result =
408 new PluginVersionCheckResult.fromResponse(response);
409 expect(result, isNotNull);
410 expect(result.interestingFiles, ['*.dart']);
411 expect(result.isCompatible, isTrue);
412 expect(result.name, 'Test Plugin');
413 expect(result.version, '0.1.0');
414 }
415
416 AnalysisDriverGeneric _getDriver(ContextRoot targetRoot) {
417 for (ContextRoot root in plugin.driverMap.keys) {
418 if (root.root == targetRoot.root) {
419 return plugin.driverMap[root];
420 }
421 }
422 return null;
268 } 423 }
269 } 424 }
270 425
271 /** 426 class _TestServerPlugin extends MockServerPlugin {
272 * A concrete implementation of a server plugin that is suitable for testing.
273 */
274 class TestServerPlugin extends ServerPlugin {
275 Map<String, List<AnalysisService>> latestSubscriptions; 427 Map<String, List<AnalysisService>> latestSubscriptions;
276 428
277 TestServerPlugin(ResourceProvider resourceProvider) : super(resourceProvider); 429 _TestServerPlugin(ResourceProvider resourceProvider)
278 430 : super(resourceProvider);
279 @override
280 List<String> get fileGlobsToAnalyze => <String>['*.dart'];
281
282 @override
283 String get name => 'Test Plugin';
284
285 @override
286 String get version => '0.1.0';
287
288 @override
289 AnalysisDriverGeneric createAnalysisDriver(ContextRoot contextRoot) {
290 return new MockAnalysisDriver();
291 }
292 431
293 @override 432 @override
294 void sendNotificationsForSubscriptions( 433 void sendNotificationsForSubscriptions(
295 Map<String, List<AnalysisService>> subscriptions) { 434 Map<String, List<AnalysisService>> subscriptions) {
296 latestSubscriptions = subscriptions; 435 latestSubscriptions = subscriptions;
297 } 436 }
298 } 437 }
OLDNEW
« no previous file with comments | « pkg/analyzer_plugin/test/plugin/navigation_mixin_test.dart ('k') | pkg/analyzer_plugin/test/plugin/test_all.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698