Index: pkg/analysis_server/test/src/plugin/plugin_manager_test.dart |
diff --git a/pkg/analysis_server/test/src/plugin/plugin_manager_test.dart b/pkg/analysis_server/test/src/plugin/plugin_manager_test.dart |
index fbd394257a60b2c6b7debb1edf84a9f092b3b6ae..45867729fdd56c25b065b2a81bd91a65aa3f23ea 100644 |
--- a/pkg/analysis_server/test/src/plugin/plugin_manager_test.dart |
+++ b/pkg/analysis_server/test/src/plugin/plugin_manager_test.dart |
@@ -394,6 +394,80 @@ class PluginManagerTest { |
expect(manager.notificationManager, notificationManager); |
} |
+ void test_pathsFor_withPackagesFile() { |
+ path.Context context = resourceProvider.pathContext; |
+ // |
+ // Build the minimal directory structure for a plugin package that includes |
+ // a .packages file. |
+ // |
+ String pluginDirPath = resourceProvider.convertPath('/plugin'); |
+ String pluginFilePath = context.join(pluginDirPath, 'bin', 'plugin.dart'); |
+ resourceProvider.newFile(pluginFilePath, ''); |
+ String packagesFilePath = context.join(pluginDirPath, '.packages'); |
+ resourceProvider.newFile(packagesFilePath, ''); |
+ // |
+ // Test path computation. |
+ // |
+ List<String> paths = manager.pathsFor(pluginDirPath); |
+ expect(paths, hasLength(2)); |
+ expect(paths[0], pluginFilePath); |
+ expect(paths[1], packagesFilePath); |
+ } |
+ |
+ void test_pathsFor_withPubspec_inBazelWorkspace() { |
+ path.Context context = resourceProvider.pathContext; |
+ // |
+ // Build a Bazel workspace containing four packages, including the plugin. |
+ // |
+ String rootPath = resourceProvider.convertPath('/workspaceRoot'); |
+ resourceProvider.newFile(context.join(rootPath, 'WORKSPACE'), ''); |
+ resourceProvider.newFolder(context.join(rootPath, 'bazel-bin')); |
+ resourceProvider.newFolder(context.join(rootPath, 'bazel-genfiles')); |
+ |
+ String newPackage(String packageName, [List<String> dependencies]) { |
+ String packageRoot = |
+ context.join(rootPath, 'third_party', 'dart', packageName); |
+ resourceProvider.newFile( |
+ context.join(packageRoot, 'lib', packageName + '.dart'), ''); |
+ StringBuffer buffer = new StringBuffer(); |
+ if (dependencies != null) { |
+ buffer.writeln('dependencies:'); |
+ for (String dependency in dependencies) { |
+ buffer.writeln(' $dependency: any'); |
+ } |
+ } |
+ resourceProvider.newFile( |
+ context.join(packageRoot, 'pubspec.yaml'), buffer.toString()); |
+ return packageRoot; |
+ } |
+ |
+ String pluginDirPath = newPackage('plugin', ['b', 'c']); |
+ newPackage('b', ['d']); |
+ newPackage('c', ['d']); |
+ newPackage('d'); |
+ String pluginFilePath = context.join(pluginDirPath, 'bin', 'plugin.dart'); |
+ resourceProvider.newFile(pluginFilePath, ''); |
+ // |
+ // Test path computation. |
+ // |
+ List<String> paths = manager.pathsFor(pluginDirPath); |
+ expect(paths, hasLength(2)); |
+ expect(paths[0], pluginFilePath); |
+ File packagesFile = resourceProvider.getFile(paths[1]); |
+ expect(packagesFile.exists, isTrue); |
+ String content = packagesFile.readAsStringSync(); |
+ List<String> lines = content.split('\n'); |
+ expect( |
+ lines, |
+ unorderedEquals([ |
+ 'plugin:file:///workspaceRoot/third_party/dart/plugin/lib', |
+ 'b:file:///workspaceRoot/third_party/dart/b/lib', |
+ 'c:file:///workspaceRoot/third_party/dart/c/lib', |
+ 'd:file:///workspaceRoot/third_party/dart/d/lib', |
+ '' |
+ ])); |
+ } |
+ |
void test_pluginsForContextRoot_none() { |
ContextRoot contextRoot = new ContextRoot('/pkg1', []); |
expect(manager.pluginsForContextRoot(contextRoot), isEmpty); |