blob: b3504c2358d92285263dc0131c62931219796812 [file] [log] [blame]
import 'package:args/command_runner.dart';
import 'package:file/file.dart';
import 'package:flutter_plugin_tools/src/common.dart';
import 'package:test/test.dart';
import 'util.dart';
void main() {
RecordingProcessRunner processRunner;
CommandRunner runner;
List<String> plugins;
setUp(() {
initializeFakePackages();
processRunner = RecordingProcessRunner();
plugins = [];
final SamplePluginCommand samplePluginCommand = SamplePluginCommand(
plugins,
mockPackagesDir,
mockFileSystem,
processRunner: processRunner,
);
runner =
CommandRunner<Null>('common_command', 'Test for common functionality');
runner.addCommand(samplePluginCommand);
});
tearDown(() {
mockPackagesDir.deleteSync(recursive: true);
});
test('all plugins from file system', () async {
final Directory plugin1 = createFakePlugin('plugin1');
final Directory plugin2 = createFakePlugin('plugin2');
await runner.run(<String>['sample']);
expect(plugins, unorderedEquals(<String>[plugin1.path, plugin2.path]));
});
test('exclude plugins when plugins flag is specified', () async {
createFakePlugin('plugin1');
final Directory plugin2 = createFakePlugin('plugin2');
await runner.run(
<String>['sample', '--plugins=plugin1,plugin2', '--exclude=plugin1']);
expect(plugins, unorderedEquals(<String>[plugin2.path]));
});
test('exclude plugins when plugins flag isn\'t specified', () async {
createFakePlugin('plugin1');
createFakePlugin('plugin2');
await runner.run(<String>['sample', '--exclude=plugin1,plugin2']);
expect(plugins, unorderedEquals(<String>[]));
});
test('exclude federated plugins when plugins flag is specified', () async {
createFakePlugin('plugin1', parentDirectoryName: 'federated');
final Directory plugin2 = createFakePlugin('plugin2');
await runner.run(<String>[
'sample',
'--plugins=federated/plugin1,plugin2',
'--exclude=federated/plugin1'
]);
expect(plugins, unorderedEquals(<String>[plugin2.path]));
});
test('exclude entire federated plugins when plugins flag is specified',
() async {
createFakePlugin('plugin1', parentDirectoryName: 'federated');
final Directory plugin2 = createFakePlugin('plugin2');
await runner.run(<String>[
'sample',
'--plugins=federated/plugin1,plugin2',
'--exclude=federated'
]);
expect(plugins, unorderedEquals(<String>[plugin2.path]));
});
}
class SamplePluginCommand extends PluginCommand {
SamplePluginCommand(
this.plugins_,
Directory packagesDir,
FileSystem fileSystem, {
ProcessRunner processRunner = const ProcessRunner(),
}) : super(packagesDir, fileSystem, processRunner: processRunner);
List<String> plugins_;
@override
final String name = 'sample';
@override
final String description = 'sample command';
@override
Future<Null> run() async {
await for (Directory package in getPlugins()) {
this.plugins_.add(package.path);
}
}
}