From 1469b765ee387c81c79c12b7af170b711112819f Mon Sep 17 00:00:00 2001
From: stuartmorgan <stuartmorgan@google.com>
Date: Mon, 31 Oct 2022 10:42:58 -0700
Subject: [PATCH] [tool] Rename all-plugins-app command (#6600)

---
 script/tool/CHANGELOG.md                      |   6 +
 ...t => create_all_packages_app_command.dart} |  23 +--
 script/tool/lib/src/main.dart                 |   4 +-
 script/tool/pubspec.yaml                      |   2 +-
 ...create_all_packages_app_command_test.dart} | 159 +++++++++++-------
 5 files changed, 117 insertions(+), 77 deletions(-)
 rename script/tool/lib/src/{create_all_plugins_app_command.dart => create_all_packages_app_command.dart} (95%)
 rename script/tool/test/{create_all_plugins_app_command_test.dart => create_all_packages_app_command_test.dart} (63%)

diff --git a/script/tool/CHANGELOG.md b/script/tool/CHANGELOG.md
index c492dc0090..e5ad322aee 100644
--- a/script/tool/CHANGELOG.md
+++ b/script/tool/CHANGELOG.md
@@ -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
diff --git a/script/tool/lib/src/create_all_plugins_app_command.dart b/script/tool/lib/src/create_all_packages_app_command.dart
similarity index 95%
rename from script/tool/lib/src/create_all_plugins_app_command.dart
rename to script/tool/lib/src/create_all_packages_app_command.dart
index ea7d5a5c43..142a992972 100644
--- a/script/tool/lib/src/create_all_plugins_app_command.dart
+++ b/script/tool/lib/src/create_all_packages_app_command.dart
@@ -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>{
diff --git a/script/tool/lib/src/main.dart b/script/tool/lib/src/main.dart
index 414ca7f303..2d48f079b3 100644
--- a/script/tool/lib/src/main.dart
+++ b/script/tool/lib/src/main.dart
@@ -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))
diff --git a/script/tool/pubspec.yaml b/script/tool/pubspec.yaml
index eecff3703b..fb1bbfe597 100644
--- a/script/tool/pubspec.yaml
+++ b/script/tool/pubspec.yaml
@@ -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
diff --git a/script/tool/test/create_all_plugins_app_command_test.dart b/script/tool/test/create_all_packages_app_command_test.dart
similarity index 63%
rename from script/tool/test/create_all_plugins_app_command_test.dart
rename to script/tool/test/create_all_packages_app_command_test.dart
index cb2347fe9c..54551cbc37 100644
--- a/script/tool/test/create_all_plugins_app_command_test.dart
+++ b/script/tool/test/create_all_packages_app_command_test.dart
@@ -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,43 +16,58 @@ import 'mocks.dart';
 import 'util.dart';
 
 void main() {
-  group('$CreateAllPluginsAppCommand', () {
-    late CommandRunner<void> runner;
-    late CreateAllPluginsAppCommand command;
-    late FileSystem fileSystem;
-    late Directory testRoot;
-    late Directory packagesDir;
-    late RecordingProcessRunner processRunner;
+  late CommandRunner<void> runner;
+  late CreateAllPackagesAppCommand command;
+  late FileSystem fileSystem;
+  late Directory testRoot;
+  late Directory packagesDir;
+  late RecordingProcessRunner processRunner;
 
+  setUp(() {
+    // Since the core of this command is a call to 'flutter create', the test
+    // has to use the real filesystem. Put everything possible in a unique
+    // temporary to minimize effect on the host system.
+    fileSystem = const LocalFileSystem();
+    testRoot = fileSystem.systemTempDirectory.createTempSync();
+    packagesDir = testRoot.childDirectory('packages');
+    processRunner = RecordingProcessRunner();
+
+    command = CreateAllPackagesAppCommand(
+      packagesDir,
+      processRunner: processRunner,
+      pluginsRoot: testRoot,
+    );
+    runner = CommandRunner<void>(
+        'create_all_test', 'Test for $CreateAllPackagesAppCommand');
+    runner.addCommand(command);
+  });
+
+  tearDown(() {
+    testRoot.deleteSync(recursive: true);
+  });
+
+  group('non-macOS host', () {
     setUp(() {
-      // Since the core of this command is a call to 'flutter create', the test
-      // has to use the real filesystem. Put everything possible in a unique
-      // temporary to minimize effect on the host system.
-      fileSystem = const LocalFileSystem();
-      testRoot = fileSystem.systemTempDirectory.createTempSync();
-      packagesDir = testRoot.childDirectory('packages');
-      processRunner = RecordingProcessRunner();
-
-      command = CreateAllPluginsAppCommand(
+      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 $CreateAllPluginsAppCommand');
+          'create_all_test', 'Test for $CreateAllPackagesAppCommand');
       runner.addCommand(command);
     });
 
-    tearDown(() {
-      testRoot.deleteSync(recursive: true);
-    });
-
     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);
+  });
 }