blob: 61f86f1c66d7b0bd3faf5a29c6618364bb741909 [file] [log] [blame]
// Copyright 2013 The Flutter Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:args/command_runner.dart';
import 'package:file/file.dart';
import 'package:flutter_plugin_tools/src/list_command.dart';
import 'package:test/test.dart';
import 'mocks.dart';
import 'util.dart';
void main() {
group('ListCommand', () {
late MockPlatform mockPlatform;
late Directory packagesDir;
late CommandRunner<void> runner;
setUp(() {
mockPlatform = MockPlatform();
(:packagesDir, processRunner: _, gitProcessRunner: _, gitDir: _) =
configureBaseCommandMocks(platform: mockPlatform);
final command = ListCommand(packagesDir, platform: mockPlatform);
runner = CommandRunner<void>('list_test', 'Test for $ListCommand');
runner.addCommand(command);
});
test('lists top-level packages', () async {
createFakePackage('package1', packagesDir);
createFakePlugin('plugin2', packagesDir);
final List<String> plugins = await runCapturingPrint(runner, <String>[
'list',
'--type=package',
]);
expect(
plugins,
orderedEquals(<String>['/packages/package1', '/packages/plugin2']),
);
});
test('lists examples', () async {
createFakePlugin('plugin1', packagesDir);
createFakePlugin(
'plugin2',
packagesDir,
examples: <String>['example1', 'example2'],
);
createFakePlugin('plugin3', packagesDir, examples: <String>[]);
final List<String> examples = await runCapturingPrint(runner, <String>[
'list',
'--type=example',
]);
expect(
examples,
orderedEquals(<String>[
'/packages/plugin1/example',
'/packages/plugin2/example/example1',
'/packages/plugin2/example/example2',
]),
);
});
test('lists packages and subpackages', () async {
createFakePackage('package1', packagesDir);
createFakePlugin(
'plugin2',
packagesDir,
examples: <String>['example1', 'example2'],
);
createFakePlugin('plugin3', packagesDir, examples: <String>[]);
final List<String> packages = await runCapturingPrint(runner, <String>[
'list',
'--type=package-or-subpackage',
]);
expect(
packages,
unorderedEquals(<String>[
'/packages/package1',
'/packages/package1/example',
'/packages/plugin2',
'/packages/plugin2/example/example1',
'/packages/plugin2/example/example2',
'/packages/plugin3',
]),
);
});
test('lists files', () async {
createFakePlugin('plugin1', packagesDir);
createFakePlugin(
'plugin2',
packagesDir,
examples: <String>['example1', 'example2'],
);
createFakePlugin('plugin3', packagesDir, examples: <String>[]);
final List<String> examples = await runCapturingPrint(runner, <String>[
'list',
'--type=file',
]);
expect(
examples,
unorderedEquals(<String>[
'/packages/plugin1/pubspec.yaml',
'/packages/plugin1/AUTHORS',
'/packages/plugin1/CHANGELOG.md',
'/packages/plugin1/README.md',
'/packages/plugin1/example/pubspec.yaml',
'/packages/plugin2/pubspec.yaml',
'/packages/plugin2/AUTHORS',
'/packages/plugin2/CHANGELOG.md',
'/packages/plugin2/README.md',
'/packages/plugin2/example/example1/pubspec.yaml',
'/packages/plugin2/example/example2/pubspec.yaml',
'/packages/plugin3/pubspec.yaml',
'/packages/plugin3/AUTHORS',
'/packages/plugin3/CHANGELOG.md',
'/packages/plugin3/README.md',
]),
);
});
test('lists plugins using federated plugin layout', () async {
createFakePlugin('plugin1', packagesDir);
// Create a federated plugin by creating a directory under the packages
// directory with several packages underneath.
final Directory federatedPluginDir = packagesDir.childDirectory(
'my_plugin',
)..createSync();
createFakePlugin('my_plugin', federatedPluginDir);
createFakePlugin('my_plugin_web', federatedPluginDir);
createFakePlugin('my_plugin_macos', federatedPluginDir);
// Test without specifying `--type`.
final List<String> plugins = await runCapturingPrint(runner, <String>[
'list',
]);
expect(
plugins,
unorderedEquals(<String>[
'/packages/plugin1',
'/packages/my_plugin/my_plugin',
'/packages/my_plugin/my_plugin_web',
'/packages/my_plugin/my_plugin_macos',
]),
);
});
test('can filter plugins with the --packages argument', () async {
createFakePlugin('plugin1', packagesDir);
// Create a federated plugin by creating a directory under the packages
// directory with several packages underneath.
final Directory federatedPluginDir = packagesDir.childDirectory(
'my_plugin',
)..createSync();
createFakePlugin('my_plugin', federatedPluginDir);
createFakePlugin('my_plugin_web', federatedPluginDir);
createFakePlugin('my_plugin_macos', federatedPluginDir);
List<String> plugins = await runCapturingPrint(runner, <String>[
'list',
'--packages=plugin1',
]);
expect(plugins, unorderedEquals(<String>['/packages/plugin1']));
plugins = await runCapturingPrint(runner, <String>[
'list',
'--packages=my_plugin',
]);
expect(
plugins,
unorderedEquals(<String>[
'/packages/my_plugin/my_plugin',
'/packages/my_plugin/my_plugin_web',
'/packages/my_plugin/my_plugin_macos',
]),
);
plugins = await runCapturingPrint(runner, <String>[
'list',
'--packages=my_plugin/my_plugin_web',
]);
expect(
plugins,
unorderedEquals(<String>['/packages/my_plugin/my_plugin_web']),
);
plugins = await runCapturingPrint(runner, <String>[
'list',
'--packages=my_plugin/my_plugin_web,plugin1',
]);
expect(
plugins,
unorderedEquals(<String>[
'/packages/plugin1',
'/packages/my_plugin/my_plugin_web',
]),
);
});
});
}