// Copyright 2013 The Flutter Authors. All rights reserved. // 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:file/memory.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 FileSystem fileSystem; late MockPlatform mockPlatform; late Directory packagesDir; late CommandRunner runner; setUp(() { fileSystem = MemoryFileSystem(); mockPlatform = MockPlatform(); packagesDir = createPackagesDirectory(fileSystem: fileSystem); final ListCommand 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', ]), ); }); }); }