blob: 84ec8c8e08fc41a869225b5c08b9e345c0e65c91 [file] [log] [blame]
// 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.test.src.plugin.plugin_config_test;
import 'package:analyzer/source/analysis_options_provider.dart';
import 'package:analyzer/src/plugin/plugin_configuration.dart';
import 'package:test/test.dart';
import 'package:yaml/yaml.dart';
main() {
group('plugin config tests', () {
group('parsing', () {
test('plugin map', () {
const optionsSrc = '''
analyzer:
plugins:
my_plugin1: ^0.1.0 #shorthand
my_plugin2:
version: ^0.2.0
my_plugin3:
class_name: MyPlugin
library_uri: myplugin/myplugin.dart
path: '/u/disk/src/'
''';
var config = parseConfig(optionsSrc);
var plugins = pluginsSortedByName(config.plugins);
expect(plugins, hasLength(3));
expect(plugins[0].name, equals('my_plugin1'));
expect(plugins[0].version, equals('^0.1.0'));
expect(plugins[1].name, equals('my_plugin2'));
expect(plugins[1].version, equals('^0.2.0'));
expect(plugins[2].name, equals('my_plugin3'));
expect(plugins[2].version, isNull);
expect(plugins[2].path, equals('/u/disk/src/'));
expect(plugins[2].libraryUri, equals('myplugin/myplugin.dart'));
expect(plugins[2].className, equals('MyPlugin'));
});
test('plugin map (empty)', () {
const optionsSrc = '''
analyzer:
plugins:
# my_plugin1: ^0.1.0 #shorthand
''';
var config = parseConfig(optionsSrc);
// Commented out plugins shouldn't cause a parse failure.
expect(config.plugins, hasLength(0));
});
test('plugin manifest', () {
const manifestSrc = '''
class_name: AnalyzerPlugin
library_uri: myplugin/analyzer_plugin.dart
contributes_to: analyzer
''';
var manifest = parsePluginManifestString(manifestSrc);
var plugin = manifest.plugin;
expect(plugin.libraryUri, equals('myplugin/analyzer_plugin.dart'));
expect(plugin.className, equals('AnalyzerPlugin'));
expect(manifest.contributesTo, unorderedEquals(['analyzer']));
});
test('plugin manifest (contributes_to list)', () {
const manifestSrc = '''
class_name: AnalyzerPlugin
library_uri: myplugin/analyzer_plugin.dart
contributes_to:
- analyzer
- analysis_server
''';
var manifest = parsePluginManifestString(manifestSrc);
var plugin = manifest.plugin;
expect(plugin.libraryUri, equals('myplugin/analyzer_plugin.dart'));
expect(plugin.className, equals('AnalyzerPlugin'));
expect(manifest.contributesTo,
unorderedEquals(['analyzer', 'analysis_server']));
});
group('errors', () {
test('bad config format', () {
const optionsSrc = '''
analyzer:
plugins:
- my_plugin1
- my_plugin2
''';
try {
parseConfig(optionsSrc);
fail('expected PluginConfigFormatException');
} on PluginConfigFormatException catch (e) {
expect(
e.message,
equals(
'Unrecognized plugin config format, expected `YamlMap`, got `YamlList`'));
expect(e.yamlNode, new isInstanceOf<YamlList>());
}
});
test('bad manifest format', () {
const manifestSource = '''
library_uri:
- should be a scalar uri
''';
try {
parsePluginManifestString(manifestSource);
fail('expected PluginConfigFormatException');
} on PluginConfigFormatException catch (e) {
expect(
e.message,
equals(
'Unable to parse pugin manifest, expected `String`, got `YamlList`'));
expect(e.yamlNode, new isInstanceOf<YamlList>());
}
});
});
});
});
}
PluginConfig parseConfig(String optionsSrc) {
var options = new AnalysisOptionsProvider().getOptionsFromString(optionsSrc);
return new PluginConfig.fromOptions(options);
}
List<PluginInfo> pluginsSortedByName(Iterable<PluginInfo> plugins) =>
plugins.toList()..sort((p1, p2) => p1.name.compareTo(p2.name));