mirror of
https://github.com/flutter/packages.git
synced 2025-06-06 19:39:13 +08:00
[tool] Rename all-plugins-app command (#6600)
This commit is contained in:
256
script/tool/test/create_all_packages_app_command_test.dart
Normal file
256
script/tool/test/create_all_packages_app_command_test.dart
Normal file
@ -0,0 +1,256 @@
|
||||
// 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 'dart:io' as io;
|
||||
|
||||
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_packages_app_command.dart';
|
||||
import 'package:platform/platform.dart';
|
||||
import 'package:test/test.dart';
|
||||
|
||||
import 'mocks.dart';
|
||||
import 'util.dart';
|
||||
|
||||
void main() {
|
||||
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(() {
|
||||
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>['create-all-packages-app']);
|
||||
final List<String> pubspec = command.app.pubspecFile.readAsLinesSync();
|
||||
|
||||
expect(
|
||||
pubspec,
|
||||
containsAll(<Matcher>[
|
||||
contains(RegExp('path: .*/packages/plugina')),
|
||||
contains(RegExp('path: .*/packages/pluginb')),
|
||||
contains(RegExp('path: .*/packages/pluginc')),
|
||||
]));
|
||||
});
|
||||
|
||||
test('pubspec has overrides for all plugins', () async {
|
||||
createFakePlugin('plugina', packagesDir);
|
||||
createFakePlugin('pluginb', packagesDir);
|
||||
createFakePlugin('pluginc', packagesDir);
|
||||
|
||||
await runCapturingPrint(runner, <String>['create-all-packages-app']);
|
||||
final List<String> pubspec = command.app.pubspecFile.readAsLinesSync();
|
||||
|
||||
expect(
|
||||
pubspec,
|
||||
containsAllInOrder(<Matcher>[
|
||||
contains('dependency_overrides:'),
|
||||
contains(RegExp('path: .*/packages/plugina')),
|
||||
contains(RegExp('path: .*/packages/pluginb')),
|
||||
contains(RegExp('path: .*/packages/pluginc')),
|
||||
]));
|
||||
});
|
||||
|
||||
test('pubspec preserves existing Dart SDK version', () async {
|
||||
const String baselineProjectName = 'baseline';
|
||||
final Directory baselineProjectDirectory =
|
||||
testRoot.childDirectory(baselineProjectName);
|
||||
io.Process.runSync(
|
||||
getFlutterCommand(const LocalPlatform()),
|
||||
<String>[
|
||||
'create',
|
||||
'--template=app',
|
||||
'--project-name=$baselineProjectName',
|
||||
baselineProjectDirectory.path,
|
||||
],
|
||||
);
|
||||
final Pubspec baselinePubspec =
|
||||
RepositoryPackage(baselineProjectDirectory).parsePubspec();
|
||||
|
||||
createFakePlugin('plugina', packagesDir);
|
||||
|
||||
await runCapturingPrint(runner, <String>['create-all-packages-app']);
|
||||
final Pubspec generatedPubspec = command.app.parsePubspec();
|
||||
|
||||
const String dartSdkKey = 'sdk';
|
||||
expect(generatedPubspec.environment?[dartSdkKey],
|
||||
baselinePubspec.environment?[dartSdkKey]);
|
||||
});
|
||||
|
||||
test('macOS deployment target is modified in pbxproj', () async {
|
||||
createFakePlugin('plugina', packagesDir);
|
||||
|
||||
await runCapturingPrint(runner, <String>['create-all-packages-app']);
|
||||
final List<String> pbxproj = command.app
|
||||
.platformDirectory(FlutterPlatform.macos)
|
||||
.childDirectory('Runner.xcodeproj')
|
||||
.childFile('project.pbxproj')
|
||||
.readAsLinesSync();
|
||||
|
||||
expect(
|
||||
pbxproj,
|
||||
everyElement((String line) =>
|
||||
!line.contains('MACOSX_DEPLOYMENT_TARGET') ||
|
||||
line.contains('10.15')));
|
||||
});
|
||||
|
||||
test('calls flutter pub get', () async {
|
||||
createFakePlugin('plugina', packagesDir);
|
||||
|
||||
await runCapturingPrint(runner, <String>['create-all-packages-app']);
|
||||
|
||||
expect(
|
||||
processRunner.recordedCalls,
|
||||
orderedEquals(<ProcessCall>[
|
||||
ProcessCall(
|
||||
getFlutterCommand(const LocalPlatform()),
|
||||
const <String>['pub', 'get'],
|
||||
testRoot.childDirectory('all_packages').path),
|
||||
]));
|
||||
},
|
||||
// See comment about Windows in create_all_packages_app_command.dart
|
||||
skip: io.Platform.isWindows);
|
||||
|
||||
test('fails if flutter pub get fails', () async {
|
||||
createFakePlugin('plugina', packagesDir);
|
||||
|
||||
processRunner.mockProcessesForExecutable[
|
||||
getFlutterCommand(const LocalPlatform())] = <io.Process>[
|
||||
MockProcess(exitCode: 1)
|
||||
];
|
||||
Error? commandError;
|
||||
final List<String> output = await runCapturingPrint(
|
||||
runner, <String>['create-all-packages-app'], errorHandler: (Error e) {
|
||||
commandError = e;
|
||||
});
|
||||
|
||||
expect(commandError, isA<ToolExit>());
|
||||
expect(
|
||||
output,
|
||||
containsAllInOrder(<Matcher>[
|
||||
contains(
|
||||
"Failed to generate native build files via 'flutter pub get'"),
|
||||
]));
|
||||
},
|
||||
// See comment about Windows in create_all_packages_app_command.dart
|
||||
skip: io.Platform.isWindows);
|
||||
|
||||
test('handles --output-dir', () async {
|
||||
createFakePlugin('plugina', packagesDir);
|
||||
|
||||
final Directory customOutputDir =
|
||||
fileSystem.systemTempDirectory.createTempSync();
|
||||
await runCapturingPrint(runner, <String>[
|
||||
'create-all-packages-app',
|
||||
'--output-dir=${customOutputDir.path}'
|
||||
]);
|
||||
|
||||
expect(command.app.path,
|
||||
customOutputDir.childDirectory('all_packages').path);
|
||||
});
|
||||
|
||||
test('logs exclusions', () async {
|
||||
createFakePlugin('plugina', packagesDir);
|
||||
createFakePlugin('pluginb', packagesDir);
|
||||
createFakePlugin('pluginc', packagesDir);
|
||||
|
||||
final List<String> output = await runCapturingPrint(runner,
|
||||
<String>['create-all-packages-app', '--exclude=pluginb,pluginc']);
|
||||
|
||||
expect(
|
||||
output,
|
||||
containsAllInOrder(<String>[
|
||||
'Exluding the following plugins from the combined build:',
|
||||
' pluginb',
|
||||
' pluginc',
|
||||
]));
|
||||
});
|
||||
});
|
||||
|
||||
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);
|
||||
});
|
||||
}
|
Reference in New Issue
Block a user