| // 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:platform/platform.dart'; | |
| import 'package:test/test.dart'; | |
| import 'mocks.dart'; | |
| import 'util.dart'; | |
| void main() { | |
| group('ListCommand', () { | |
| late NativePlatform mockPlatform; | |
| late Directory packagesDir; | |
| late CommandRunner<void> runner; | |
| setUp(() { | |
| mockPlatform = createMockPlatform(); | |
| (: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']), | |
| ); | |
| }); | |
| }); | |
| } |