[flutter_plugin_tool] Refactor createFakePlugin (#4064)

This commit is contained in:
stuartmorgan
2021-06-17 13:29:03 -07:00
committed by GitHub
parent 10486b0ceb
commit 81a6f66eee
21 changed files with 649 additions and 830 deletions

View File

@ -27,10 +27,10 @@ class BuildExamplesCommand extends PluginCommand {
Directory packagesDir, {
ProcessRunner processRunner = const ProcessRunner(),
}) : super(packagesDir, processRunner: processRunner) {
argParser.addFlag(kPlatformFlagLinux, defaultsTo: false);
argParser.addFlag(kPlatformFlagMacos, defaultsTo: false);
argParser.addFlag(kPlatformFlagWeb, defaultsTo: false);
argParser.addFlag(kPlatformFlagWindows, defaultsTo: false);
argParser.addFlag(kPlatformLinux, defaultsTo: false);
argParser.addFlag(kPlatformMacos, defaultsTo: false);
argParser.addFlag(kPlatformWeb, defaultsTo: false);
argParser.addFlag(kPlatformWindows, defaultsTo: false);
argParser.addFlag(kIpa, defaultsTo: io.Platform.isMacOS);
argParser.addFlag(kApk);
argParser.addOption(
@ -53,10 +53,10 @@ class BuildExamplesCommand extends PluginCommand {
final List<String> platformSwitches = <String>[
kApk,
kIpa,
kPlatformFlagLinux,
kPlatformFlagMacos,
kPlatformFlagWeb,
kPlatformFlagWindows,
kPlatformLinux,
kPlatformMacos,
kPlatformWeb,
kPlatformWindows,
];
if (!platformSwitches.any((String platform) => getBoolArg(platform))) {
print(
@ -75,14 +75,14 @@ class BuildExamplesCommand extends PluginCommand {
final String packageName =
p.relative(example.path, from: packagesDir.path);
if (getBoolArg(kPlatformFlagLinux)) {
if (getBoolArg(kPlatformLinux)) {
print('\nBUILDING Linux for $packageName');
if (isLinuxPlugin(plugin)) {
final int buildExitCode = await processRunner.runAndStream(
flutterCommand,
<String>[
'build',
kPlatformFlagLinux,
kPlatformLinux,
if (enableExperiment.isNotEmpty)
'--enable-experiment=$enableExperiment',
],
@ -95,14 +95,14 @@ class BuildExamplesCommand extends PluginCommand {
}
}
if (getBoolArg(kPlatformFlagMacos)) {
if (getBoolArg(kPlatformMacos)) {
print('\nBUILDING macOS for $packageName');
if (isMacOsPlugin(plugin)) {
final int exitCode = await processRunner.runAndStream(
flutterCommand,
<String>[
'build',
kPlatformFlagMacos,
kPlatformMacos,
if (enableExperiment.isNotEmpty)
'--enable-experiment=$enableExperiment',
],
@ -115,14 +115,14 @@ class BuildExamplesCommand extends PluginCommand {
}
}
if (getBoolArg(kPlatformFlagWeb)) {
if (getBoolArg(kPlatformWeb)) {
print('\nBUILDING web for $packageName');
if (isWebPlugin(plugin)) {
final int buildExitCode = await processRunner.runAndStream(
flutterCommand,
<String>[
'build',
kPlatformFlagWeb,
kPlatformWeb,
if (enableExperiment.isNotEmpty)
'--enable-experiment=$enableExperiment',
],
@ -135,14 +135,14 @@ class BuildExamplesCommand extends PluginCommand {
}
}
if (getBoolArg(kPlatformFlagWindows)) {
if (getBoolArg(kPlatformWindows)) {
print('\nBUILDING Windows for $packageName');
if (isWindowsPlugin(plugin)) {
final int buildExitCode = await processRunner.runAndStream(
flutterCommand,
<String>[
'build',
kPlatformFlagWindows,
kPlatformWindows,
if (enableExperiment.isNotEmpty)
'--enable-experiment=$enableExperiment',
],

View File

@ -11,22 +11,22 @@ import 'package:yaml/yaml.dart';
typedef Print = void Function(Object? object);
/// Key for windows platform.
const String kPlatformFlagWindows = 'windows';
const String kPlatformWindows = 'windows';
/// Key for macos platform.
const String kPlatformFlagMacos = 'macos';
const String kPlatformMacos = 'macos';
/// Key for linux platform.
const String kPlatformFlagLinux = 'linux';
const String kPlatformLinux = 'linux';
/// Key for IPA (iOS) platform.
const String kPlatformFlagIos = 'ios';
const String kPlatformIos = 'ios';
/// Key for APK (Android) platform.
const String kPlatformFlagAndroid = 'android';
const String kPlatformAndroid = 'android';
/// Key for Web platform.
const String kPlatformFlagWeb = 'web';
const String kPlatformWeb = 'web';
/// Key for enable experiment.
const String kEnableExperiment = 'enable-experiment';

View File

@ -29,12 +29,12 @@ enum PlatformSupport {
/// implementation in order to return true.
bool pluginSupportsPlatform(String platform, FileSystemEntity entity,
{PlatformSupport? requiredMode}) {
assert(platform == kPlatformFlagIos ||
platform == kPlatformFlagAndroid ||
platform == kPlatformFlagWeb ||
platform == kPlatformFlagMacos ||
platform == kPlatformFlagWindows ||
platform == kPlatformFlagLinux);
assert(platform == kPlatformIos ||
platform == kPlatformAndroid ||
platform == kPlatformWeb ||
platform == kPlatformMacos ||
platform == kPlatformWindows ||
platform == kPlatformLinux);
if (entity is! Directory) {
return false;
}
@ -59,7 +59,7 @@ bool pluginSupportsPlatform(String platform, FileSystemEntity entity,
return false;
}
if (!pluginSection.containsKey('platforms')) {
return platform == kPlatformFlagIos || platform == kPlatformFlagAndroid;
return platform == kPlatformIos || platform == kPlatformAndroid;
}
return false;
}
@ -81,30 +81,30 @@ bool pluginSupportsPlatform(String platform, FileSystemEntity entity,
/// Returns whether the given directory contains a Flutter Android plugin.
bool isAndroidPlugin(FileSystemEntity entity) {
return pluginSupportsPlatform(kPlatformFlagAndroid, entity);
return pluginSupportsPlatform(kPlatformAndroid, entity);
}
/// Returns whether the given directory contains a Flutter iOS plugin.
bool isIosPlugin(FileSystemEntity entity) {
return pluginSupportsPlatform(kPlatformFlagIos, entity);
return pluginSupportsPlatform(kPlatformIos, entity);
}
/// Returns whether the given directory contains a Flutter web plugin.
bool isWebPlugin(FileSystemEntity entity) {
return pluginSupportsPlatform(kPlatformFlagWeb, entity);
return pluginSupportsPlatform(kPlatformWeb, entity);
}
/// Returns whether the given directory contains a Flutter Windows plugin.
bool isWindowsPlugin(FileSystemEntity entity) {
return pluginSupportsPlatform(kPlatformFlagWindows, entity);
return pluginSupportsPlatform(kPlatformWindows, entity);
}
/// Returns whether the given directory contains a Flutter macOS plugin.
bool isMacOsPlugin(FileSystemEntity entity) {
return pluginSupportsPlatform(kPlatformFlagMacos, entity);
return pluginSupportsPlatform(kPlatformMacos, entity);
}
/// Returns whether the given directory contains a Flutter linux plugin.
bool isLinuxPlugin(FileSystemEntity entity) {
return pluginSupportsPlatform(kPlatformFlagLinux, entity);
return pluginSupportsPlatform(kPlatformLinux, entity);
}

View File

@ -18,17 +18,17 @@ class DriveExamplesCommand extends PluginCommand {
Directory packagesDir, {
ProcessRunner processRunner = const ProcessRunner(),
}) : super(packagesDir, processRunner: processRunner) {
argParser.addFlag(kPlatformFlagAndroid,
argParser.addFlag(kPlatformAndroid,
help: 'Runs the Android implementation of the examples');
argParser.addFlag(kPlatformFlagIos,
argParser.addFlag(kPlatformIos,
help: 'Runs the iOS implementation of the examples');
argParser.addFlag(kPlatformFlagLinux,
argParser.addFlag(kPlatformLinux,
help: 'Runs the Linux implementation of the examples');
argParser.addFlag(kPlatformFlagMacos,
argParser.addFlag(kPlatformMacos,
help: 'Runs the macOS implementation of the examples');
argParser.addFlag(kPlatformFlagWeb,
argParser.addFlag(kPlatformWeb,
help: 'Runs the web implementation of the examples');
argParser.addFlag(kPlatformFlagWindows,
argParser.addFlag(kPlatformWindows,
help: 'Runs the Windows implementation of the examples');
argParser.addOption(
kEnableExperiment,
@ -55,10 +55,10 @@ class DriveExamplesCommand extends PluginCommand {
Future<void> run() async {
final List<String> failingTests = <String>[];
final List<String> pluginsWithoutTests = <String>[];
final bool isLinux = getBoolArg(kPlatformFlagLinux);
final bool isMacos = getBoolArg(kPlatformFlagMacos);
final bool isWeb = getBoolArg(kPlatformFlagWeb);
final bool isWindows = getBoolArg(kPlatformFlagWindows);
final bool isLinux = getBoolArg(kPlatformLinux);
final bool isMacos = getBoolArg(kPlatformMacos);
final bool isWeb = getBoolArg(kPlatformWeb);
final bool isWindows = getBoolArg(kPlatformWindows);
await for (final Directory plugin in getPlugins()) {
final String pluginName = plugin.basename;
if (pluginName.endsWith('_platform_interface') &&
@ -222,12 +222,12 @@ Tried searching for the following:
Future<bool> _pluginSupportedOnCurrentPlatform(
FileSystemEntity plugin) async {
final bool isAndroid = getBoolArg(kPlatformFlagAndroid);
final bool isIOS = getBoolArg(kPlatformFlagIos);
final bool isLinux = getBoolArg(kPlatformFlagLinux);
final bool isMacos = getBoolArg(kPlatformFlagMacos);
final bool isWeb = getBoolArg(kPlatformFlagWeb);
final bool isWindows = getBoolArg(kPlatformFlagWindows);
final bool isAndroid = getBoolArg(kPlatformAndroid);
final bool isIOS = getBoolArg(kPlatformIos);
final bool isLinux = getBoolArg(kPlatformLinux);
final bool isMacos = getBoolArg(kPlatformMacos);
final bool isWeb = getBoolArg(kPlatformWeb);
final bool isWindows = getBoolArg(kPlatformWindows);
if (isAndroid) {
return isAndroidPlugin(plugin);
}

View File

@ -37,8 +37,8 @@ class XCTestCommand extends PluginCommand {
'this is passed to the `-destination` argument in xcodebuild command.\n'
'See https://developer.apple.com/library/archive/technotes/tn2339/_index.html#//apple_ref/doc/uid/DTS40014588-CH1-UNIT for details on how to specify the destination.',
);
argParser.addFlag(kPlatformFlagIos, help: 'Runs the iOS tests');
argParser.addFlag(kPlatformFlagMacos, help: 'Runs the macOS tests');
argParser.addFlag(kPlatformIos, help: 'Runs the iOS tests');
argParser.addFlag(kPlatformMacos, help: 'Runs the macOS tests');
}
@override
@ -51,8 +51,8 @@ class XCTestCommand extends PluginCommand {
@override
Future<void> run() async {
final bool testIos = getBoolArg(kPlatformFlagIos);
final bool testMacos = getBoolArg(kPlatformFlagMacos);
final bool testIos = getBoolArg(kPlatformIos);
final bool testMacos = getBoolArg(kPlatformMacos);
if (!(testIos || testMacos)) {
print('At least one platform flag must be provided.');

View File

@ -53,8 +53,7 @@ void main() {
});
test('skips flutter pub get for examples', () async {
final Directory plugin1Dir =
createFakePlugin('a', packagesDir, withSingleExample: true);
final Directory plugin1Dir = createFakePlugin('a', packagesDir);
final MockProcess mockProcess = MockProcess();
mockProcess.exitCodeCompleter.complete(0);
@ -121,7 +120,7 @@ void main() {
group('verifies analysis settings', () {
test('fails analysis_options.yaml', () async {
createFakePlugin('foo', packagesDir, withExtraFiles: <List<String>>[
createFakePlugin('foo', packagesDir, extraFiles: <List<String>>[
<String>['analysis_options.yaml']
]);
@ -130,7 +129,7 @@ void main() {
});
test('fails .analysis_options', () async {
createFakePlugin('foo', packagesDir, withExtraFiles: <List<String>>[
createFakePlugin('foo', packagesDir, extraFiles: <List<String>>[
<String>['.analysis_options']
]);
@ -140,7 +139,7 @@ void main() {
test('takes an allow list', () async {
final Directory pluginDir =
createFakePlugin('foo', packagesDir, withExtraFiles: <List<String>>[
createFakePlugin('foo', packagesDir, extraFiles: <List<String>>[
<String>['analysis_options.yaml']
]);
@ -161,7 +160,7 @@ void main() {
// See: https://github.com/flutter/flutter/issues/78994
test('takes an empty allow list', () async {
createFakePlugin('foo', packagesDir, withExtraFiles: <List<String>>[
createFakePlugin('foo', packagesDir, extraFiles: <List<String>>[
<String>['analysis_options.yaml']
]);

View File

@ -6,6 +6,8 @@ import 'package:args/command_runner.dart';
import 'package:file/file.dart';
import 'package:file/memory.dart';
import 'package:flutter_plugin_tools/src/build_examples_command.dart';
import 'package:flutter_plugin_tools/src/common/core.dart';
import 'package:flutter_plugin_tools/src/common/plugin_utils.dart';
import 'package:path/path.dart' as p;
import 'package:platform/platform.dart';
import 'package:test/test.dart';
@ -35,17 +37,14 @@ void main() {
test('building for iOS when plugin is not set up for iOS results in no-op',
() async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test'],
],
isLinuxPlugin: false);
]);
final Directory pluginExampleDirectory =
pluginDirectory.childDirectory('example');
createFakePubspec(pluginExampleDirectory, isFlutter: true);
final List<String> output = await runCapturingPrint(
runner, <String>['build-examples', '--ipa', '--no-macos']);
final String packageName =
@ -67,17 +66,16 @@ void main() {
});
test('building for ios', () async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test'],
],
isIosPlugin: true);
], platformSupport: <String, PlatformSupport>{
kPlatformIos: PlatformSupport.inline
});
final Directory pluginExampleDirectory =
pluginDirectory.childDirectory('example');
createFakePubspec(pluginExampleDirectory, isFlutter: true);
final List<String> output = await runCapturingPrint(runner, <String>[
'build-examples',
'--ipa',
@ -114,17 +112,14 @@ void main() {
test(
'building for Linux when plugin is not set up for Linux results in no-op',
() async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test'],
],
isLinuxPlugin: false);
]);
final Directory pluginExampleDirectory =
pluginDirectory.childDirectory('example');
createFakePubspec(pluginExampleDirectory, isFlutter: true);
final List<String> output = await runCapturingPrint(
runner, <String>['build-examples', '--no-ipa', '--linux']);
final String packageName =
@ -146,17 +141,16 @@ void main() {
});
test('building for Linux', () async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test'],
],
isLinuxPlugin: true);
], platformSupport: <String, PlatformSupport>{
kPlatformLinux: PlatformSupport.inline,
});
final Directory pluginExampleDirectory =
pluginDirectory.childDirectory('example');
createFakePubspec(pluginExampleDirectory, isFlutter: true);
final List<String> output = await runCapturingPrint(
runner, <String>['build-examples', '--no-ipa', '--linux']);
final String packageName =
@ -181,16 +175,14 @@ void main() {
test('building for macos with no implementation results in no-op',
() async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test'],
]);
final Directory pluginExampleDirectory =
pluginDirectory.childDirectory('example');
createFakePubspec(pluginExampleDirectory, isFlutter: true);
final List<String> output = await runCapturingPrint(
runner, <String>['build-examples', '--no-ipa', '--macos']);
final String packageName =
@ -212,18 +204,17 @@ void main() {
});
test('building for macos', () async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test'],
<String>['example', 'macos', 'macos.swift'],
],
isMacOsPlugin: true);
], platformSupport: <String, PlatformSupport>{
kPlatformMacos: PlatformSupport.inline,
});
final Directory pluginExampleDirectory =
pluginDirectory.childDirectory('example');
createFakePubspec(pluginExampleDirectory, isFlutter: true);
final List<String> output = await runCapturingPrint(
runner, <String>['build-examples', '--no-ipa', '--macos']);
final String packageName =
@ -247,16 +238,14 @@ void main() {
});
test('building for web with no implementation results in no-op', () async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test'],
]);
final Directory pluginExampleDirectory =
pluginDirectory.childDirectory('example');
createFakePubspec(pluginExampleDirectory, isFlutter: true);
final List<String> output = await runCapturingPrint(
runner, <String>['build-examples', '--no-ipa', '--web']);
final String packageName =
@ -278,18 +267,17 @@ void main() {
});
test('building for web', () async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test'],
<String>['example', 'web', 'index.html'],
],
isWebPlugin: true);
], platformSupport: <String, PlatformSupport>{
kPlatformWeb: PlatformSupport.inline,
});
final Directory pluginExampleDirectory =
pluginDirectory.childDirectory('example');
createFakePubspec(pluginExampleDirectory, isFlutter: true);
final List<String> output = await runCapturingPrint(
runner, <String>['build-examples', '--no-ipa', '--web']);
final String packageName =
@ -315,17 +303,14 @@ void main() {
test(
'building for Windows when plugin is not set up for Windows results in no-op',
() async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test'],
],
isWindowsPlugin: false);
]);
final Directory pluginExampleDirectory =
pluginDirectory.childDirectory('example');
createFakePubspec(pluginExampleDirectory, isFlutter: true);
final List<String> output = await runCapturingPrint(
runner, <String>['build-examples', '--no-ipa', '--windows']);
final String packageName =
@ -347,17 +332,16 @@ void main() {
});
test('building for windows', () async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test'],
],
isWindowsPlugin: true);
], platformSupport: <String, PlatformSupport>{
kPlatformWindows: PlatformSupport.inline
});
final Directory pluginExampleDirectory =
pluginDirectory.childDirectory('example');
createFakePubspec(pluginExampleDirectory, isFlutter: true);
final List<String> output = await runCapturingPrint(
runner, <String>['build-examples', '--no-ipa', '--windows']);
final String packageName =
@ -383,17 +367,14 @@ void main() {
test(
'building for Android when plugin is not set up for Android results in no-op',
() async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test'],
],
isLinuxPlugin: false);
]);
final Directory pluginExampleDirectory =
pluginDirectory.childDirectory('example');
createFakePubspec(pluginExampleDirectory, isFlutter: true);
final List<String> output = await runCapturingPrint(
runner, <String>['build-examples', '--apk', '--no-ipa']);
final String packageName =
@ -415,17 +396,16 @@ void main() {
});
test('building for android', () async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test'],
],
isAndroidPlugin: true);
], platformSupport: <String, PlatformSupport>{
kPlatformAndroid: PlatformSupport.inline
});
final Directory pluginExampleDirectory =
pluginDirectory.childDirectory('example');
createFakePubspec(pluginExampleDirectory, isFlutter: true);
final List<String> output = await runCapturingPrint(runner, <String>[
'build-examples',
'--apk',
@ -453,17 +433,16 @@ void main() {
});
test('enable-experiment flag for Android', () async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test'],
],
isAndroidPlugin: true);
], platformSupport: <String, PlatformSupport>{
kPlatformAndroid: PlatformSupport.inline
});
final Directory pluginExampleDirectory =
pluginDirectory.childDirectory('example');
createFakePubspec(pluginExampleDirectory, isFlutter: true);
await runCapturingPrint(runner, <String>[
'build-examples',
'--apk',
@ -483,17 +462,16 @@ void main() {
});
test('enable-experiment flag for ios', () async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test'],
],
isIosPlugin: true);
], platformSupport: <String, PlatformSupport>{
kPlatformIos: PlatformSupport.inline
});
final Directory pluginExampleDirectory =
pluginDirectory.childDirectory('example');
createFakePubspec(pluginExampleDirectory, isFlutter: true);
await runCapturingPrint(runner, <String>[
'build-examples',
'--ipa',

View File

@ -95,8 +95,7 @@ void main() {
});
test('exclude federated plugins when plugins flag is specified', () async {
createFakePlugin('plugin1', packagesDir,
parentDirectoryName: 'federated');
createFakePlugin('plugin1', packagesDir.childDirectory('federated'));
final Directory plugin2 = createFakePlugin('plugin2', packagesDir);
await runner.run(<String>[
'sample',
@ -108,8 +107,7 @@ void main() {
test('exclude entire federated plugins when plugins flag is specified',
() async {
createFakePlugin('plugin1', packagesDir,
parentDirectoryName: 'federated');
createFakePlugin('plugin1', packagesDir.childDirectory('federated'));
final Directory plugin2 = createFakePlugin('plugin2', packagesDir);
await runner.run(<String>[
'sample',
@ -303,8 +301,8 @@ packages/plugin1/plugin1/plugin1.dart
packages/plugin1/plugin1_platform_interface/plugin1_platform_interface.dart
packages/plugin1/plugin1_web/plugin1_web.dart
''';
final Directory plugin1 = createFakePlugin('plugin1', packagesDir,
parentDirectoryName: 'plugin1');
final Directory plugin1 =
createFakePlugin('plugin1', packagesDir.childDirectory('plugin1'));
createFakePlugin('plugin2', packagesDir);
createFakePlugin('plugin3', packagesDir);
await runner.run(<String>[
@ -323,8 +321,8 @@ packages/plugin1/plugin1.dart
packages/plugin2/ios/plugin2.m
packages/plugin3/plugin3.dart
''';
final Directory plugin1 = createFakePlugin('plugin1', packagesDir,
parentDirectoryName: 'plugin1');
final Directory plugin1 =
createFakePlugin('plugin1', packagesDir.childDirectory('plugin1'));
final Directory plugin2 = createFakePlugin('plugin2', packagesDir);
createFakePlugin('plugin3', packagesDir);
await runner.run(<String>[
@ -343,8 +341,8 @@ packages/plugin1/plugin1.dart
packages/plugin2/ios/plugin2.m
packages/plugin3/plugin3.dart
''';
final Directory plugin1 = createFakePlugin('plugin1', packagesDir,
parentDirectoryName: 'plugin1');
final Directory plugin1 =
createFakePlugin('plugin1', packagesDir.childDirectory('plugin1'));
createFakePlugin('plugin2', packagesDir);
createFakePlugin('plugin3', packagesDir);
await runner.run(<String>[

View File

@ -4,6 +4,7 @@
import 'package:file/file.dart';
import 'package:file/memory.dart';
import 'package:flutter_plugin_tools/src/common/core.dart';
import 'package:flutter_plugin_tools/src/common/plugin_utils.dart';
import 'package:test/test.dart';
@ -22,113 +23,112 @@ void main() {
test('no platforms', () async {
final Directory plugin = createFakePlugin('plugin', packagesDir);
expect(pluginSupportsPlatform('android', plugin), isFalse);
expect(pluginSupportsPlatform('ios', plugin), isFalse);
expect(pluginSupportsPlatform('linux', plugin), isFalse);
expect(pluginSupportsPlatform('macos', plugin), isFalse);
expect(pluginSupportsPlatform('web', plugin), isFalse);
expect(pluginSupportsPlatform('windows', plugin), isFalse);
expect(pluginSupportsPlatform(kPlatformAndroid, plugin), isFalse);
expect(pluginSupportsPlatform(kPlatformIos, plugin), isFalse);
expect(pluginSupportsPlatform(kPlatformLinux, plugin), isFalse);
expect(pluginSupportsPlatform(kPlatformMacos, plugin), isFalse);
expect(pluginSupportsPlatform(kPlatformWeb, plugin), isFalse);
expect(pluginSupportsPlatform(kPlatformWindows, plugin), isFalse);
});
test('all platforms', () async {
final Directory plugin = createFakePlugin(
'plugin',
packagesDir,
isAndroidPlugin: true,
isIosPlugin: true,
isLinuxPlugin: true,
isMacOsPlugin: true,
isWebPlugin: true,
isWindowsPlugin: true,
);
final Directory plugin = createFakePlugin('plugin', packagesDir,
platformSupport: <String, PlatformSupport>{
kPlatformAndroid: PlatformSupport.inline,
kPlatformIos: PlatformSupport.inline,
kPlatformLinux: PlatformSupport.inline,
kPlatformMacos: PlatformSupport.inline,
kPlatformWeb: PlatformSupport.inline,
kPlatformWindows: PlatformSupport.inline,
});
expect(pluginSupportsPlatform('android', plugin), isTrue);
expect(pluginSupportsPlatform('ios', plugin), isTrue);
expect(pluginSupportsPlatform('linux', plugin), isTrue);
expect(pluginSupportsPlatform('macos', plugin), isTrue);
expect(pluginSupportsPlatform('web', plugin), isTrue);
expect(pluginSupportsPlatform('windows', plugin), isTrue);
expect(pluginSupportsPlatform(kPlatformAndroid, plugin), isTrue);
expect(pluginSupportsPlatform(kPlatformIos, plugin), isTrue);
expect(pluginSupportsPlatform(kPlatformLinux, plugin), isTrue);
expect(pluginSupportsPlatform(kPlatformMacos, plugin), isTrue);
expect(pluginSupportsPlatform(kPlatformWeb, plugin), isTrue);
expect(pluginSupportsPlatform(kPlatformWindows, plugin), isTrue);
});
test('some platforms', () async {
final Directory plugin = createFakePlugin(
'plugin',
packagesDir,
isAndroidPlugin: true,
isIosPlugin: false,
isLinuxPlugin: true,
isMacOsPlugin: false,
isWebPlugin: true,
isWindowsPlugin: false,
platformSupport: <String, PlatformSupport>{
kPlatformAndroid: PlatformSupport.inline,
kPlatformLinux: PlatformSupport.inline,
kPlatformWeb: PlatformSupport.inline,
},
);
expect(pluginSupportsPlatform('android', plugin), isTrue);
expect(pluginSupportsPlatform('ios', plugin), isFalse);
expect(pluginSupportsPlatform('linux', plugin), isTrue);
expect(pluginSupportsPlatform('macos', plugin), isFalse);
expect(pluginSupportsPlatform('web', plugin), isTrue);
expect(pluginSupportsPlatform('windows', plugin), isFalse);
expect(pluginSupportsPlatform(kPlatformAndroid, plugin), isTrue);
expect(pluginSupportsPlatform(kPlatformIos, plugin), isFalse);
expect(pluginSupportsPlatform(kPlatformLinux, plugin), isTrue);
expect(pluginSupportsPlatform(kPlatformMacos, plugin), isFalse);
expect(pluginSupportsPlatform(kPlatformWeb, plugin), isTrue);
expect(pluginSupportsPlatform(kPlatformWindows, plugin), isFalse);
});
test('inline plugins are only detected as inline', () async {
// createFakePlugin makes non-federated pubspec entries.
final Directory plugin = createFakePlugin(
'plugin',
packagesDir,
isAndroidPlugin: true,
isIosPlugin: true,
isLinuxPlugin: true,
isMacOsPlugin: true,
isWebPlugin: true,
isWindowsPlugin: true,
platformSupport: <String, PlatformSupport>{
kPlatformAndroid: PlatformSupport.inline,
kPlatformIos: PlatformSupport.inline,
kPlatformLinux: PlatformSupport.inline,
kPlatformMacos: PlatformSupport.inline,
kPlatformWeb: PlatformSupport.inline,
kPlatformWindows: PlatformSupport.inline,
},
);
expect(
pluginSupportsPlatform('android', plugin,
pluginSupportsPlatform(kPlatformAndroid, plugin,
requiredMode: PlatformSupport.inline),
isTrue);
expect(
pluginSupportsPlatform('android', plugin,
pluginSupportsPlatform(kPlatformAndroid, plugin,
requiredMode: PlatformSupport.federated),
isFalse);
expect(
pluginSupportsPlatform('ios', plugin,
pluginSupportsPlatform(kPlatformIos, plugin,
requiredMode: PlatformSupport.inline),
isTrue);
expect(
pluginSupportsPlatform('ios', plugin,
pluginSupportsPlatform(kPlatformIos, plugin,
requiredMode: PlatformSupport.federated),
isFalse);
expect(
pluginSupportsPlatform('linux', plugin,
pluginSupportsPlatform(kPlatformLinux, plugin,
requiredMode: PlatformSupport.inline),
isTrue);
expect(
pluginSupportsPlatform('linux', plugin,
pluginSupportsPlatform(kPlatformLinux, plugin,
requiredMode: PlatformSupport.federated),
isFalse);
expect(
pluginSupportsPlatform('macos', plugin,
pluginSupportsPlatform(kPlatformMacos, plugin,
requiredMode: PlatformSupport.inline),
isTrue);
expect(
pluginSupportsPlatform('macos', plugin,
pluginSupportsPlatform(kPlatformMacos, plugin,
requiredMode: PlatformSupport.federated),
isFalse);
expect(
pluginSupportsPlatform('web', plugin,
pluginSupportsPlatform(kPlatformWeb, plugin,
requiredMode: PlatformSupport.inline),
isTrue);
expect(
pluginSupportsPlatform('web', plugin,
pluginSupportsPlatform(kPlatformWeb, plugin,
requiredMode: PlatformSupport.federated),
isFalse);
expect(
pluginSupportsPlatform('windows', plugin,
pluginSupportsPlatform(kPlatformWindows, plugin,
requiredMode: PlatformSupport.inline),
isTrue);
expect(
pluginSupportsPlatform('windows', plugin,
pluginSupportsPlatform(kPlatformWindows, plugin,
requiredMode: PlatformSupport.federated),
isFalse);
});
@ -138,71 +138,62 @@ void main() {
final Directory plugin = createFakePlugin(
pluginName,
packagesDir,
isAndroidPlugin: true,
isIosPlugin: true,
isLinuxPlugin: true,
isMacOsPlugin: true,
isWebPlugin: true,
isWindowsPlugin: true,
);
createFakePubspec(
plugin,
name: pluginName,
androidSupport: PlatformSupport.federated,
iosSupport: PlatformSupport.federated,
linuxSupport: PlatformSupport.federated,
macosSupport: PlatformSupport.federated,
webSupport: PlatformSupport.federated,
windowsSupport: PlatformSupport.federated,
platformSupport: <String, PlatformSupport>{
kPlatformAndroid: PlatformSupport.federated,
kPlatformIos: PlatformSupport.federated,
kPlatformLinux: PlatformSupport.federated,
kPlatformMacos: PlatformSupport.federated,
kPlatformWeb: PlatformSupport.federated,
kPlatformWindows: PlatformSupport.federated,
},
);
expect(
pluginSupportsPlatform('android', plugin,
pluginSupportsPlatform(kPlatformAndroid, plugin,
requiredMode: PlatformSupport.federated),
isTrue);
expect(
pluginSupportsPlatform('android', plugin,
pluginSupportsPlatform(kPlatformAndroid, plugin,
requiredMode: PlatformSupport.inline),
isFalse);
expect(
pluginSupportsPlatform('ios', plugin,
pluginSupportsPlatform(kPlatformIos, plugin,
requiredMode: PlatformSupport.federated),
isTrue);
expect(
pluginSupportsPlatform('ios', plugin,
pluginSupportsPlatform(kPlatformIos, plugin,
requiredMode: PlatformSupport.inline),
isFalse);
expect(
pluginSupportsPlatform('linux', plugin,
pluginSupportsPlatform(kPlatformLinux, plugin,
requiredMode: PlatformSupport.federated),
isTrue);
expect(
pluginSupportsPlatform('linux', plugin,
pluginSupportsPlatform(kPlatformLinux, plugin,
requiredMode: PlatformSupport.inline),
isFalse);
expect(
pluginSupportsPlatform('macos', plugin,
pluginSupportsPlatform(kPlatformMacos, plugin,
requiredMode: PlatformSupport.federated),
isTrue);
expect(
pluginSupportsPlatform('macos', plugin,
pluginSupportsPlatform(kPlatformMacos, plugin,
requiredMode: PlatformSupport.inline),
isFalse);
expect(
pluginSupportsPlatform('web', plugin,
pluginSupportsPlatform(kPlatformWeb, plugin,
requiredMode: PlatformSupport.federated),
isTrue);
expect(
pluginSupportsPlatform('web', plugin,
pluginSupportsPlatform(kPlatformWeb, plugin,
requiredMode: PlatformSupport.inline),
isFalse);
expect(
pluginSupportsPlatform('windows', plugin,
pluginSupportsPlatform(kPlatformWindows, plugin,
requiredMode: PlatformSupport.federated),
isTrue);
expect(
pluginSupportsPlatform('windows', plugin,
pluginSupportsPlatform(kPlatformWindows, plugin,
requiredMode: PlatformSupport.inline),
isFalse);
});

View File

@ -6,6 +6,7 @@ import 'package:args/command_runner.dart';
import 'package:file/file.dart';
import 'package:file/memory.dart';
import 'package:flutter_plugin_tools/src/common/core.dart';
import 'package:flutter_plugin_tools/src/common/plugin_utils.dart';
import 'package:flutter_plugin_tools/src/drive_examples_command.dart';
import 'package:path/path.dart' as p;
import 'package:platform/platform.dart';
@ -35,19 +36,18 @@ void main() {
});
test('driving under folder "test"', () async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test_driver', 'plugin_test.dart'],
<String>['example', 'test', 'plugin.dart'],
],
isIosPlugin: true,
isAndroidPlugin: true);
], platformSupport: <String, PlatformSupport>{
kPlatformAndroid: PlatformSupport.inline,
kPlatformIos: PlatformSupport.inline,
});
final Directory pluginExampleDirectory =
pluginDirectory.childDirectory('example');
createFakePubspec(pluginExampleDirectory, isFlutter: true);
final List<String> output = await runCapturingPrint(runner, <String>[
'drive-examples',
]);
@ -80,19 +80,18 @@ void main() {
});
test('driving under folder "test_driver"', () async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test_driver', 'plugin_test.dart'],
<String>['example', 'test_driver', 'plugin.dart'],
],
isAndroidPlugin: true,
isIosPlugin: true);
], platformSupport: <String, PlatformSupport>{
kPlatformAndroid: PlatformSupport.inline,
kPlatformIos: PlatformSupport.inline,
});
final Directory pluginExampleDirectory =
pluginDirectory.childDirectory('example');
createFakePubspec(pluginExampleDirectory, isFlutter: true);
final List<String> output = await runCapturingPrint(runner, <String>[
'drive-examples',
]);
@ -126,17 +125,12 @@ void main() {
test('driving under folder "test_driver" when test files are missing"',
() async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test_driver', 'plugin_test.dart'],
],
isAndroidPlugin: true,
isIosPlugin: true);
final Directory pluginExampleDirectory =
pluginDirectory.childDirectory('example');
createFakePubspec(pluginExampleDirectory, isFlutter: true);
], platformSupport: <String, PlatformSupport>{
kPlatformAndroid: PlatformSupport.inline,
kPlatformIos: PlatformSupport.inline,
});
await expectLater(
() => runCapturingPrint(runner, <String>['drive-examples']),
@ -145,17 +139,12 @@ void main() {
test('a plugin without any integration test files is reported as an error',
() async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'lib', 'main.dart'],
],
isAndroidPlugin: true,
isIosPlugin: true);
final Directory pluginExampleDirectory =
pluginDirectory.childDirectory('example');
createFakePubspec(pluginExampleDirectory, isFlutter: true);
], platformSupport: <String, PlatformSupport>{
kPlatformAndroid: PlatformSupport.inline,
kPlatformIos: PlatformSupport.inline,
});
await expectLater(
() => runCapturingPrint(runner, <String>['drive-examples']),
@ -165,21 +154,20 @@ void main() {
test(
'driving under folder "test_driver" when targets are under "integration_test"',
() async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test_driver', 'integration_test.dart'],
<String>['example', 'integration_test', 'bar_test.dart'],
<String>['example', 'integration_test', 'foo_test.dart'],
<String>['example', 'integration_test', 'ignore_me.dart'],
],
isAndroidPlugin: true,
isIosPlugin: true);
], platformSupport: <String, PlatformSupport>{
kPlatformAndroid: PlatformSupport.inline,
kPlatformIos: PlatformSupport.inline,
});
final Directory pluginExampleDirectory =
pluginDirectory.childDirectory('example');
createFakePubspec(pluginExampleDirectory, isFlutter: true);
final List<String> output = await runCapturingPrint(runner, <String>[
'drive-examples',
]);
@ -222,17 +210,10 @@ void main() {
});
test('driving when plugin does not support Linux is a no-op', () async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test_driver', 'plugin_test.dart'],
<String>['example', 'test_driver', 'plugin.dart'],
],
isMacOsPlugin: false);
final Directory pluginExampleDirectory =
pluginDirectory.childDirectory('example');
createFakePubspec(pluginExampleDirectory, isFlutter: true);
]);
final List<String> output = await runCapturingPrint(runner, <String>[
'drive-examples',
@ -255,18 +236,17 @@ void main() {
});
test('driving on a Linux plugin', () async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test_driver', 'plugin_test.dart'],
<String>['example', 'test_driver', 'plugin.dart'],
],
isLinuxPlugin: true);
], platformSupport: <String, PlatformSupport>{
kPlatformLinux: PlatformSupport.inline,
});
final Directory pluginExampleDirectory =
pluginDirectory.childDirectory('example');
createFakePubspec(pluginExampleDirectory, isFlutter: true);
final List<String> output = await runCapturingPrint(runner, <String>[
'drive-examples',
'--linux',
@ -302,17 +282,11 @@ void main() {
});
test('driving when plugin does not suppport macOS is a no-op', () async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test_driver', 'plugin_test.dart'],
<String>['example', 'test_driver', 'plugin.dart'],
]);
final Directory pluginExampleDirectory =
pluginDirectory.childDirectory('example');
createFakePubspec(pluginExampleDirectory, isFlutter: true);
final List<String> output = await runCapturingPrint(runner, <String>[
'drive-examples',
'--macos',
@ -333,19 +307,18 @@ void main() {
expect(processRunner.recordedCalls, <ProcessCall>[]);
});
test('driving on a macOS plugin', () async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test_driver', 'plugin_test.dart'],
<String>['example', 'test_driver', 'plugin.dart'],
<String>['example', 'macos', 'macos.swift'],
],
isMacOsPlugin: true);
], platformSupport: <String, PlatformSupport>{
kPlatformMacos: PlatformSupport.inline,
});
final Directory pluginExampleDirectory =
pluginDirectory.childDirectory('example');
createFakePubspec(pluginExampleDirectory, isFlutter: true);
final List<String> output = await runCapturingPrint(runner, <String>[
'drive-examples',
'--macos',
@ -381,17 +354,10 @@ void main() {
});
test('driving when plugin does not suppport web is a no-op', () async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test_driver', 'plugin_test.dart'],
<String>['example', 'test_driver', 'plugin.dart'],
],
isWebPlugin: false);
final Directory pluginExampleDirectory =
pluginDirectory.childDirectory('example');
createFakePubspec(pluginExampleDirectory, isFlutter: true);
]);
final List<String> output = await runCapturingPrint(runner, <String>[
'drive-examples',
@ -414,18 +380,17 @@ void main() {
});
test('driving a web plugin', () async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test_driver', 'plugin_test.dart'],
<String>['example', 'test_driver', 'plugin.dart'],
],
isWebPlugin: true);
], platformSupport: <String, PlatformSupport>{
kPlatformWeb: PlatformSupport.inline,
});
final Directory pluginExampleDirectory =
pluginDirectory.childDirectory('example');
createFakePubspec(pluginExampleDirectory, isFlutter: true);
final List<String> output = await runCapturingPrint(runner, <String>[
'drive-examples',
'--web',
@ -463,17 +428,10 @@ void main() {
});
test('driving when plugin does not suppport Windows is a no-op', () async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test_driver', 'plugin_test.dart'],
<String>['example', 'test_driver', 'plugin.dart'],
],
isWindowsPlugin: false);
final Directory pluginExampleDirectory =
pluginDirectory.childDirectory('example');
createFakePubspec(pluginExampleDirectory, isFlutter: true);
]);
final List<String> output = await runCapturingPrint(runner, <String>[
'drive-examples',
@ -496,18 +454,17 @@ void main() {
});
test('driving on a Windows plugin', () async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test_driver', 'plugin_test.dart'],
<String>['example', 'test_driver', 'plugin.dart'],
],
isWindowsPlugin: true);
], platformSupport: <String, PlatformSupport>{
kPlatformWindows: PlatformSupport.inline
});
final Directory pluginExampleDirectory =
pluginDirectory.childDirectory('example');
createFakePubspec(pluginExampleDirectory, isFlutter: true);
final List<String> output = await runCapturingPrint(runner, <String>[
'drive-examples',
'--windows',
@ -543,17 +500,12 @@ void main() {
});
test('driving when plugin does not support mobile is no-op', () async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test_driver', 'plugin_test.dart'],
<String>['example', 'test_driver', 'plugin.dart'],
],
isMacOsPlugin: true);
final Directory pluginExampleDirectory =
pluginDirectory.childDirectory('example');
createFakePubspec(pluginExampleDirectory, isFlutter: true);
], platformSupport: <String, PlatformSupport>{
kPlatformMacos: PlatformSupport.inline,
});
final List<String> output = await runCapturingPrint(runner, <String>[
'drive-examples',
@ -575,7 +527,8 @@ void main() {
});
test('platform interface plugins are silently skipped', () async {
createFakePlugin('aplugin_platform_interface', packagesDir);
createFakePlugin('aplugin_platform_interface', packagesDir,
examples: <String>[]);
final List<String> output = await runCapturingPrint(runner, <String>[
'drive-examples',
@ -595,19 +548,18 @@ void main() {
});
test('enable-experiment flag', () async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test_driver', 'plugin_test.dart'],
<String>['example', 'test', 'plugin.dart'],
],
isIosPlugin: true,
isAndroidPlugin: true);
], platformSupport: <String, PlatformSupport>{
kPlatformAndroid: PlatformSupport.inline,
kPlatformIos: PlatformSupport.inline,
});
final Directory pluginExampleDirectory =
pluginDirectory.childDirectory('example');
createFakePubspec(pluginExampleDirectory, isFlutter: true);
await runCapturingPrint(runner, <String>[
'drive-examples',
'--enable-experiment=exp1',

View File

@ -40,7 +40,7 @@ void main() {
final MockProcess mockProcess = MockProcess();
mockProcess.exitCodeCompleter.complete(1);
processRunner.processToReturn = mockProcess;
createFakePlugin('plugin', packagesDir, withExtraFiles: <List<String>>[
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['lib/test/should_not_run_e2e.dart'],
<String>['example', 'test_driver', 'plugin_e2e.dart'],
<String>['example', 'test_driver', 'plugin_e2e_test.dart'],
@ -65,7 +65,7 @@ void main() {
});
test('runs e2e tests', () async {
createFakePlugin('plugin', packagesDir, withExtraFiles: <List<String>>[
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['test', 'plugin_test.dart'],
<String>['test', 'plugin_e2e.dart'],
<String>['should_not_run_e2e.dart'],
@ -168,7 +168,7 @@ void main() {
});
test('experimental flag', () async {
createFakePlugin('plugin', packagesDir, withExtraFiles: <List<String>>[
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['test', 'plugin_test.dart'],
<String>['test', 'plugin_e2e.dart'],
<String>['should_not_run_e2e.dart'],

View File

@ -5,6 +5,8 @@
import 'package:args/command_runner.dart';
import 'package:file/file.dart';
import 'package:file/memory.dart';
import 'package:flutter_plugin_tools/src/common/core.dart';
import 'package:flutter_plugin_tools/src/common/plugin_utils.dart';
import 'package:flutter_plugin_tools/src/java_test_command.dart';
import 'package:path/path.dart' as p;
import 'package:test/test.dart';
@ -34,10 +36,10 @@ void main() {
final Directory plugin = createFakePlugin(
'plugin1',
packagesDir,
isAndroidPlugin: true,
isFlutter: true,
withSingleExample: true,
withExtraFiles: <List<String>>[
platformSupport: <String, PlatformSupport>{
kPlatformAndroid: PlatformSupport.inline
},
extraFiles: <List<String>>[
<String>['example/android', 'gradlew'],
<String>['android/src/test', 'example_test.java'],
],
@ -61,10 +63,10 @@ void main() {
final Directory plugin = createFakePlugin(
'plugin1',
packagesDir,
isAndroidPlugin: true,
isFlutter: true,
withSingleExample: true,
withExtraFiles: <List<String>>[
platformSupport: <String, PlatformSupport>{
kPlatformAndroid: PlatformSupport.inline
},
extraFiles: <List<String>>[
<String>['example/android', 'gradlew'],
<String>['example/android/app/src/test', 'example_test.java'],
],

View File

@ -45,7 +45,7 @@ void main() {
});
test('only runs on macOS', () async {
createFakePlugin('plugin1', packagesDir, withExtraFiles: <List<String>>[
createFakePlugin('plugin1', packagesDir, extraFiles: <List<String>>[
<String>['plugin1.podspec'],
]);
@ -59,8 +59,8 @@ void main() {
});
test('runs pod lib lint on a podspec', () async {
final Directory plugin1Dir = createFakePlugin('plugin1', packagesDir,
withExtraFiles: <List<String>>[
final Directory plugin1Dir =
createFakePlugin('plugin1', packagesDir, extraFiles: <List<String>>[
<String>['ios', 'plugin1.podspec'],
<String>['bogus.dart'], // Ignore non-podspecs.
]);
@ -106,10 +106,10 @@ void main() {
});
test('skips podspecs with known issues', () async {
createFakePlugin('plugin1', packagesDir, withExtraFiles: <List<String>>[
createFakePlugin('plugin1', packagesDir, extraFiles: <List<String>>[
<String>['plugin1.podspec']
]);
createFakePlugin('plugin2', packagesDir, withExtraFiles: <List<String>>[
createFakePlugin('plugin2', packagesDir, extraFiles: <List<String>>[
<String>['plugin2.podspec']
]);
@ -125,8 +125,8 @@ void main() {
});
test('allow warnings for podspecs with known warnings', () async {
final Directory plugin1Dir = createFakePlugin('plugin1', packagesDir,
withExtraFiles: <List<String>>[
final Directory plugin1Dir =
createFakePlugin('plugin1', packagesDir, extraFiles: <List<String>>[
<String>['plugin1.podspec'],
]);

View File

@ -42,10 +42,10 @@ void main() {
});
test('lists examples', () async {
createFakePlugin('plugin1', packagesDir, withSingleExample: true);
createFakePlugin('plugin1', packagesDir);
createFakePlugin('plugin2', packagesDir,
withExamples: <String>['example1', 'example2']);
createFakePlugin('plugin3', packagesDir);
examples: <String>['example1', 'example2']);
createFakePlugin('plugin3', packagesDir, examples: <String>[]);
final List<String> examples =
await runCapturingPrint(runner, <String>['list', '--type=example']);
@ -61,10 +61,10 @@ void main() {
});
test('lists packages', () async {
createFakePlugin('plugin1', packagesDir, withSingleExample: true);
createFakePlugin('plugin1', packagesDir);
createFakePlugin('plugin2', packagesDir,
withExamples: <String>['example1', 'example2']);
createFakePlugin('plugin3', packagesDir);
examples: <String>['example1', 'example2']);
createFakePlugin('plugin3', packagesDir, examples: <String>[]);
final List<String> packages =
await runCapturingPrint(runner, <String>['list', '--type=package']);
@ -83,10 +83,10 @@ void main() {
});
test('lists files', () async {
createFakePlugin('plugin1', packagesDir, withSingleExample: true);
createFakePlugin('plugin1', packagesDir);
createFakePlugin('plugin2', packagesDir,
withExamples: <String>['example1', 'example2']);
createFakePlugin('plugin3', packagesDir);
examples: <String>['example1', 'example2']);
createFakePlugin('plugin3', packagesDir, examples: <String>[]);
final List<String> examples =
await runCapturingPrint(runner, <String>['list', '--type=file']);
@ -95,11 +95,14 @@ void main() {
examples,
unorderedEquals(<String>[
'/packages/plugin1/pubspec.yaml',
'/packages/plugin1/CHANGELOG.md',
'/packages/plugin1/example/pubspec.yaml',
'/packages/plugin2/pubspec.yaml',
'/packages/plugin2/CHANGELOG.md',
'/packages/plugin2/example/example1/pubspec.yaml',
'/packages/plugin2/example/example2/pubspec.yaml',
'/packages/plugin3/pubspec.yaml',
'/packages/plugin3/CHANGELOG.md',
]),
);
});

View File

@ -40,8 +40,10 @@ void main() {
});
test('publish check all packages', () async {
final Directory plugin1Dir = createFakePlugin('a', packagesDir);
final Directory plugin2Dir = createFakePlugin('b', packagesDir);
final Directory plugin1Dir =
createFakePlugin('plugin_tools_test_package_a', packagesDir);
final Directory plugin2Dir =
createFakePlugin('plugin_tools_test_package_b', packagesDir);
processRunner.processesToReturn.add(
MockProcess()..exitCodeCompleter.complete(0),
@ -66,7 +68,7 @@ void main() {
});
test('fail on negative test', () async {
createFakePlugin('a', packagesDir);
createFakePlugin('plugin_tools_test_package_a', packagesDir);
final MockProcess process = MockProcess();
process.stdoutController.close(); // ignore: unawaited_futures
@ -186,13 +188,8 @@ void main() {
);
runner.addCommand(command);
final Directory plugin1Dir =
createFakePlugin('no_publish_a', packagesDir, includeVersion: true);
final Directory plugin2Dir =
createFakePlugin('no_publish_b', packagesDir, includeVersion: true);
createFakePubspec(plugin1Dir, name: 'no_publish_a', version: '0.1.0');
createFakePubspec(plugin2Dir, name: 'no_publish_b', version: '0.2.0');
createFakePlugin('no_publish_a', packagesDir, version: '0.1.0');
createFakePlugin('no_publish_b', packagesDir, version: '0.2.0');
processRunner.processesToReturn.add(
MockProcess()..exitCodeCompleter.complete(0),
@ -250,13 +247,8 @@ void main() {
);
runner.addCommand(command);
final Directory plugin1Dir =
createFakePlugin('no_publish_a', packagesDir, includeVersion: true);
final Directory plugin2Dir =
createFakePlugin('no_publish_b', packagesDir, includeVersion: true);
createFakePubspec(plugin1Dir, name: 'no_publish_a', version: '0.1.0');
createFakePubspec(plugin2Dir, name: 'no_publish_b', version: '0.2.0');
createFakePlugin('no_publish_a', packagesDir, version: '0.1.0');
createFakePlugin('no_publish_b', packagesDir, version: '0.2.0');
processRunner.processesToReturn.add(
MockProcess()..exitCodeCompleter.complete(0),
@ -318,12 +310,9 @@ void main() {
runner.addCommand(command);
final Directory plugin1Dir =
createFakePlugin('no_publish_a', packagesDir, includeVersion: true);
final Directory plugin2Dir =
createFakePlugin('no_publish_b', packagesDir, includeVersion: true);
createFakePlugin('no_publish_a', packagesDir, version: '0.1.0');
createFakePlugin('no_publish_b', packagesDir, version: '0.2.0');
createFakePubspec(plugin1Dir, name: 'no_publish_a', version: '0.1.0');
createFakePubspec(plugin2Dir, name: 'no_publish_b', version: '0.2.0');
await plugin1Dir.childFile('pubspec.yaml').writeAsString('bad-yaml');
processRunner.processesToReturn.add(

View File

@ -50,9 +50,8 @@ void main() {
testRoot = fileSystem.directory(testRoot.resolveSymbolicLinksSync());
packagesDir = createPackagesDirectory(parentDir: testRoot);
pluginDir =
createFakePlugin(testPluginName, packagesDir, withSingleExample: false);
createFakePlugin(testPluginName, packagesDir, examples: <String>[]);
assert(pluginDir != null && pluginDir.existsSync());
createFakePubspec(pluginDir, version: '0.0.1');
io.Process.runSync('git', <String>['init'],
workingDirectory: testRoot.path);
gitDir = await GitDir.fromExisting(testRoot.path);
@ -138,7 +137,8 @@ void main() {
});
test('can publish non-flutter package', () async {
createFakePubspec(pluginDir, version: '0.0.1', isFlutter: false);
const String packageName = 'a_package';
createFakePackage(packageName, packagesDir);
io.Process.runSync('git', <String>['init'],
workingDirectory: testRoot.path);
gitDir = await GitDir.fromExisting(testRoot.path);
@ -149,7 +149,7 @@ void main() {
await commandRunner.run(<String>[
'publish-plugin',
'--package',
testPluginName,
packageName,
'--no-push-tags',
'--no-tag-release'
]);
@ -284,8 +284,8 @@ void main() {
'--no-push-tags',
]);
final String? tag =
(await gitDir.runCommand(<String>['show-ref', 'fake_package-v0.0.1']))
final String? tag = (await gitDir
.runCommand(<String>['show-ref', '$testPluginName-v0.0.1']))
.stdout as String?;
expect(tag, isNotEmpty);
});
@ -303,7 +303,7 @@ void main() {
expect(printedMessages, contains('Publish foo failed.'));
final String? tag = (await gitDir.runCommand(
<String>['show-ref', 'fake_package-v0.0.1'],
<String>['show-ref', '$testPluginName-v0.0.1'],
throwOnError: false))
.stdout as String?;
expect(tag, isEmpty);
@ -342,7 +342,7 @@ void main() {
expect(processRunner.pushTagsArgs.isNotEmpty, isTrue);
expect(processRunner.pushTagsArgs[1], 'upstream');
expect(processRunner.pushTagsArgs[2], 'fake_package-v0.0.1');
expect(processRunner.pushTagsArgs[2], '$testPluginName-v0.0.1');
expect(printedMessages.last, 'Done!');
});
@ -360,7 +360,7 @@ void main() {
expect(processRunner.pushTagsArgs.isNotEmpty, isTrue);
expect(processRunner.pushTagsArgs[1], 'upstream');
expect(processRunner.pushTagsArgs[2], 'fake_package-v0.0.1');
expect(processRunner.pushTagsArgs[2], '$testPluginName-v0.0.1');
expect(printedMessages.last, 'Done!');
});
@ -378,7 +378,7 @@ void main() {
containsAllInOrder(<String>[
'=============== DRY RUN ===============',
'Running `pub publish ` in ${pluginDir.path}...\n',
'Tagging release fake_package-v0.0.1...',
'Tagging release $testPluginName-v0.0.1...',
'Pushing tag to upstream...',
'Done!'
]));
@ -399,7 +399,7 @@ void main() {
expect(processRunner.pushTagsArgs.isNotEmpty, isTrue);
expect(processRunner.pushTagsArgs[1], 'origin');
expect(processRunner.pushTagsArgs[2], 'fake_package-v0.0.1');
expect(processRunner.pushTagsArgs[2], '$testPluginName-v0.0.1');
expect(printedMessages.last, 'Done!');
});
@ -428,15 +428,12 @@ void main() {
test('can release newly created plugins', () async {
// Non-federated
final Directory pluginDir1 =
createFakePlugin('plugin1', packagesDir, withSingleExample: true);
final Directory pluginDir1 = createFakePlugin('plugin1', packagesDir);
// federated
final Directory pluginDir2 = createFakePlugin('plugin2', packagesDir,
withSingleExample: true, parentDirectoryName: 'plugin2');
createFakePubspec(pluginDir1,
name: 'plugin1', isFlutter: false, version: '0.0.1');
createFakePubspec(pluginDir2,
name: 'plugin2', isFlutter: false, version: '0.0.1');
final Directory pluginDir2 = createFakePlugin(
'plugin2',
packagesDir.childDirectory('plugin2'),
);
await gitDir.runCommand(<String>['add', '-A']);
await gitDir.runCommand(<String>['commit', '-m', 'Add plugins']);
// Immediately return 0 when running `pub publish`.
@ -467,10 +464,7 @@ void main() {
test('can release newly created plugins, while there are existing plugins',
() async {
// Prepare an exiting plugin and tag it
final Directory pluginDir0 =
createFakePlugin('plugin0', packagesDir, withSingleExample: true);
createFakePubspec(pluginDir0,
name: 'plugin0', isFlutter: false, version: '0.0.1');
createFakePlugin('plugin0', packagesDir);
await gitDir.runCommand(<String>['add', '-A']);
await gitDir.runCommand(<String>['commit', '-m', 'Add plugins']);
// Immediately return 0 when running `pub publish`.
@ -481,15 +475,10 @@ void main() {
processRunner.pushTagsArgs.clear();
// Non-federated
final Directory pluginDir1 =
createFakePlugin('plugin1', packagesDir, withSingleExample: true);
final Directory pluginDir1 = createFakePlugin('plugin1', packagesDir);
// federated
final Directory pluginDir2 = createFakePlugin('plugin2', packagesDir,
withSingleExample: true, parentDirectoryName: 'plugin2');
createFakePubspec(pluginDir1,
name: 'plugin1', isFlutter: false, version: '0.0.1');
createFakePubspec(pluginDir2,
name: 'plugin2', isFlutter: false, version: '0.0.1');
final Directory pluginDir2 =
createFakePlugin('plugin2', packagesDir.childDirectory('plugin2'));
await gitDir.runCommand(<String>['add', '-A']);
await gitDir.runCommand(<String>['commit', '-m', 'Add plugins']);
// Immediately return 0 when running `pub publish`.
@ -517,15 +506,10 @@ void main() {
test('can release newly created plugins, dry run', () async {
// Non-federated
final Directory pluginDir1 =
createFakePlugin('plugin1', packagesDir, withSingleExample: true);
final Directory pluginDir1 = createFakePlugin('plugin1', packagesDir);
// federated
final Directory pluginDir2 = createFakePlugin('plugin2', packagesDir,
withSingleExample: true, parentDirectoryName: 'plugin2');
createFakePubspec(pluginDir1,
name: 'plugin1', isFlutter: false, version: '0.0.1');
createFakePubspec(pluginDir2,
name: 'plugin2', isFlutter: false, version: '0.0.1');
final Directory pluginDir2 =
createFakePlugin('plugin2', packagesDir.childDirectory('plugin2'));
await gitDir.runCommand(<String>['add', '-A']);
await gitDir.runCommand(<String>['commit', '-m', 'Add plugins']);
// Immediately return 1 when running `pub publish`. If dry-run does not work, test should throw.
@ -558,15 +542,10 @@ void main() {
test('version change triggers releases.', () async {
// Non-federated
final Directory pluginDir1 =
createFakePlugin('plugin1', packagesDir, withSingleExample: true);
final Directory pluginDir1 = createFakePlugin('plugin1', packagesDir);
// federated
final Directory pluginDir2 = createFakePlugin('plugin2', packagesDir,
withSingleExample: true, parentDirectoryName: 'plugin2');
createFakePubspec(pluginDir1,
name: 'plugin1', isFlutter: false, version: '0.0.1');
createFakePubspec(pluginDir2,
name: 'plugin2', isFlutter: false, version: '0.0.1');
final Directory pluginDir2 =
createFakePlugin('plugin2', packagesDir.childDirectory('plugin2'));
await gitDir.runCommand(<String>['add', '-A']);
await gitDir.runCommand(<String>['commit', '-m', 'Add plugins']);
// Immediately return 0 when running `pub publish`.
@ -641,15 +620,10 @@ void main() {
'delete package will not trigger publish but exit the command successfully.',
() async {
// Non-federated
final Directory pluginDir1 =
createFakePlugin('plugin1', packagesDir, withSingleExample: true);
final Directory pluginDir1 = createFakePlugin('plugin1', packagesDir);
// federated
final Directory pluginDir2 = createFakePlugin('plugin2', packagesDir,
withSingleExample: true, parentDirectoryName: 'plugin2');
createFakePubspec(pluginDir1,
name: 'plugin1', isFlutter: false, version: '0.0.1');
createFakePubspec(pluginDir2,
name: 'plugin2', isFlutter: false, version: '0.0.1');
final Directory pluginDir2 =
createFakePlugin('plugin2', packagesDir.childDirectory('plugin2'));
await gitDir.runCommand(<String>['add', '-A']);
await gitDir.runCommand(<String>['commit', '-m', 'Add plugins']);
// Immediately return 0 when running `pub publish`.
@ -722,14 +696,11 @@ void main() {
() async {
// Non-federated
final Directory pluginDir1 =
createFakePlugin('plugin1', packagesDir, withSingleExample: true);
createFakePlugin('plugin1', packagesDir, version: '0.0.2');
// federated
final Directory pluginDir2 = createFakePlugin('plugin2', packagesDir,
withSingleExample: true, parentDirectoryName: 'plugin2');
createFakePubspec(pluginDir1,
name: 'plugin1', isFlutter: false, version: '0.0.2');
createFakePubspec(pluginDir2,
name: 'plugin2', isFlutter: false, version: '0.0.2');
final Directory pluginDir2 = createFakePlugin(
'plugin2', packagesDir.childDirectory('plugin2'),
version: '0.0.2');
await gitDir.runCommand(<String>['add', '-A']);
await gitDir.runCommand(<String>['commit', '-m', 'Add plugins']);
// Immediately return 0 when running `pub publish`.
@ -795,15 +766,10 @@ void main() {
test('No version change does not release any plugins', () async {
// Non-federated
final Directory pluginDir1 =
createFakePlugin('plugin1', packagesDir, withSingleExample: true);
final Directory pluginDir1 = createFakePlugin('plugin1', packagesDir);
// federated
final Directory pluginDir2 = createFakePlugin('plugin2', packagesDir,
withSingleExample: true, parentDirectoryName: 'plugin2');
createFakePubspec(pluginDir1,
name: 'plugin1', isFlutter: false, version: '0.0.1');
createFakePubspec(pluginDir2,
name: 'plugin2', isFlutter: false, version: '0.0.1');
final Directory pluginDir2 =
createFakePlugin('plugin2', packagesDir.childDirectory('plugin2'));
io.Process.runSync('git', <String>['init'],
workingDirectory: testRoot.path);

View File

@ -88,8 +88,7 @@ dev_dependencies:
}
test('passes for a plugin following conventions', () async {
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, withSingleExample: true);
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir);
pluginDirectory.childFile('pubspec.yaml').writeAsStringSync('''
${headerSection('plugin', isPlugin: true)}
@ -114,8 +113,7 @@ ${devDependenciesSection()}
});
test('passes for a Flutter package following conventions', () async {
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, withSingleExample: true);
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir);
pluginDirectory.childFile('pubspec.yaml').writeAsStringSync('''
${headerSection('plugin')}
@ -163,8 +161,7 @@ ${dependenciesSection()}
});
test('fails when homepage is included', () async {
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, withSingleExample: true);
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir);
pluginDirectory.childFile('pubspec.yaml').writeAsStringSync('''
${headerSection('plugin', isPlugin: true, includeHomepage: true)}
@ -184,8 +181,7 @@ ${devDependenciesSection()}
});
test('fails when repository is missing', () async {
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, withSingleExample: true);
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir);
pluginDirectory.childFile('pubspec.yaml').writeAsStringSync('''
${headerSection('plugin', isPlugin: true, includeRepository: false)}
@ -205,8 +201,7 @@ ${devDependenciesSection()}
});
test('fails when homepage is given instead of repository', () async {
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, withSingleExample: true);
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir);
pluginDirectory.childFile('pubspec.yaml').writeAsStringSync('''
${headerSection('plugin', isPlugin: true, includeHomepage: true, includeRepository: false)}
@ -226,8 +221,7 @@ ${devDependenciesSection()}
});
test('fails when issue tracker is missing', () async {
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, withSingleExample: true);
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir);
pluginDirectory.childFile('pubspec.yaml').writeAsStringSync('''
${headerSection('plugin', isPlugin: true, includeIssueTracker: false)}
@ -247,8 +241,7 @@ ${devDependenciesSection()}
});
test('fails when environment section is out of order', () async {
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, withSingleExample: true);
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir);
pluginDirectory.childFile('pubspec.yaml').writeAsStringSync('''
${headerSection('plugin', isPlugin: true)}
@ -268,8 +261,7 @@ ${environmentSection()}
});
test('fails when flutter section is out of order', () async {
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, withSingleExample: true);
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir);
pluginDirectory.childFile('pubspec.yaml').writeAsStringSync('''
${headerSection('plugin', isPlugin: true)}
@ -289,8 +281,7 @@ ${devDependenciesSection()}
});
test('fails when dependencies section is out of order', () async {
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, withSingleExample: true);
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir);
pluginDirectory.childFile('pubspec.yaml').writeAsStringSync('''
${headerSection('plugin', isPlugin: true)}
@ -310,8 +301,7 @@ ${dependenciesSection()}
});
test('fails when devDependencies section is out of order', () async {
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, withSingleExample: true);
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir);
pluginDirectory.childFile('pubspec.yaml').writeAsStringSync('''
${headerSection('plugin', isPlugin: true)}

View File

@ -5,6 +5,8 @@
import 'package:args/command_runner.dart';
import 'package:file/file.dart';
import 'package:file/memory.dart';
import 'package:flutter_plugin_tools/src/common/core.dart';
import 'package:flutter_plugin_tools/src/common/plugin_utils.dart';
import 'package:flutter_plugin_tools/src/test_command.dart';
import 'package:test/test.dart';
@ -29,12 +31,12 @@ void main() {
});
test('runs flutter test on each plugin', () async {
final Directory plugin1Dir = createFakePlugin('plugin1', packagesDir,
withExtraFiles: <List<String>>[
final Directory plugin1Dir =
createFakePlugin('plugin1', packagesDir, extraFiles: <List<String>>[
<String>['test', 'empty_test.dart'],
]);
final Directory plugin2Dir = createFakePlugin('plugin2', packagesDir,
withExtraFiles: <List<String>>[
final Directory plugin2Dir =
createFakePlugin('plugin2', packagesDir, extraFiles: <List<String>>[
<String>['test', 'empty_test.dart'],
]);
@ -53,8 +55,8 @@ void main() {
test('skips testing plugins without test directory', () async {
createFakePlugin('plugin1', packagesDir);
final Directory plugin2Dir = createFakePlugin('plugin2', packagesDir,
withExtraFiles: <List<String>>[
final Directory plugin2Dir =
createFakePlugin('plugin2', packagesDir, extraFiles: <List<String>>[
<String>['test', 'empty_test.dart'],
]);
@ -70,14 +72,12 @@ void main() {
});
test('runs pub run test on non-Flutter packages', () async {
final Directory plugin1Dir = createFakePlugin('plugin1', packagesDir,
isFlutter: true,
withExtraFiles: <List<String>>[
final Directory pluginDir =
createFakePlugin('a', packagesDir, extraFiles: <List<String>>[
<String>['test', 'empty_test.dart'],
]);
final Directory plugin2Dir = createFakePlugin('plugin2', packagesDir,
isFlutter: false,
withExtraFiles: <List<String>>[
final Directory packageDir =
createFakePackage('b', packagesDir, extraFiles: <List<String>>[
<String>['test', 'empty_test.dart'],
]);
@ -89,12 +89,12 @@ void main() {
ProcessCall(
'flutter',
const <String>['test', '--color', '--enable-experiment=exp1'],
plugin1Dir.path),
ProcessCall('dart', const <String>['pub', 'get'], plugin2Dir.path),
pluginDir.path),
ProcessCall('dart', const <String>['pub', 'get'], packageDir.path),
ProcessCall(
'dart',
const <String>['pub', 'run', '--enable-experiment=exp1', 'test'],
plugin2Dir.path),
packageDir.path),
]),
);
});
@ -103,11 +103,12 @@ void main() {
final Directory pluginDir = createFakePlugin(
'plugin',
packagesDir,
withExtraFiles: <List<String>>[
extraFiles: <List<String>>[
<String>['test', 'empty_test.dart'],
],
isFlutter: true,
isWebPlugin: true,
platformSupport: <String, PlatformSupport>{
kPlatformWeb: PlatformSupport.inline,
},
);
await runner.run(<String>['test']);
@ -124,14 +125,12 @@ void main() {
});
test('enable-experiment flag', () async {
final Directory plugin1Dir = createFakePlugin('plugin1', packagesDir,
isFlutter: true,
withExtraFiles: <List<String>>[
final Directory pluginDir =
createFakePlugin('a', packagesDir, extraFiles: <List<String>>[
<String>['test', 'empty_test.dart'],
]);
final Directory plugin2Dir = createFakePlugin('plugin2', packagesDir,
isFlutter: false,
withExtraFiles: <List<String>>[
final Directory packageDir =
createFakePackage('b', packagesDir, extraFiles: <List<String>>[
<String>['test', 'empty_test.dart'],
]);
@ -143,12 +142,12 @@ void main() {
ProcessCall(
'flutter',
const <String>['test', '--color', '--enable-experiment=exp1'],
plugin1Dir.path),
ProcessCall('dart', const <String>['pub', 'get'], plugin2Dir.path),
pluginDir.path),
ProcessCall('dart', const <String>['pub', 'get'], packageDir.path),
ProcessCall(
'dart',
const <String>['pub', 'run', '--enable-experiment=exp1', 'test'],
plugin2Dir.path),
packageDir.path),
]),
);
});

View File

@ -9,6 +9,7 @@ import 'dart:io' as io;
import 'package:args/command_runner.dart';
import 'package:file/file.dart';
import 'package:file/memory.dart';
import 'package:flutter_plugin_tools/src/common/core.dart';
import 'package:flutter_plugin_tools/src/common/plugin_utils.dart';
import 'package:flutter_plugin_tools/src/common/process_runner.dart';
import 'package:meta/meta.dart';
@ -32,70 +33,35 @@ Directory createPackagesDirectory(
}
/// Creates a plugin package with the given [name] in [packagesDirectory].
///
/// [platformSupport] is a map of platform string to the support details for
/// that platform.
Directory createFakePlugin(
String name,
Directory packagesDirectory, {
bool withSingleExample = false,
List<String> withExamples = const <String>[],
List<List<String>> withExtraFiles = const <List<String>>[],
bool isFlutter = true,
// TODO(stuartmorgan): Change these platform switches to support type enums.
bool isAndroidPlugin = false,
bool isIosPlugin = false,
bool isWebPlugin = false,
bool isLinuxPlugin = false,
bool isMacOsPlugin = false,
bool isWindowsPlugin = false,
bool includeChangeLog = false,
bool includeVersion = false,
String version = '0.0.1',
String parentDirectoryName = '',
Directory parentDirectory, {
List<String> examples = const <String>['example'],
List<List<String>> extraFiles = const <List<String>>[],
Map<String, PlatformSupport> platformSupport =
const <String, PlatformSupport>{},
String? version = '0.0.1',
}) {
assert(!(withSingleExample && withExamples.isNotEmpty),
'cannot pass withSingleExample and withExamples simultaneously');
final Directory pluginDirectory = createFakePackage(name, parentDirectory,
isFlutter: true,
examples: examples,
extraFiles: extraFiles,
version: version);
Directory parentDirectory = packagesDirectory;
if (parentDirectoryName != '') {
parentDirectory = parentDirectory.childDirectory(parentDirectoryName);
}
final Directory pluginDirectory = parentDirectory.childDirectory(name);
pluginDirectory.createSync(recursive: true);
createFakePubspec(pluginDirectory,
createFakePubspec(
pluginDirectory,
name: name,
isFlutter: isFlutter,
androidSupport: isAndroidPlugin ? PlatformSupport.inline : null,
iosSupport: isIosPlugin ? PlatformSupport.inline : null,
webSupport: isWebPlugin ? PlatformSupport.inline : null,
linuxSupport: isLinuxPlugin ? PlatformSupport.inline : null,
macosSupport: isMacOsPlugin ? PlatformSupport.inline : null,
windowsSupport: isWindowsPlugin ? PlatformSupport.inline : null,
version: includeVersion ? version : null);
if (includeChangeLog) {
createFakeCHANGELOG(pluginDirectory, '''
## 0.0.1
* Some changes.
''');
}
if (withSingleExample) {
final Directory exampleDir = pluginDirectory.childDirectory('example')
..createSync();
createFakePubspec(exampleDir,
name: '${name}_example', isFlutter: isFlutter, publishTo: 'none');
} else if (withExamples.isNotEmpty) {
final Directory exampleDir = pluginDirectory.childDirectory('example')
..createSync();
for (final String example in withExamples) {
final Directory currentExample = exampleDir.childDirectory(example)
..createSync();
createFakePubspec(currentExample,
name: example, isFlutter: isFlutter, publishTo: 'none');
}
}
isFlutter: true,
isPlugin: true,
platformSupport: platformSupport,
version: version,
);
final FileSystem fileSystem = pluginDirectory.fileSystem;
for (final List<String> file in withExtraFiles) {
for (final List<String> file in extraFiles) {
final List<String> newFilePath = <String>[pluginDirectory.path, ...file];
final File newFile = fileSystem.file(fileSystem.path.joinAll(newFilePath));
newFile.createSync(recursive: true);
@ -104,51 +70,88 @@ Directory createFakePlugin(
return pluginDirectory;
}
/// Creates a plugin package with the given [name] in [packagesDirectory].
Directory createFakePackage(
String name,
Directory parentDirectory, {
List<String> examples = const <String>['example'],
List<List<String>> extraFiles = const <List<String>>[],
bool isFlutter = false,
String? version = '0.0.1',
}) {
final Directory packageDirectory = parentDirectory.childDirectory(name);
packageDirectory.createSync(recursive: true);
createFakePubspec(packageDirectory, name: name, isFlutter: isFlutter);
createFakeCHANGELOG(packageDirectory, '''
## $version
* Some changes.
''');
if (examples.length == 1) {
final Directory exampleDir = packageDirectory.childDirectory(examples.first)
..createSync();
createFakePubspec(exampleDir,
name: '${name}_example', isFlutter: isFlutter, publishTo: 'none');
} else if (examples.isNotEmpty) {
final Directory exampleDir = packageDirectory.childDirectory('example')
..createSync();
for (final String example in examples) {
final Directory currentExample = exampleDir.childDirectory(example)
..createSync();
createFakePubspec(currentExample,
name: example, isFlutter: isFlutter, publishTo: 'none');
}
}
final FileSystem fileSystem = packageDirectory.fileSystem;
for (final List<String> file in extraFiles) {
final List<String> newFilePath = <String>[packageDirectory.path, ...file];
final File newFile = fileSystem.file(fileSystem.path.joinAll(newFilePath));
newFile.createSync(recursive: true);
}
return packageDirectory;
}
void createFakeCHANGELOG(Directory parent, String texts) {
parent.childFile('CHANGELOG.md').createSync();
parent.childFile('CHANGELOG.md').writeAsStringSync(texts);
}
/// Creates a `pubspec.yaml` file with a flutter dependency.
///
/// [platformSupport] is a map of platform string to the support details for
/// that platform. If empty, no `plugin` entry will be created unless `isPlugin`
/// is set to `true`.
void createFakePubspec(
Directory parent, {
String name = 'fake_package',
bool isFlutter = true,
PlatformSupport? androidSupport,
PlatformSupport? iosSupport,
PlatformSupport? linuxSupport,
PlatformSupport? macosSupport,
PlatformSupport? webSupport,
PlatformSupport? windowsSupport,
bool isPlugin = false,
Map<String, PlatformSupport> platformSupport =
const <String, PlatformSupport>{},
String publishTo = 'http://no_pub_server.com',
String? version,
}) {
isPlugin |= platformSupport.isNotEmpty;
parent.childFile('pubspec.yaml').createSync();
String yaml = '''
name: $name
''';
if (isFlutter) {
if (isPlugin) {
yaml += '''
flutter:
plugin:
platforms:
''';
if (androidSupport != null) {
yaml += _pluginPlatformSection('android', androidSupport, name);
for (final MapEntry<String, PlatformSupport> platform
in platformSupport.entries) {
yaml += _pluginPlatformSection(platform.key, platform.value, name);
}
if (iosSupport != null) {
yaml += _pluginPlatformSection('ios', iosSupport, name);
}
if (webSupport != null) {
yaml += _pluginPlatformSection('web', webSupport, name);
}
if (linuxSupport != null) {
yaml += _pluginPlatformSection('linux', linuxSupport, name);
}
if (macosSupport != null) {
yaml += _pluginPlatformSection('macos', macosSupport, name);
}
if (windowsSupport != null) {
yaml += _pluginPlatformSection('windows', windowsSupport, name);
}
if (isFlutter) {
yaml += '''
dependencies:
flutter:
@ -177,34 +180,34 @@ String _pluginPlatformSection(
''';
}
switch (platform) {
case 'android':
case kPlatformAndroid:
return '''
android:
package: io.flutter.plugins.fake
pluginClass: FakePlugin
''';
case 'ios':
case kPlatformIos:
return '''
ios:
pluginClass: FLTFakePlugin
''';
case 'linux':
case kPlatformLinux:
return '''
linux:
pluginClass: FakePlugin
''';
case 'macos':
case kPlatformMacos:
return '''
macos:
pluginClass: FakePlugin
''';
case 'web':
case kPlatformWeb:
return '''
web:
pluginClass: FakePlugin
fileName: ${packageName}_web.dart
''';
case 'windows':
case kPlatformWindows:
return '''
windows:
pluginClass: FakePlugin

View File

@ -100,12 +100,12 @@ void main() {
});
test('allows valid version', () async {
createFakePlugin('plugin', packagesDir,
includeChangeLog: true, includeVersion: true);
const String newVersion = '2.0.0';
createFakePlugin('plugin', packagesDir, version: newVersion);
gitDiffResponse = 'packages/plugin/pubspec.yaml';
gitShowResponses = <String, String>{
'master:packages/plugin/pubspec.yaml': 'version: 1.0.0',
'HEAD:packages/plugin/pubspec.yaml': 'version: 2.0.0',
'HEAD:packages/plugin/pubspec.yaml': 'version: $newVersion',
};
final List<String> output = await runCapturingPrint(
runner, <String>['version-check', '--base-sha=master']);
@ -127,12 +127,12 @@ void main() {
});
test('denies invalid version', () async {
createFakePlugin('plugin', packagesDir,
includeChangeLog: true, includeVersion: true);
const String newVersion = '0.2.0';
createFakePlugin('plugin', packagesDir, version: newVersion);
gitDiffResponse = 'packages/plugin/pubspec.yaml';
gitShowResponses = <String, String>{
'master:packages/plugin/pubspec.yaml': 'version: 0.0.1',
'HEAD:packages/plugin/pubspec.yaml': 'version: 0.2.0',
'HEAD:packages/plugin/pubspec.yaml': 'version: $newVersion',
};
final Future<List<String>> result = runCapturingPrint(
runner, <String>['version-check', '--base-sha=master']);
@ -152,12 +152,12 @@ void main() {
});
test('allows valid version without explicit base-sha', () async {
createFakePlugin('plugin', packagesDir,
includeChangeLog: true, includeVersion: true);
const String newVersion = '2.0.0';
createFakePlugin('plugin', packagesDir, version: newVersion);
gitDiffResponse = 'packages/plugin/pubspec.yaml';
gitShowResponses = <String, String>{
'abc123:packages/plugin/pubspec.yaml': 'version: 1.0.0',
'HEAD:packages/plugin/pubspec.yaml': 'version: 2.0.0',
'HEAD:packages/plugin/pubspec.yaml': 'version: $newVersion',
};
final List<String> output =
await runCapturingPrint(runner, <String>['version-check']);
@ -171,11 +171,11 @@ void main() {
});
test('allows valid version for new package.', () async {
createFakePlugin('plugin', packagesDir,
includeChangeLog: true, includeVersion: true);
const String newVersion = '1.0.0';
createFakePlugin('plugin', packagesDir, version: newVersion);
gitDiffResponse = 'packages/plugin/pubspec.yaml';
gitShowResponses = <String, String>{
'HEAD:packages/plugin/pubspec.yaml': 'version: 1.0.0',
'HEAD:packages/plugin/pubspec.yaml': 'version: $newVersion',
};
final List<String> output =
await runCapturingPrint(runner, <String>['version-check']);
@ -190,12 +190,12 @@ void main() {
});
test('allows likely reverts.', () async {
createFakePlugin('plugin', packagesDir,
includeChangeLog: true, includeVersion: true);
const String newVersion = '0.6.1';
createFakePlugin('plugin', packagesDir, version: newVersion);
gitDiffResponse = 'packages/plugin/pubspec.yaml';
gitShowResponses = <String, String>{
'abc123:packages/plugin/pubspec.yaml': 'version: 0.6.2',
'HEAD:packages/plugin/pubspec.yaml': 'version: 0.6.1',
'HEAD:packages/plugin/pubspec.yaml': 'version: $newVersion',
};
final List<String> output =
await runCapturingPrint(runner, <String>['version-check']);
@ -209,12 +209,12 @@ void main() {
});
test('denies lower version that could not be a simple revert', () async {
createFakePlugin('plugin', packagesDir,
includeChangeLog: true, includeVersion: true);
const String newVersion = '0.5.1';
createFakePlugin('plugin', packagesDir, version: newVersion);
gitDiffResponse = 'packages/plugin/pubspec.yaml';
gitShowResponses = <String, String>{
'abc123:packages/plugin/pubspec.yaml': 'version: 0.6.2',
'HEAD:packages/plugin/pubspec.yaml': 'version: 0.5.1',
'HEAD:packages/plugin/pubspec.yaml': 'version: $newVersion',
};
final Future<List<String>> result =
runCapturingPrint(runner, <String>['version-check']);
@ -226,12 +226,12 @@ void main() {
});
test('denies invalid version without explicit base-sha', () async {
createFakePlugin('plugin', packagesDir,
includeChangeLog: true, includeVersion: true);
const String newVersion = '0.2.0';
createFakePlugin('plugin', packagesDir, version: newVersion);
gitDiffResponse = 'packages/plugin/pubspec.yaml';
gitShowResponses = <String, String>{
'abc123:packages/plugin/pubspec.yaml': 'version: 0.0.1',
'HEAD:packages/plugin/pubspec.yaml': 'version: 0.2.0',
'HEAD:packages/plugin/pubspec.yaml': 'version: $newVersion',
};
final Future<List<String>> result =
runCapturingPrint(runner, <String>['version-check']);
@ -243,8 +243,8 @@ void main() {
});
test('gracefully handles missing pubspec.yaml', () async {
final Directory pluginDir = createFakePlugin('plugin', packagesDir,
includeChangeLog: true, includeVersion: true);
final Directory pluginDir =
createFakePlugin('plugin', packagesDir, examples: <String>[]);
gitDiffResponse = 'packages/plugin/pubspec.yaml';
pluginDir.childFile('pubspec.yaml').deleteSync();
final List<String> output = await runCapturingPrint(
@ -265,14 +265,15 @@ void main() {
});
test('allows minor changes to platform interfaces', () async {
const String newVersion = '1.1.0';
createFakePlugin('plugin_platform_interface', packagesDir,
includeChangeLog: true, includeVersion: true);
version: newVersion);
gitDiffResponse = 'packages/plugin_platform_interface/pubspec.yaml';
gitShowResponses = <String, String>{
'master:packages/plugin_platform_interface/pubspec.yaml':
'version: 1.0.0',
'HEAD:packages/plugin_platform_interface/pubspec.yaml':
'version: 1.1.0',
'version: $newVersion',
};
final List<String> output = await runCapturingPrint(
runner, <String>['version-check', '--base-sha=master']);
@ -299,14 +300,15 @@ void main() {
});
test('disallows breaking changes to platform interfaces', () async {
const String newVersion = '2.0.0';
createFakePlugin('plugin_platform_interface', packagesDir,
includeChangeLog: true, includeVersion: true);
version: newVersion);
gitDiffResponse = 'packages/plugin_platform_interface/pubspec.yaml';
gitShowResponses = <String, String>{
'master:packages/plugin_platform_interface/pubspec.yaml':
'version: 1.0.0',
'HEAD:packages/plugin_platform_interface/pubspec.yaml':
'version: 2.0.0',
'version: $newVersion',
};
final Future<List<String>> output = runCapturingPrint(
runner, <String>['version-check', '--base-sha=master']);
@ -332,16 +334,11 @@ void main() {
test('Allow empty lines in front of the first version in CHANGELOG',
() async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
includeChangeLog: true, includeVersion: true);
createFakePubspec(pluginDirectory, isFlutter: true, version: '1.0.1');
const String version = '1.0.1';
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, version: version);
const String changelog = '''
## 1.0.1
## $version
* Some changes.
''';
createFakeCHANGELOG(pluginDirectory, changelog);
@ -358,13 +355,10 @@ void main() {
});
test('Throws if versions in changelog and pubspec do not match', () async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
includeChangeLog: true, includeVersion: true);
createFakePubspec(pluginDirectory, isFlutter: true, version: '1.0.1');
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, version: '1.0.1');
const String changelog = '''
## 1.0.2
* Some changes.
''';
createFakeCHANGELOG(pluginDirectory, changelog);
@ -392,13 +386,12 @@ The first version listed in CHANGELOG.md is 1.0.2.
});
test('Success if CHANGELOG and pubspec versions match', () async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
includeChangeLog: true, includeVersion: true);
const String version = '1.0.1';
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, version: version);
createFakePubspec(pluginDirectory, isFlutter: true, version: '1.0.1');
const String changelog = '''
## 1.0.1
## $version
* Some changes.
''';
createFakeCHANGELOG(pluginDirectory, changelog);
@ -417,17 +410,13 @@ The first version listed in CHANGELOG.md is 1.0.2.
test(
'Fail if pubspec version only matches an older version listed in CHANGELOG',
() async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
includeChangeLog: true, includeVersion: true);
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, version: '1.0.0');
createFakePubspec(pluginDirectory, isFlutter: true, version: '1.0.0');
const String changelog = '''
## 1.0.1
* Some changes.
## 1.0.0
* Some other changes.
''';
createFakeCHANGELOG(pluginDirectory, changelog);
@ -458,17 +447,14 @@ The first version listed in CHANGELOG.md is 1.0.1.
test('Allow NEXT as a placeholder for gathering CHANGELOG entries',
() async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
includeChangeLog: true, includeVersion: true);
const String version = '1.0.0';
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, version: version);
createFakePubspec(pluginDirectory, isFlutter: true, version: '1.0.0');
const String changelog = '''
## NEXT
* Some changes that won't be published until the next time there's a release.
## 1.0.0
## $version
* Some other changes.
''';
createFakeCHANGELOG(pluginDirectory, changelog);
@ -486,21 +472,16 @@ The first version listed in CHANGELOG.md is 1.0.1.
test('Fail if NEXT is left in the CHANGELOG when adding a version bump',
() async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
includeChangeLog: true, includeVersion: true);
const String version = '1.0.1';
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, version: version);
createFakePubspec(pluginDirectory, isFlutter: true, version: '1.0.1');
const String changelog = '''
## 1.0.1
## $version
* Some changes.
## NEXT
* Some changes that should have been folded in 1.0.1.
## 1.0.0
* Some other changes.
''';
createFakeCHANGELOG(pluginDirectory, changelog);
@ -529,17 +510,13 @@ into the new version's release notes.
});
test('Fail if the version changes without replacing NEXT', () async {
final Directory pluginDirectory = createFakePlugin('plugin', packagesDir,
includeChangeLog: true, includeVersion: true);
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir, version: '1.0.1');
createFakePubspec(pluginDirectory, isFlutter: true, version: '1.0.1');
const String changelog = '''
## NEXT
* Some changes that should be listed as part of 1.0.1.
## 1.0.0
* Some other changes.
''';
createFakeCHANGELOG(pluginDirectory, changelog);
@ -588,12 +565,12 @@ The first version listed in CHANGELOG.md is 1.0.0.
'version_check_command', 'Test for $VersionCheckCommand');
runner.addCommand(command);
createFakePlugin('plugin', packagesDir,
includeChangeLog: true, includeVersion: true);
const String newVersion = '2.0.0';
createFakePlugin('plugin', packagesDir, version: newVersion);
gitDiffResponse = 'packages/plugin/pubspec.yaml';
gitShowResponses = <String, String>{
'master:packages/plugin/pubspec.yaml': 'version: 1.0.0',
'HEAD:packages/plugin/pubspec.yaml': 'version: 2.0.0',
'HEAD:packages/plugin/pubspec.yaml': 'version: $newVersion',
};
final List<String> output = await runCapturingPrint(runner,
<String>['version-check', '--base-sha=master', '--against-pub']);
@ -625,12 +602,12 @@ The first version listed in CHANGELOG.md is 1.0.0.
'version_check_command', 'Test for $VersionCheckCommand');
runner.addCommand(command);
createFakePlugin('plugin', packagesDir,
includeChangeLog: true, includeVersion: true);
const String newVersion = '2.0.0';
createFakePlugin('plugin', packagesDir, version: newVersion);
gitDiffResponse = 'packages/plugin/pubspec.yaml';
gitShowResponses = <String, String>{
'master:packages/plugin/pubspec.yaml': 'version: 1.0.0',
'HEAD:packages/plugin/pubspec.yaml': 'version: 2.0.0',
'HEAD:packages/plugin/pubspec.yaml': 'version: $newVersion',
};
bool hasError = false;
@ -670,12 +647,12 @@ ${indentation}Allowed versions: {1.0.0: NextVersionType.BREAKING_MAJOR, 0.1.0: N
'version_check_command', 'Test for $VersionCheckCommand');
runner.addCommand(command);
createFakePlugin('plugin', packagesDir,
includeChangeLog: true, includeVersion: true);
const String newVersion = '2.0.0';
createFakePlugin('plugin', packagesDir, version: newVersion);
gitDiffResponse = 'packages/plugin/pubspec.yaml';
gitShowResponses = <String, String>{
'master:packages/plugin/pubspec.yaml': 'version: 1.0.0',
'HEAD:packages/plugin/pubspec.yaml': 'version: 2.0.0',
'HEAD:packages/plugin/pubspec.yaml': 'version: $newVersion',
};
bool hasError = false;
final List<String> result = await runCapturingPrint(runner, <String>[
@ -714,12 +691,12 @@ ${indentation}HTTP response: xx
'version_check_command', 'Test for $VersionCheckCommand');
runner.addCommand(command);
createFakePlugin('plugin', packagesDir,
includeChangeLog: true, includeVersion: true);
const String newVersion = '2.0.0';
createFakePlugin('plugin', packagesDir, version: newVersion);
gitDiffResponse = 'packages/plugin/pubspec.yaml';
gitShowResponses = <String, String>{
'master:packages/plugin/pubspec.yaml': 'version: 1.0.0',
'HEAD:packages/plugin/pubspec.yaml': 'version: 2.0.0',
'HEAD:packages/plugin/pubspec.yaml': 'version: $newVersion',
};
final List<String> result = await runCapturingPrint(runner,
<String>['version-check', '--base-sha=master', '--against-pub']);

View File

@ -113,16 +113,11 @@ void main() {
group('iOS', () {
test('skip if iOS is not supported', () async {
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test'],
],
isIosPlugin: false,
isMacOsPlugin: true);
createFakePubspec(pluginDirectory.childDirectory('example'),
isFlutter: true);
], platformSupport: <String, PlatformSupport>{
kPlatformMacos: PlatformSupport.inline,
});
final MockProcess mockProcess = MockProcess();
mockProcess.exitCodeCompleter.complete(0);
@ -135,17 +130,11 @@ void main() {
});
test('skip if iOS is implemented in a federated package', () async {
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test'],
],
isIosPlugin: true);
createFakePubspec(pluginDirectory,
iosSupport: PlatformSupport.federated);
createFakePubspec(pluginDirectory.childDirectory('example'),
isFlutter: true);
], platformSupport: <String, PlatformSupport>{
kPlatformIos: PlatformSupport.federated
});
final MockProcess mockProcess = MockProcess();
mockProcess.exitCodeCompleter.complete(0);
@ -158,25 +147,20 @@ void main() {
});
test('running with correct destination, exclude 1 plugin', () async {
final Directory pluginDirectory1 =
createFakePlugin('plugin1', packagesDir,
withExtraFiles: <List<String>>[
createFakePlugin('plugin1', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test'],
],
isIosPlugin: true);
], platformSupport: <String, PlatformSupport>{
kPlatformIos: PlatformSupport.inline
});
final Directory pluginDirectory2 =
createFakePlugin('plugin2', packagesDir,
withExtraFiles: <List<String>>[
createFakePlugin('plugin2', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test'],
],
isIosPlugin: true);
], platformSupport: <String, PlatformSupport>{
kPlatformIos: PlatformSupport.inline
});
final Directory pluginExampleDirectory1 =
pluginDirectory1.childDirectory('example');
createFakePubspec(pluginExampleDirectory1, isFlutter: true);
final Directory pluginExampleDirectory2 =
pluginDirectory2.childDirectory('example');
createFakePubspec(pluginExampleDirectory2, isFlutter: true);
final MockProcess mockProcess = MockProcess();
mockProcess.exitCodeCompleter.complete(0);
@ -223,17 +207,15 @@ void main() {
test('Not specifying --ios-destination assigns an available simulator',
() async {
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test'],
],
isIosPlugin: true);
], platformSupport: <String, PlatformSupport>{
kPlatformIos: PlatformSupport.inline
});
final Directory pluginExampleDirectory =
pluginDirectory.childDirectory('example');
createFakePubspec(pluginExampleDirectory, isFlutter: true);
final MockProcess mockProcess = MockProcess();
mockProcess.exitCodeCompleter.complete(0);
processRunner.processToReturn = mockProcess;
@ -276,16 +258,13 @@ void main() {
group('macOS', () {
test('skip if macOS is not supported', () async {
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
createFakePlugin(
'plugin',
packagesDir,
extraFiles: <List<String>>[
<String>['example', 'test'],
],
isIosPlugin: true,
isMacOsPlugin: false);
createFakePubspec(pluginDirectory.childDirectory('example'),
isFlutter: true);
);
final MockProcess mockProcess = MockProcess();
mockProcess.exitCodeCompleter.complete(0);
@ -298,17 +277,11 @@ void main() {
});
test('skip if macOS is implemented in a federated package', () async {
final Directory pluginDirectory =
createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test'],
],
isMacOsPlugin: true);
createFakePubspec(pluginDirectory,
macosSupport: PlatformSupport.federated);
createFakePubspec(pluginDirectory.childDirectory('example'),
isFlutter: true);
], platformSupport: <String, PlatformSupport>{
kPlatformMacos: PlatformSupport.federated,
});
final MockProcess mockProcess = MockProcess();
mockProcess.exitCodeCompleter.complete(0);
@ -322,15 +295,14 @@ void main() {
test('runs for macOS plugin', () async {
final Directory pluginDirectory1 =
createFakePlugin('plugin', packagesDir,
withExtraFiles: <List<String>>[
createFakePlugin('plugin', packagesDir, extraFiles: <List<String>>[
<String>['example', 'test'],
],
isMacOsPlugin: true);
], platformSupport: <String, PlatformSupport>{
kPlatformMacos: PlatformSupport.inline,
});
final Directory pluginExampleDirectory =
pluginDirectory1.childDirectory('example');
createFakePubspec(pluginExampleDirectory, isFlutter: true);
final MockProcess mockProcess = MockProcess();
mockProcess.exitCodeCompleter.complete(0);