// 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 runner; setUp(() { mockPlatform = MockPlatform(); (:packagesDir, processRunner: _, gitProcessRunner: _, gitDir: _) = configureBaseCommandMocks(platform: mockPlatform); final command = ListCommand(packagesDir, platform: mockPlatform); runner = CommandRunner('list_test', 'Test for $ListCommand'); runner.addCommand(command); }); test('lists top-level packages', () async { createFakePackage('package1', packagesDir); createFakePlugin('plugin2', packagesDir); final List plugins = await runCapturingPrint(runner, [ 'list', '--type=package', ]); expect( plugins, orderedEquals(['/packages/package1', '/packages/plugin2']), ); }); test('lists examples', () async { createFakePlugin('plugin1', packagesDir); createFakePlugin( 'plugin2', packagesDir, examples: ['example1', 'example2'], ); createFakePlugin('plugin3', packagesDir, examples: []); final List examples = await runCapturingPrint(runner, [ 'list', '--type=example', ]); expect( examples, orderedEquals([ '/packages/plugin1/example', '/packages/plugin2/example/example1', '/packages/plugin2/example/example2', ]), ); }); test('lists packages and subpackages', () async { createFakePackage('package1', packagesDir); createFakePlugin( 'plugin2', packagesDir, examples: ['example1', 'example2'], ); createFakePlugin('plugin3', packagesDir, examples: []); final List packages = await runCapturingPrint(runner, [ 'list', '--type=package-or-subpackage', ]); expect( packages, unorderedEquals([ '/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: ['example1', 'example2'], ); createFakePlugin('plugin3', packagesDir, examples: []); final List examples = await runCapturingPrint(runner, [ 'list', '--type=file', ]); expect( examples, unorderedEquals([ '/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 plugins = await runCapturingPrint(runner, [ 'list', ]); expect( plugins, unorderedEquals([ '/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 plugins = await runCapturingPrint(runner, [ 'list', '--packages=plugin1', ]); expect(plugins, unorderedEquals(['/packages/plugin1'])); plugins = await runCapturingPrint(runner, [ 'list', '--packages=my_plugin', ]); expect( plugins, unorderedEquals([ '/packages/my_plugin/my_plugin', '/packages/my_plugin/my_plugin_web', '/packages/my_plugin/my_plugin_macos', ]), ); plugins = await runCapturingPrint(runner, [ 'list', '--packages=my_plugin/my_plugin_web', ]); expect( plugins, unorderedEquals(['/packages/my_plugin/my_plugin_web']), ); plugins = await runCapturingPrint(runner, [ 'list', '--packages=my_plugin/my_plugin_web,plugin1', ]); expect( plugins, unorderedEquals([ '/packages/plugin1', '/packages/my_plugin/my_plugin_web', ]), ); }); }); }