// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. library analyzer_cli.test.plugin_manager_test; import 'package:analyzer/src/plugin/plugin_configuration.dart'; import 'package:analyzer_cli/src/plugin/plugin_manager.dart'; import 'package:test/test.dart'; main() { group('plugin manager tests', () { test('combine plugin info', () { PluginInfo localInfo = new PluginInfo(name: 'my_plugin'); PluginInfo manifestInfo = new PluginInfo( className: 'MyPlugin', libraryUri: 'my_plugin/my_plugin.dart'); PluginInfo merged = combine(localInfo, manifestInfo); expect(merged.name, equals('my_plugin')); expect(merged.className, equals('MyPlugin')); expect(merged.libraryUri, equals('my_plugin/my_plugin.dart')); }); test('find manifest', () { const manifestSrc = ''' library_uri: 'my_plugin/my_plugin.dart' '''; var packageMap = {'my_plugin': new Uri.file('my_plugin')}; PluginManager pm = new PluginManager(packageMap, 'analyzer', (Uri uri) => manifestSrc); PluginManifest manifest = pm.findManifest('my_plugin'); expect(manifest, isNotNull); expect(manifest.plugin.libraryUri, equals('my_plugin/my_plugin.dart')); }); final plugin1Uri = new Uri.file('my_plugin1'); final plugin2Uri = new Uri.file('my_plugin2'); final plugin3Uri = new Uri.file('my_plugin3'); const serverPluginManifest = ''' library_uri: 'my_plugin2/my_plugin2.dart' contributes_to: analysis_server '''; const analyzerPluginManifest = ''' library_uri: 'my_plugin3/my_plugin3.dart' contributes_to: analyzer '''; var packageMap = { 'my_plugin': plugin1Uri, 'my_plugin2': plugin2Uri, 'my_plugin3': plugin3Uri }; var manifestReader = (Uri uri) { if (uri == plugin2Uri) return serverPluginManifest; if (uri == plugin3Uri) return analyzerPluginManifest; return null; }; test('get plugin details', () { PluginManager pm = new PluginManager(packageMap, 'analysis_server', manifestReader); PluginInfo notFound = new PluginInfo(name: 'my_plugin1'); PluginInfo applicable = new PluginInfo(name: 'my_plugin2'); PluginInfo notApplicable = new PluginInfo(name: 'my_plugin3'); PluginConfig localConfig = new PluginConfig([notFound, applicable, notApplicable]); Iterable details = pm.getPluginDetails(localConfig); expect(details, hasLength(3)); List plugins = sortByName(details); expect(plugins[0].plugin.name, equals('my_plugin1')); expect(plugins[0].status, equals(PluginStatus.NotFound)); expect(plugins[1].plugin.name, equals('my_plugin2')); expect( plugins[1].plugin.libraryUri, equals('my_plugin2/my_plugin2.dart')); expect(plugins[1].status, equals(PluginStatus.Applicable)); expect(plugins[2].plugin.name, equals('my_plugin3')); expect(plugins[2].status, equals(PluginStatus.NotApplicable)); }); }); } List sortByName(Iterable details) => details.toList() ..sort((p1, p2) => p1.plugin.name.compareTo(p2.plugin.name));