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

Side by Side Diff: pkg/analysis_server/test/src/plugin/plugin_manager_test.dart

Issue 2874803003: Add support for built-in plugins (Closed)
Patch Set: Created 3 years, 7 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'; 5 import 'dart:async';
6 import 'dart:io' as io; 6 import 'dart:io' as io;
7 7
8 import 'package:analysis_server/src/plugin/notification_manager.dart'; 8 import 'package:analysis_server/src/plugin/notification_manager.dart';
9 import 'package:analysis_server/src/plugin/plugin_manager.dart'; 9 import 'package:analysis_server/src/plugin/plugin_manager.dart';
10 import 'package:analyzer/context/context_root.dart'; 10 import 'package:analyzer/context/context_root.dart';
11 import 'package:analyzer/file_system/memory_file_system.dart'; 11 import 'package:analyzer/file_system/memory_file_system.dart';
12 import 'package:analyzer/file_system/physical_file_system.dart'; 12 import 'package:analyzer/file_system/physical_file_system.dart';
13 import 'package:analyzer/instrumentation/instrumentation.dart'; 13 import 'package:analyzer/instrumentation/instrumentation.dart';
14 import 'package:analyzer_plugin/channel/channel.dart'; 14 import 'package:analyzer_plugin/channel/channel.dart';
15 import 'package:analyzer_plugin/protocol/protocol.dart'; 15 import 'package:analyzer_plugin/protocol/protocol.dart';
16 import 'package:analyzer_plugin/protocol/protocol_generated.dart' 16 import 'package:analyzer_plugin/protocol/protocol_generated.dart'
17 hide ContextRoot; 17 hide ContextRoot;
18 import 'package:path/path.dart' as path; 18 import 'package:path/path.dart' as path;
19 import 'package:test/test.dart'; 19 import 'package:test/test.dart';
20 import 'package:test_reflective_loader/test_reflective_loader.dart'; 20 import 'package:test_reflective_loader/test_reflective_loader.dart';
21 import 'package:watcher/watcher.dart' as watcher; 21 import 'package:watcher/watcher.dart' as watcher;
22 22
23 main() { 23 main() {
24 defineReflectiveSuite(() { 24 defineReflectiveSuite(() {
25 defineReflectiveTests(PluginInfoTest); 25 defineReflectiveTests(BuiltInPluginInfoTest);
26 defineReflectiveTests(DiscoveredPluginInfoTest);
26 defineReflectiveTests(PluginManagerTest); 27 defineReflectiveTests(PluginManagerTest);
27 defineReflectiveTests(PluginManagerFromDiskTest); 28 defineReflectiveTests(PluginManagerFromDiskTest);
28 defineReflectiveTests(PluginSessionTest); 29 defineReflectiveTests(PluginSessionTest);
29 defineReflectiveTests(PluginSessionFromDiskTest); 30 defineReflectiveTests(PluginSessionFromDiskTest);
30 }); 31 });
31 } 32 }
32 33
33 @reflectiveTest 34 @reflectiveTest
34 class PluginInfoTest { 35 class BuiltInPluginInfoTest {
36 TestNotificationManager notificationManager;
37 BuiltInPluginInfo plugin;
38
39 void setUp() {
40 notificationManager = new TestNotificationManager();
41 plugin = new BuiltInPluginInfo(null, 'test plugin', notificationManager,
42 InstrumentationService.NULL_SERVICE);
43 }
44
45 test_addContextRoot() {
46 ContextRoot contextRoot1 = new ContextRoot('/pkg1', []);
47 plugin.addContextRoot(contextRoot1);
48 expect(plugin.contextRoots, [contextRoot1]);
49 plugin.addContextRoot(contextRoot1);
50 expect(plugin.contextRoots, [contextRoot1]);
51 }
52
53 test_creation() {
54 expect(plugin.pluginId, 'test plugin');
55 expect(plugin.notificationManager, notificationManager);
56 expect(plugin.contextRoots, isEmpty);
57 expect(plugin.currentSession, isNull);
58 }
59
60 test_removeContextRoot() {
61 ContextRoot contextRoot1 = new ContextRoot('/pkg1', []);
62 ContextRoot contextRoot2 = new ContextRoot('/pkg2', []);
63 plugin.addContextRoot(contextRoot1);
64 expect(plugin.contextRoots, unorderedEquals([contextRoot1]));
65 plugin.addContextRoot(contextRoot2);
66 expect(plugin.contextRoots, unorderedEquals([contextRoot1, contextRoot2]));
67 plugin.removeContextRoot(contextRoot1);
68 expect(plugin.contextRoots, unorderedEquals([contextRoot2]));
69 plugin.removeContextRoot(contextRoot2);
70 expect(plugin.contextRoots, isEmpty);
71 }
72
73 @failingTest
74 test_start_notRunning() {
75 fail('Not tested');
76 }
77
78 test_start_running() async {
79 plugin.currentSession = new PluginSession(plugin);
80 try {
81 await plugin.start('');
82 fail('Expected a StateError');
83 } on StateError {
84 // Expected.
85 }
86 }
87
88 test_stop_notRunning() {
89 expect(() => plugin.stop(), throwsA(new isInstanceOf<StateError>()));
90 }
91
92 test_stop_running() {
93 PluginSession session = new PluginSession(plugin);
94 TestServerCommunicationChannel channel =
95 new TestServerCommunicationChannel(session);
96 plugin.currentSession = session;
97 plugin.stop();
98 expect(plugin.currentSession, isNull);
99 expect(channel.sentRequests, hasLength(1));
100 expect(channel.sentRequests[0].method, 'plugin.shutdown');
101 }
102 }
103
104 @reflectiveTest
105 class DiscoveredPluginInfoTest {
35 MemoryResourceProvider resourceProvider; 106 MemoryResourceProvider resourceProvider;
36 TestNotificationManager notificationManager; 107 TestNotificationManager notificationManager;
37 String pluginPath = '/pluginDir'; 108 String pluginPath = '/pluginDir';
38 String executionPath = '/pluginDir/bin/plugin.dart'; 109 String executionPath = '/pluginDir/bin/plugin.dart';
39 String packagesPath = '/pluginDir/.packages'; 110 String packagesPath = '/pluginDir/.packages';
40 PluginInfo plugin; 111 DiscoveredPluginInfo plugin;
41 112
42 void setUp() { 113 void setUp() {
43 resourceProvider = new MemoryResourceProvider(); 114 resourceProvider = new MemoryResourceProvider();
44 notificationManager = new TestNotificationManager(); 115 notificationManager = new TestNotificationManager();
45 plugin = new PluginInfo(pluginPath, executionPath, packagesPath, 116 plugin = new DiscoveredPluginInfo(pluginPath, executionPath, packagesPath,
46 notificationManager, InstrumentationService.NULL_SERVICE); 117 notificationManager, InstrumentationService.NULL_SERVICE);
47 } 118 }
48 119
49 test_addContextRoot() { 120 test_addContextRoot() {
50 ContextRoot contextRoot1 = new ContextRoot('/pkg1', []); 121 ContextRoot contextRoot1 = new ContextRoot('/pkg1', []);
51 plugin.addContextRoot(contextRoot1); 122 plugin.addContextRoot(contextRoot1);
52 expect(plugin.contextRoots, [contextRoot1]); 123 expect(plugin.contextRoots, [contextRoot1]);
53 plugin.addContextRoot(contextRoot1); 124 plugin.addContextRoot(contextRoot1);
54 expect(plugin.contextRoots, [contextRoot1]); 125 expect(plugin.contextRoots, [contextRoot1]);
55 } 126 }
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 io.Directory pkg1Dir = io.Directory.systemTemp.createTempSync('pkg1'); 253 io.Directory pkg1Dir = io.Directory.systemTemp.createTempSync('pkg1');
183 String pkgPath = pkg1Dir.resolveSymbolicLinksSync(); 254 String pkgPath = pkg1Dir.resolveSymbolicLinksSync();
184 await withPlugin( 255 await withPlugin(
185 pluginName: 'plugin1', 256 pluginName: 'plugin1',
186 test: (String plugin1Path) async { 257 test: (String plugin1Path) async {
187 ContextRoot contextRoot = new ContextRoot(pkgPath, []); 258 ContextRoot contextRoot = new ContextRoot(pkgPath, []);
188 await manager.addPluginToContextRoot(contextRoot, plugin1Path); 259 await manager.addPluginToContextRoot(contextRoot, plugin1Path);
189 List<PluginInfo> plugins = manager.pluginsForContextRoot(contextRoot); 260 List<PluginInfo> plugins = manager.pluginsForContextRoot(contextRoot);
190 expect(plugins, hasLength(1)); 261 expect(plugins, hasLength(1));
191 watcher.WatchEvent watchEvent = new watcher.WatchEvent( 262 watcher.WatchEvent watchEvent = new watcher.WatchEvent(
192 watcher.ChangeType.MODIFY, 263 watcher.ChangeType.MODIFY, path.join(pkgPath, 'lib', 'lib.dart'));
193 path.join(plugin1Path, 'lib', 'lib.dart'));
194 List<Future<Response>> responses = 264 List<Future<Response>> responses =
195 await manager.broadcastWatchEvent(watchEvent); 265 await manager.broadcastWatchEvent(watchEvent);
196 expect(responses, hasLength(1)); 266 expect(responses, hasLength(1));
197 Response response = await responses[0]; 267 Response response = await responses[0];
198 expect(response, isNotNull); 268 expect(response, isNotNull);
199 expect(response.error, isNull); 269 expect(response.error, isNull);
200 await manager.stopAll(); 270 await manager.stopAll();
201 }); 271 });
202 pkg1Dir.deleteSync(recursive: true); 272 pkg1Dir.deleteSync(recursive: true);
203 } 273 }
204 274
205 test_pluginsForContextRoot_multiple() async { 275 test_pluginsForContextRoot_multiple() async {
206 io.Directory pkg1Dir = io.Directory.systemTemp.createTempSync('pkg1'); 276 io.Directory pkg1Dir = io.Directory.systemTemp.createTempSync('pkg1');
207 String pkgPath = pkg1Dir.resolveSymbolicLinksSync(); 277 String pkgPath = pkg1Dir.resolveSymbolicLinksSync();
208 await withPlugin( 278 await withPlugin(
209 pluginName: 'plugin1', 279 pluginName: 'plugin1',
210 test: (String plugin1Path) async { 280 test: (String plugin1Path) async {
211 await withPlugin( 281 await withPlugin(
212 pluginName: 'plugin2', 282 pluginName: 'plugin2',
213 test: (String plugin2Path) async { 283 test: (String plugin2Path) async {
214 ContextRoot contextRoot = new ContextRoot(pkgPath, []); 284 ContextRoot contextRoot = new ContextRoot(pkgPath, []);
215 await manager.addPluginToContextRoot(contextRoot, plugin1Path); 285 await manager.addPluginToContextRoot(contextRoot, plugin1Path);
216 await manager.addPluginToContextRoot(contextRoot, plugin2Path); 286 await manager.addPluginToContextRoot(contextRoot, plugin2Path);
217 287
218 List<PluginInfo> plugins = 288 List<PluginInfo> plugins =
219 manager.pluginsForContextRoot(contextRoot); 289 manager.pluginsForContextRoot(contextRoot);
220 expect(plugins, hasLength(2)); 290 expect(plugins, hasLength(2));
221 List<String> paths = 291 List<String> paths = plugins
222 plugins.map((PluginInfo plugin) => plugin.path).toList(); 292 .map((PluginInfo plugin) => plugin.pluginId)
293 .toList();
223 expect(paths, unorderedEquals([plugin1Path, plugin2Path])); 294 expect(paths, unorderedEquals([plugin1Path, plugin2Path]));
224 295
225 await manager.stopAll(); 296 await manager.stopAll();
226 }); 297 });
227 }); 298 });
228 pkg1Dir.deleteSync(recursive: true); 299 pkg1Dir.deleteSync(recursive: true);
229 } 300 }
230 301
231 test_pluginsForContextRoot_one() async { 302 test_pluginsForContextRoot_one() async {
232 io.Directory pkg1Dir = io.Directory.systemTemp.createTempSync('pkg1'); 303 io.Directory pkg1Dir = io.Directory.systemTemp.createTempSync('pkg1');
233 String pkgPath = pkg1Dir.resolveSymbolicLinksSync(); 304 String pkgPath = pkg1Dir.resolveSymbolicLinksSync();
234 await withPlugin(test: (String pluginPath) async { 305 await withPlugin(test: (String pluginPath) async {
235 ContextRoot contextRoot = new ContextRoot(pkgPath, []); 306 ContextRoot contextRoot = new ContextRoot(pkgPath, []);
236 await manager.addPluginToContextRoot(contextRoot, pluginPath); 307 await manager.addPluginToContextRoot(contextRoot, pluginPath);
237 308
238 List<PluginInfo> plugins = manager.pluginsForContextRoot(contextRoot); 309 List<PluginInfo> plugins = manager.pluginsForContextRoot(contextRoot);
239 expect(plugins, hasLength(1)); 310 expect(plugins, hasLength(1));
240 expect(plugins[0].path, pluginPath); 311 expect(plugins[0].pluginId, pluginPath);
241 312
242 await manager.stopAll(); 313 await manager.stopAll();
243 }); 314 });
244 pkg1Dir.deleteSync(recursive: true); 315 pkg1Dir.deleteSync(recursive: true);
245 } 316 }
246 317
247 test_removedContextRoot() async { 318 test_removedContextRoot() async {
248 io.Directory pkg1Dir = io.Directory.systemTemp.createTempSync('pkg1'); 319 io.Directory pkg1Dir = io.Directory.systemTemp.createTempSync('pkg1');
249 String pkgPath = pkg1Dir.resolveSymbolicLinksSync(); 320 String pkgPath = pkg1Dir.resolveSymbolicLinksSync();
250 await withPlugin(test: (String pluginPath) async { 321 await withPlugin(test: (String pluginPath) async {
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
299 } 370 }
300 371
301 @reflectiveTest 372 @reflectiveTest
302 class PluginSessionFromDiskTest extends PluginTestSupport { 373 class PluginSessionFromDiskTest extends PluginTestSupport {
303 test_start_notRunning() async { 374 test_start_notRunning() async {
304 await withPlugin(test: (String pluginPath) async { 375 await withPlugin(test: (String pluginPath) async {
305 String packagesPath = path.join(pluginPath, '.packages'); 376 String packagesPath = path.join(pluginPath, '.packages');
306 String mainPath = path.join(pluginPath, 'bin', 'plugin.dart'); 377 String mainPath = path.join(pluginPath, 'bin', 'plugin.dart');
307 String byteStorePath = path.join(pluginPath, 'byteStore'); 378 String byteStorePath = path.join(pluginPath, 'byteStore');
308 new io.Directory(byteStorePath).createSync(); 379 new io.Directory(byteStorePath).createSync();
309 PluginInfo plugin = new PluginInfo(pluginPath, mainPath, packagesPath, 380 PluginInfo plugin = new DiscoveredPluginInfo(
310 notificationManager, InstrumentationService.NULL_SERVICE); 381 pluginPath,
382 mainPath,
383 packagesPath,
384 notificationManager,
385 InstrumentationService.NULL_SERVICE);
311 PluginSession session = new PluginSession(plugin); 386 PluginSession session = new PluginSession(plugin);
312 plugin.currentSession = session; 387 plugin.currentSession = session;
313 expect(await session.start(byteStorePath), isTrue); 388 expect(await session.start(byteStorePath), isTrue);
314 await session.stop(); 389 await session.stop();
315 }); 390 });
316 } 391 }
317 } 392 }
318 393
319 @reflectiveTest 394 @reflectiveTest
320 class PluginSessionTest { 395 class PluginSessionTest {
321 MemoryResourceProvider resourceProvider; 396 MemoryResourceProvider resourceProvider;
322 TestNotificationManager notificationManager; 397 TestNotificationManager notificationManager;
323 String pluginPath = '/pluginDir'; 398 String pluginPath = '/pluginDir';
324 String executionPath = '/pluginDir/bin/plugin.dart'; 399 String executionPath = '/pluginDir/bin/plugin.dart';
325 String packagesPath = '/pluginDir/.packages'; 400 String packagesPath = '/pluginDir/.packages';
326 PluginInfo plugin; 401 PluginInfo plugin;
327 PluginSession session; 402 PluginSession session;
328 403
329 void setUp() { 404 void setUp() {
330 resourceProvider = new MemoryResourceProvider(); 405 resourceProvider = new MemoryResourceProvider();
331 notificationManager = new TestNotificationManager(); 406 notificationManager = new TestNotificationManager();
332 plugin = new PluginInfo(pluginPath, executionPath, packagesPath, 407 plugin = new DiscoveredPluginInfo(pluginPath, executionPath, packagesPath,
333 notificationManager, InstrumentationService.NULL_SERVICE); 408 notificationManager, InstrumentationService.NULL_SERVICE);
334 session = new PluginSession(plugin); 409 session = new PluginSession(plugin);
335 } 410 }
336 411
337 void test_handleNotification() { 412 void test_handleNotification() {
338 Notification notification = 413 Notification notification =
339 new AnalysisErrorsParams('/test.dart', <AnalysisError>[]) 414 new AnalysisErrorsParams('/test.dart', <AnalysisError>[])
340 .toNotification(); 415 .toNotification();
341 expect(notificationManager.notifications, hasLength(0)); 416 expect(notificationManager.notifications, hasLength(0));
342 session.handleNotification(notification); 417 session.handleNotification(notification);
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
603 void onNotification(Notification notification), 678 void onNotification(Notification notification),
604 {Function onError, void onDone()}) { 679 {Function onError, void onDone()}) {
605 fail('Unexpected invocation of listen'); 680 fail('Unexpected invocation of listen');
606 } 681 }
607 682
608 @override 683 @override
609 void sendRequest(Request request) { 684 void sendRequest(Request request) {
610 sentRequests.add(request); 685 sentRequests.add(request);
611 } 686 }
612 } 687 }
OLDNEW
« no previous file with comments | « pkg/analysis_server/test/src/domain_abstract_test.dart ('k') | pkg/analyzer/lib/instrumentation/instrumentation.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698