diff --git a/packages/flutter_tools/lib/src/commands/build_bundle.dart b/packages/flutter_tools/lib/src/commands/build_bundle.dart index b19fcc70a8e..5c7bda8fde4 100644 --- a/packages/flutter_tools/lib/src/commands/build_bundle.dart +++ b/packages/flutter_tools/lib/src/commands/build_bundle.dart @@ -16,7 +16,6 @@ import 'build.dart'; class BuildBundleCommand extends BuildSubCommand { BuildBundleCommand({bool verboseHelp = false, this.bundleBuilder}) { - addTreeShakeIconsFlag(); usesTargetOption(); usesFilesystemOptions(hide: !verboseHelp); usesBuildNumberOption(); @@ -48,6 +47,13 @@ class BuildBundleCommand extends BuildSubCommand { defaultsTo: getAssetBuildDirectory(), help: 'The output directory for the kernel_blob.bin file, the native snapshet, the assets, etc. ' 'Can be used to redirect the output when driving the Flutter toolchain from another build system.', + ) + ..addFlag( + 'tree-shake-icons', + negatable: true, + defaultsTo: false, + hide: !verboseHelp, + help: '(deprecated) Icon font tree shaking is not supported by this command.', ); usesPubOption(); usesTrackWidgetCreation(verboseHelp: verboseHelp); @@ -81,6 +87,14 @@ class BuildBundleCommand extends BuildSubCommand { ); } + @override + Future validateCommand() async { + if (argResults['tree-shake-icons'] as bool) { + throwToolExit('The "--tree-shake-icons" flag is deprecated for "build bundle" and will be removed in a future version of Flutter.'); + } + return super.validateCommand(); + } + @override Future runCommand() async { final String targetPlatform = stringArg('target-platform'); diff --git a/packages/flutter_tools/test/commands.shard/permeable/build_bundle_test.dart b/packages/flutter_tools/test/commands.shard/permeable/build_bundle_test.dart index a6648a52966..a36014fa46b 100644 --- a/packages/flutter_tools/test/commands.shard/permeable/build_bundle_test.dart +++ b/packages/flutter_tools/test/commands.shard/permeable/build_bundle_test.dart @@ -132,6 +132,24 @@ void main() { FeatureFlags: () => TestFeatureFlags(isMacOSEnabled: false), }); + testUsingContext('bundle --tree-shake-icons fails', () async { + globals.fs.file('lib/main.dart').createSync(recursive: true); + globals.fs.file('pubspec.yaml').createSync(); + globals.fs.file('.packages').createSync(); + final CommandRunner runner = createTestCommandRunner(BuildBundleCommand() + ..bundleBuilder = FakeBundleBuilder()); + + expect(() => runner.run([ + 'bundle', + '--no-pub', + '--release', + '--tree-shake-icons', + ]), throwsToolExit(message: 'tree-shake-icons')); + }, overrides: { + FileSystem: () => MemoryFileSystem.test(), + ProcessManager: () => FakeProcessManager.any(), + }); + testUsingContext('bundle can build for Windows if feature is enabled', () async { globals.fs.file('lib/main.dart').createSync(recursive: true); globals.fs.file('pubspec.yaml').createSync(); @@ -369,6 +387,84 @@ void main() { FileSystem: () => MemoryFileSystem.test(), ProcessManager: () => FakeProcessManager.any(), }); + + testUsingContext('passes profile options through', () async { + globals.fs.file('lib/main.dart').createSync(recursive: true); + globals.fs.file('pubspec.yaml').createSync(); + globals.fs.file('.packages').createSync(); + final CommandRunner runner = createTestCommandRunner(BuildBundleCommand()); + + await runner.run([ + 'bundle', + '--no-pub', + '--profile', + '--dart-define=foo=bar', + '--target-platform=android-arm', + '--track-widget-creation', + '--filesystem-scheme=org-dartlang-root', + '--filesystem-root=test1,test2', + '--extra-gen-snapshot-options=--testflag,--testflag2', + '--extra-front-end-options=--testflagFront,--testflagFront2', + ]); + }, overrides: { + BuildSystem: () => TestBuildSystem.all(BuildResult(success: true), (Target target, Environment environment) { + expect(environment.defines, { + kBuildMode: 'profile', + kTargetPlatform: 'android-arm', + kTargetFile: globals.fs.path.join('lib', 'main.dart'), + kDartDefines: 'Zm9vPWJhcg==', + kTrackWidgetCreation: 'true', + kFileSystemScheme: 'org-dartlang-root', + kFileSystemRoots: 'test1,test2', + kExtraGenSnapshotOptions: '--testflag,--testflag2', + kExtraFrontEndOptions: '--testflagFront,--testflagFront2', + kIconTreeShakerFlag: 'false', + kDeferredComponents: 'false', + kDartObfuscation: 'false', + }); + }), + FileSystem: () => MemoryFileSystem.test(), + ProcessManager: () => FakeProcessManager.any(), + }); + + testUsingContext('passes release options through', () async { + globals.fs.file('lib/main.dart').createSync(recursive: true); + globals.fs.file('pubspec.yaml').createSync(); + globals.fs.file('.packages').createSync(); + final CommandRunner runner = createTestCommandRunner(BuildBundleCommand()); + + await runner.run([ + 'bundle', + '--no-pub', + '--release', + '--dart-define=foo=bar', + '--target-platform=android-arm', + '--track-widget-creation', + '--filesystem-scheme=org-dartlang-root', + '--filesystem-root=test1,test2', + '--extra-gen-snapshot-options=--testflag,--testflag2', + '--extra-front-end-options=--testflagFront,--testflagFront2', + ]); + }, overrides: { + BuildSystem: () => TestBuildSystem.all(BuildResult(success: true), (Target target, Environment environment) { + expect(environment.defines, { + kBuildMode: 'release', + kTargetPlatform: 'android-arm', + kTargetFile: globals.fs.path.join('lib', 'main.dart'), + kDartDefines: 'Zm9vPWJhcg==', + kTrackWidgetCreation: 'true', + kFileSystemScheme: 'org-dartlang-root', + kFileSystemRoots: 'test1,test2', + kExtraGenSnapshotOptions: '--testflag,--testflag2', + kExtraFrontEndOptions: '--testflagFront,--testflagFront2', + kIconTreeShakerFlag: 'false', + kDeferredComponents: 'false', + kDartObfuscation: 'false', + }); + }), + FileSystem: () => MemoryFileSystem.test(), + ProcessManager: () => FakeProcessManager.any(), + }); } class FakeBundleBuilder extends Fake implements BundleBuilder {