[tool] Rename all-plugins-app command (#6600)

This commit is contained in:
stuartmorgan
2022-10-31 10:42:58 -07:00
committed by GitHub
parent 60ffcafcd5
commit 1469b765ee
5 changed files with 117 additions and 77 deletions

View File

@ -1,3 +1,9 @@
## 0.13.0
* Renames `all-plugins-app` to `create-all-packages-app` to clarify what it
actually does. Also renames the project directory it creates from
`all_plugins` to `all_packages`.
## 0.12.1
* Modifies `publish_check_command.dart` to do a `dart pub get` in all examples

View File

@ -17,14 +17,16 @@ import 'common/repository_package.dart';
const String _outputDirectoryFlag = 'output-dir';
const String _projectName = 'all_packages';
const int _exitUpdateMacosPodfileFailed = 3;
const int _exitUpdateMacosPbxprojFailed = 4;
const int _exitGenNativeBuildFilesFailed = 5;
/// A command to create an application that builds all in a single application.
class CreateAllPluginsAppCommand extends PackageCommand {
class CreateAllPackagesAppCommand extends PackageCommand {
/// Creates an instance of the builder command.
CreateAllPluginsAppCommand(
CreateAllPackagesAppCommand(
Directory packagesDir, {
ProcessRunner processRunner = const ProcessRunner(),
Directory? pluginsRoot,
@ -34,24 +36,25 @@ class CreateAllPluginsAppCommand extends PackageCommand {
pluginsRoot ?? packagesDir.fileSystem.currentDirectory;
argParser.addOption(_outputDirectoryFlag,
defaultsTo: defaultDir.path,
help: 'The path the directory to create the "all_plugins" project in.\n'
help:
'The path the directory to create the "$_projectName" project in.\n'
'Defaults to the repository root.');
}
/// The location to create the synthesized app project.
Directory get _appDirectory => packagesDir.fileSystem
.directory(getStringArg(_outputDirectoryFlag))
.childDirectory('all_plugins');
.childDirectory(_projectName);
/// The synthesized app project.
RepositoryPackage get app => RepositoryPackage(_appDirectory);
@override
String get description =>
'Generate Flutter app that includes all plugins in packages.';
'Generate Flutter app that includes all target packagas.';
@override
String get name => 'all-plugins-app';
String get name => 'create-all-packages-app';
@override
Future<void> run() async {
@ -100,7 +103,7 @@ class CreateAllPluginsAppCommand extends PackageCommand {
<String>[
'create',
'--template=app',
'--project-name=all_plugins',
'--project-name=$_projectName',
'--android-language=java',
_appDirectory.path,
],
@ -160,9 +163,9 @@ class CreateAllPluginsAppCommand extends PackageCommand {
final StringBuffer newManifest = StringBuffer();
for (final String line in manifestFile.readAsLinesSync()) {
if (line.contains('package="com.example.all_plugins"')) {
if (line.contains('package="com.example.$_projectName"')) {
newManifest
..writeln('package="com.example.all_plugins"')
..writeln('package="com.example.$_projectName"')
..writeln('xmlns:tools="http://schemas.android.com/tools">')
..writeln()
..writeln(
@ -191,7 +194,7 @@ class CreateAllPluginsAppCommand extends PackageCommand {
final Map<String, PathDependency> pluginDeps =
await _getValidPathDependencies();
final Pubspec pubspec = Pubspec(
'all_plugins',
_projectName,
description: 'Flutter app containing all 1st party plugins.',
version: Version.parse('1.0.0+1'),
environment: <String, VersionConstraint>{

View File

@ -11,7 +11,7 @@ import 'package:file/local.dart';
import 'analyze_command.dart';
import 'build_examples_command.dart';
import 'common/core.dart';
import 'create_all_plugins_app_command.dart';
import 'create_all_packages_app_command.dart';
import 'custom_test_command.dart';
import 'dependabot_check_command.dart';
import 'drive_examples_command.dart';
@ -56,7 +56,7 @@ void main(List<String> args) {
'Productivity utils for hosting multiple plugins within one repository.')
..addCommand(AnalyzeCommand(packagesDir))
..addCommand(BuildExamplesCommand(packagesDir))
..addCommand(CreateAllPluginsAppCommand(packagesDir))
..addCommand(CreateAllPackagesAppCommand(packagesDir))
..addCommand(CustomTestCommand(packagesDir))
..addCommand(DependabotCheckCommand(packagesDir))
..addCommand(DriveExamplesCommand(packagesDir))

View File

@ -1,7 +1,7 @@
name: flutter_plugin_tools
description: Productivity utils for flutter/plugins and flutter/packages
repository: https://github.com/flutter/plugins/tree/main/script/tool
version: 0.12.1
version: 0.13.0
dependencies:
args: ^2.1.0

View File

@ -8,7 +8,7 @@ import 'package:args/command_runner.dart';
import 'package:file/file.dart';
import 'package:file/local.dart';
import 'package:flutter_plugin_tools/src/common/core.dart';
import 'package:flutter_plugin_tools/src/create_all_plugins_app_command.dart';
import 'package:flutter_plugin_tools/src/create_all_packages_app_command.dart';
import 'package:platform/platform.dart';
import 'package:test/test.dart';
@ -16,9 +16,8 @@ import 'mocks.dart';
import 'util.dart';
void main() {
group('$CreateAllPluginsAppCommand', () {
late CommandRunner<void> runner;
late CreateAllPluginsAppCommand command;
late CreateAllPackagesAppCommand command;
late FileSystem fileSystem;
late Directory testRoot;
late Directory packagesDir;
@ -33,13 +32,13 @@ void main() {
packagesDir = testRoot.childDirectory('packages');
processRunner = RecordingProcessRunner();
command = CreateAllPluginsAppCommand(
command = CreateAllPackagesAppCommand(
packagesDir,
processRunner: processRunner,
pluginsRoot: testRoot,
);
runner = CommandRunner<void>(
'create_all_test', 'Test for $CreateAllPluginsAppCommand');
'create_all_test', 'Test for $CreateAllPackagesAppCommand');
runner.addCommand(command);
});
@ -47,12 +46,28 @@ void main() {
testRoot.deleteSync(recursive: true);
});
group('non-macOS host', () {
setUp(() {
command = CreateAllPackagesAppCommand(
packagesDir,
processRunner: processRunner,
// Set isWindows or not based on the actual host, so that
// `flutterCommand` works, since these tests actually call 'flutter'.
// The important thing is that isMacOS always returns false.
platform: MockPlatform(isWindows: const LocalPlatform().isWindows),
pluginsRoot: testRoot,
);
runner = CommandRunner<void>(
'create_all_test', 'Test for $CreateAllPackagesAppCommand');
runner.addCommand(command);
});
test('pubspec includes all plugins', () async {
createFakePlugin('plugina', packagesDir);
createFakePlugin('pluginb', packagesDir);
createFakePlugin('pluginc', packagesDir);
await runCapturingPrint(runner, <String>['all-plugins-app']);
await runCapturingPrint(runner, <String>['create-all-packages-app']);
final List<String> pubspec = command.app.pubspecFile.readAsLinesSync();
expect(
@ -69,7 +84,7 @@ void main() {
createFakePlugin('pluginb', packagesDir);
createFakePlugin('pluginc', packagesDir);
await runCapturingPrint(runner, <String>['all-plugins-app']);
await runCapturingPrint(runner, <String>['create-all-packages-app']);
final List<String> pubspec = command.app.pubspecFile.readAsLinesSync();
expect(
@ -100,7 +115,7 @@ void main() {
createFakePlugin('plugina', packagesDir);
await runCapturingPrint(runner, <String>['all-plugins-app']);
await runCapturingPrint(runner, <String>['create-all-packages-app']);
final Pubspec generatedPubspec = command.app.parsePubspec();
const String dartSdkKey = 'sdk';
@ -108,37 +123,10 @@ void main() {
baselinePubspec.environment?[dartSdkKey]);
});
test('macOS deployment target is modified in Podfile', () async {
createFakePlugin('plugina', packagesDir);
final File podfileFile = command.packagesDir.parent
.childDirectory('all_plugins')
.childDirectory('macos')
.childFile('Podfile');
podfileFile.createSync(recursive: true);
podfileFile.writeAsStringSync("""
platform :osx, '10.11'
# some other line
""");
await runCapturingPrint(runner, <String>['all-plugins-app']);
final List<String> podfile = command.app
.platformDirectory(FlutterPlatform.macos)
.childFile('Podfile')
.readAsLinesSync();
expect(
podfile,
everyElement((String line) =>
!line.contains('platform :osx') || line.contains("'10.15'")));
},
// Podfile is only generated (and thus only edited) on macOS.
skip: !io.Platform.isMacOS);
test('macOS deployment target is modified in pbxproj', () async {
createFakePlugin('plugina', packagesDir);
await runCapturingPrint(runner, <String>['all-plugins-app']);
await runCapturingPrint(runner, <String>['create-all-packages-app']);
final List<String> pbxproj = command.app
.platformDirectory(FlutterPlatform.macos)
.childDirectory('Runner.xcodeproj')
@ -155,7 +143,7 @@ platform :osx, '10.11'
test('calls flutter pub get', () async {
createFakePlugin('plugina', packagesDir);
await runCapturingPrint(runner, <String>['all-plugins-app']);
await runCapturingPrint(runner, <String>['create-all-packages-app']);
expect(
processRunner.recordedCalls,
@ -163,10 +151,10 @@ platform :osx, '10.11'
ProcessCall(
getFlutterCommand(const LocalPlatform()),
const <String>['pub', 'get'],
testRoot.childDirectory('all_plugins').path),
testRoot.childDirectory('all_packages').path),
]));
},
// See comment about Windows in create_all_plugins_app_command.dart
// See comment about Windows in create_all_packages_app_command.dart
skip: io.Platform.isWindows);
test('fails if flutter pub get fails', () async {
@ -178,7 +166,7 @@ platform :osx, '10.11'
];
Error? commandError;
final List<String> output = await runCapturingPrint(
runner, <String>['all-plugins-app'], errorHandler: (Error e) {
runner, <String>['create-all-packages-app'], errorHandler: (Error e) {
commandError = e;
});
@ -190,7 +178,7 @@ platform :osx, '10.11'
"Failed to generate native build files via 'flutter pub get'"),
]));
},
// See comment about Windows in create_all_plugins_app_command.dart
// See comment about Windows in create_all_packages_app_command.dart
skip: io.Platform.isWindows);
test('handles --output-dir', () async {
@ -198,11 +186,13 @@ platform :osx, '10.11'
final Directory customOutputDir =
fileSystem.systemTempDirectory.createTempSync();
await runCapturingPrint(runner,
<String>['all-plugins-app', '--output-dir=${customOutputDir.path}']);
await runCapturingPrint(runner, <String>[
'create-all-packages-app',
'--output-dir=${customOutputDir.path}'
]);
expect(
command.app.path, customOutputDir.childDirectory('all_plugins').path);
expect(command.app.path,
customOutputDir.childDirectory('all_packages').path);
});
test('logs exclusions', () async {
@ -210,8 +200,8 @@ platform :osx, '10.11'
createFakePlugin('pluginb', packagesDir);
createFakePlugin('pluginc', packagesDir);
final List<String> output = await runCapturingPrint(
runner, <String>['all-plugins-app', '--exclude=pluginb,pluginc']);
final List<String> output = await runCapturingPrint(runner,
<String>['create-all-packages-app', '--exclude=pluginb,pluginc']);
expect(
output,
@ -222,4 +212,45 @@ platform :osx, '10.11'
]));
});
});
group('macOS host', () {
setUp(() {
command = CreateAllPackagesAppCommand(
packagesDir,
processRunner: processRunner,
platform: MockPlatform(isMacOS: true),
pluginsRoot: testRoot,
);
runner = CommandRunner<void>(
'create_all_test', 'Test for $CreateAllPackagesAppCommand');
runner.addCommand(command);
});
test('macOS deployment target is modified in Podfile', () async {
createFakePlugin('plugina', packagesDir);
final File podfileFile = RepositoryPackage(
command.packagesDir.parent.childDirectory('all_packages'))
.platformDirectory(FlutterPlatform.macos)
.childFile('Podfile');
podfileFile.createSync(recursive: true);
podfileFile.writeAsStringSync("""
platform :osx, '10.11'
# some other line
""");
await runCapturingPrint(runner, <String>['create-all-packages-app']);
final List<String> podfile = command.app
.platformDirectory(FlutterPlatform.macos)
.childFile('Podfile')
.readAsLinesSync();
expect(
podfile,
everyElement((String line) =>
!line.contains('platform :osx') || line.contains("'10.15'")));
},
// Podfile is only generated (and thus only edited) on macOS.
skip: !io.Platform.isMacOS);
});
}