blob: 830dd59a8d422995d2c84f35fadee16b98c6ec34 [file] [log] [blame]
// 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/create_all_plugins_app_command.dart';
import 'package:platform/platform.dart';
import 'package:test/test.dart';
import 'util.dart';
void main() {
group('$CreateAllPluginsAppCommand', () {
late CommandRunner<void> runner;
late CreateAllPluginsAppCommand command;
late FileSystem fileSystem;
late Directory testRoot;
late Directory packagesDir;
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');
command = CreateAllPluginsAppCommand(
packagesDir,
pluginsRoot: testRoot,
);
runner = CommandRunner<void>(
'create_all_test', 'Test for $CreateAllPluginsAppCommand');
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']);
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>['all-plugins-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>['all-plugins-app']);
final Pubspec generatedPubspec = command.app.parsePubspec();
const String dartSdkKey = 'sdk';
expect(generatedPubspec.environment?[dartSdkKey],
baselinePubspec.environment?[dartSdkKey]);
});
test('handles --output-dir', () async {
createFakePlugin('plugina', packagesDir);
final Directory customOutputDir =
fileSystem.systemTempDirectory.createTempSync();
await runCapturingPrint(runner,
<String>['all-plugins-app', '--output-dir=${customOutputDir.path}']);
expect(
command.app.path, customOutputDir.childDirectory('all_plugins').path);
});
test('logs exclusions', () async {
createFakePlugin('plugina', packagesDir);
createFakePlugin('pluginb', packagesDir);
createFakePlugin('pluginc', packagesDir);
final List<String> output = await runCapturingPrint(
runner, <String>['all-plugins-app', '--exclude=pluginb,pluginc']);
expect(
output,
containsAllInOrder(<String>[
'Exluding the following plugins from the combined build:',
' pluginb',
' pluginc',
]));
});
});
}