Move dart pub deps
call to <Pub>.deps
and use it accordingly (#158524)
Closes https://github.com/flutter/flutter/issues/158396, closes https://github.com/flutter/flutter/pull/158370.
This commit is contained in:
parent
4de32b8702
commit
2d1a3efc38
@ -2,11 +2,10 @@
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:process/process.dart';
|
||||
|
||||
import 'base/io.dart';
|
||||
import 'base/logger.dart';
|
||||
import 'convert.dart';
|
||||
import 'dart/pub.dart';
|
||||
import 'project.dart';
|
||||
|
||||
/// Returns dependencies of [project] that are _only_ used as `dev_dependency`.
|
||||
///
|
||||
@ -15,54 +14,19 @@ import 'convert.dart';
|
||||
/// `pubspec.yaml` file, and removing packages from that set that appear as
|
||||
/// dependencies (implicitly non-dev) in any non-dev package depended on.
|
||||
Future<Set<String>> computeExclusiveDevDependencies(
|
||||
ProcessManager processes, {
|
||||
Pub pub, {
|
||||
required Logger logger,
|
||||
required String projectPath,
|
||||
required FlutterProject project,
|
||||
}) async {
|
||||
final ProcessResult processResult = await processes.run(
|
||||
<String>['dart', 'pub', 'deps', '--json'],
|
||||
workingDirectory: projectPath,
|
||||
);
|
||||
final Map<String, Object?> jsonResult = await pub.deps(project);
|
||||
|
||||
Never fail([String? reason]) {
|
||||
final Object? stdout = processResult.stdout;
|
||||
if (stdout is String && stdout.isNotEmpty) {
|
||||
logger.printTrace(stdout);
|
||||
}
|
||||
final String stderr = processResult.stderr.toString();
|
||||
logger.printTrace(const JsonEncoder.withIndent(' ').convert(jsonResult));
|
||||
throw StateError(
|
||||
'dart pub deps --json ${reason != null ? 'had unexpected output: $reason' : 'failed'}'
|
||||
'${stderr.isNotEmpty ? '\n$stderr' : ''}',
|
||||
);
|
||||
}
|
||||
|
||||
// Guard against dart pub deps crashing.
|
||||
final Map<String, Object?> jsonResult;
|
||||
if (processResult.exitCode != 0 || processResult.stdout is! String) {
|
||||
fail();
|
||||
}
|
||||
|
||||
// Guard against dart pub deps having explicitly invalid output.
|
||||
final String stdout;
|
||||
try {
|
||||
stdout = processResult.stdout as String;
|
||||
|
||||
// This is an indication that `FakeProcessManager.any` was used, which by
|
||||
// contract emits exit code 0 and no output on either stdout or stderr. To
|
||||
// avoid this code, we'd have to go and make this function injectable into
|
||||
// every callsite and mock-it out manually, which at the time of this
|
||||
// writing was 130+ unit test cases alone.
|
||||
//
|
||||
// So, this is the lesser of two evils.
|
||||
if (stdout.isEmpty && processResult.stderr == '') {
|
||||
return <String>{};
|
||||
}
|
||||
|
||||
jsonResult = json.decode(stdout) as Map<String, Object?>;
|
||||
} on FormatException catch (e) {
|
||||
fail('$e');
|
||||
}
|
||||
|
||||
List<T> asListOrFail<T>(Object? value, String name) {
|
||||
// Allow omitting a list as empty to default to an empty list
|
||||
if (value == null) {
|
||||
|
@ -157,6 +157,13 @@ abstract class Pub {
|
||||
PubOutputMode outputMode = PubOutputMode.all,
|
||||
});
|
||||
|
||||
/// Runs, parses, and returns `pub deps --json` for [project].
|
||||
///
|
||||
/// While it is guaranteed that, if succcessful, that the result are a valid
|
||||
/// JSON object, the exact contents returned are _not_ validated, and are left
|
||||
/// as a responsibility of the caller.
|
||||
Future<Map<String, Object?>> deps(FlutterProject project);
|
||||
|
||||
/// Runs pub in 'batch' mode.
|
||||
///
|
||||
/// forwarding complete lines written by pub to its stdout/stderr streams to
|
||||
@ -373,6 +380,48 @@ class _DefaultPub implements Pub {
|
||||
await _updateVersionAndPackageConfig(project);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<Map<String, Object?>> deps(FlutterProject project) async {
|
||||
final List<String> pubCommand = <String>[
|
||||
..._pubCommand,
|
||||
'deps',
|
||||
'--json',
|
||||
];
|
||||
|
||||
final RunResult runResult = await _processUtils.run(
|
||||
pubCommand,
|
||||
workingDirectory: project.directory.path,
|
||||
);
|
||||
|
||||
Never fail([String? reason]) {
|
||||
final String stdout = runResult.stdout;
|
||||
if (stdout.isNotEmpty) {
|
||||
_logger.printTrace(stdout);
|
||||
}
|
||||
final String stderr = runResult.stderr;
|
||||
throw StateError(
|
||||
'${pubCommand.join(' ')} ${reason != null ? 'had unexpected output: $reason' : 'failed'}'
|
||||
'${stderr.isNotEmpty ? '\n$stderr' : ''}',
|
||||
);
|
||||
}
|
||||
|
||||
// Guard against dart pub deps crashing.
|
||||
if (runResult.exitCode != 0) {
|
||||
fail();
|
||||
}
|
||||
|
||||
// Guard against dart pub deps having explicitly invalid output.
|
||||
try {
|
||||
final Object? result = json.decode(runResult.stdout);
|
||||
if (result is! Map<String, Object?>) {
|
||||
fail('Not a JSON object');
|
||||
}
|
||||
return result;
|
||||
} on FormatException catch (e) {
|
||||
fail('$e');
|
||||
}
|
||||
}
|
||||
|
||||
/// Runs pub with [arguments] and [ProcessStartMode.inheritStdio] mode.
|
||||
///
|
||||
/// Uses [ProcessStartMode.normal] and [Pub._stdio] if [Pub.test] constructor
|
||||
|
@ -21,6 +21,7 @@ import 'compute_dev_dependencies.dart';
|
||||
import 'convert.dart';
|
||||
import 'dart/language_version.dart';
|
||||
import 'dart/package_map.dart';
|
||||
import 'dart/pub.dart';
|
||||
import 'features.dart';
|
||||
import 'globals.dart' as globals;
|
||||
import 'macos/darwin_dependency_management.dart';
|
||||
@ -128,9 +129,9 @@ Future<List<Plugin>> findPlugins(
|
||||
devDependencies = <String>{};
|
||||
} else {
|
||||
devDependencies = await computeExclusiveDevDependencies(
|
||||
globals.processManager,
|
||||
pub,
|
||||
logger: globals.logger,
|
||||
projectPath: project.directory.path,
|
||||
project: project,
|
||||
);
|
||||
}
|
||||
for (final Package package in packageConfig.packages) {
|
||||
|
@ -17,6 +17,7 @@ import 'package:flutter_tools/src/build_system/build_system.dart';
|
||||
import 'package:flutter_tools/src/cache.dart';
|
||||
import 'package:flutter_tools/src/commands/build.dart';
|
||||
import 'package:flutter_tools/src/commands/build_ios.dart';
|
||||
import 'package:flutter_tools/src/dart/pub.dart';
|
||||
import 'package:flutter_tools/src/ios/code_signing.dart';
|
||||
import 'package:flutter_tools/src/ios/mac.dart';
|
||||
import 'package:flutter_tools/src/ios/plist_parser.dart';
|
||||
@ -28,6 +29,7 @@ import 'package:unified_analytics/unified_analytics.dart';
|
||||
import '../../general.shard/ios/xcresult_test_data.dart';
|
||||
import '../../src/common.dart';
|
||||
import '../../src/context.dart';
|
||||
import '../../src/fake_pub_deps.dart';
|
||||
import '../../src/fakes.dart';
|
||||
import '../../src/test_build_system.dart';
|
||||
import '../../src/test_flutter_command_runner.dart';
|
||||
@ -114,13 +116,6 @@ void main() {
|
||||
'xattr', '-r', '-d', 'com.apple.FinderInfo', '/',
|
||||
]);
|
||||
|
||||
const FakeCommand dartPubDepsCommand = FakeCommand(command: <String>[
|
||||
'dart',
|
||||
'pub',
|
||||
'deps',
|
||||
'--json',
|
||||
]);
|
||||
|
||||
FakeCommand setUpRsyncCommand({void Function(List<String> command)? onRun}) {
|
||||
return FakeCommand(
|
||||
command: const <String>[
|
||||
@ -305,9 +300,9 @@ void main() {
|
||||
expect(testLogger.statusText, contains(RegExp(r'✓ Built build/ios/iphoneos/Runner\.app \(\d+\.\d+MB\)')));
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
ProcessManager: () => FakeProcessManager.list(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(onRun: (_) {
|
||||
fileSystem.directory('build/ios/Release-iphoneos/Runner.app').createSync(recursive: true);
|
||||
}),
|
||||
@ -331,7 +326,6 @@ void main() {
|
||||
|
||||
processManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(onRun: (_) {
|
||||
fileSystem.directory('build/ios/Release-iphoneos/Runner.app').createSync(recursive: true);
|
||||
}),
|
||||
@ -345,6 +339,7 @@ void main() {
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => processManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -369,7 +364,6 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => FakeProcessManager.list(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(
|
||||
disablePortPublication: true,
|
||||
onRun: (_) {
|
||||
@ -378,6 +372,7 @@ void main() {
|
||||
),
|
||||
setUpRsyncCommand(),
|
||||
]),
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -402,7 +397,6 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => FakeProcessManager.list(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(
|
||||
onRun: (_) {
|
||||
fileSystem.directory('build/ios/Release-iphoneos/Runner.app').createSync(recursive: true);
|
||||
@ -410,6 +404,7 @@ void main() {
|
||||
),
|
||||
setUpRsyncCommand(),
|
||||
]),
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -427,7 +422,6 @@ void main() {
|
||||
|
||||
processManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(customNaming: true, onRun: (_) {
|
||||
fileSystem.directory('build/ios/Release-iphoneos/Runner.app').createSync(recursive: true);
|
||||
}),
|
||||
@ -446,6 +440,7 @@ void main() {
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => processManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -462,7 +457,6 @@ void main() {
|
||||
);
|
||||
processManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(deviceId: '1234', onRun: (_) {
|
||||
fileSystem.directory('build/ios/Release-iphoneos/Runner.app').createSync(recursive: true);
|
||||
}),
|
||||
@ -477,6 +471,7 @@ void main() {
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => processManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -493,7 +488,6 @@ void main() {
|
||||
);
|
||||
processManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(simulator: true, onRun: (_) {
|
||||
fileSystem.directory('build/ios/Debug-iphonesimulator/Runner.app').createSync(recursive: true);
|
||||
}),
|
||||
@ -507,6 +501,7 @@ void main() {
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => processManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -524,7 +519,6 @@ void main() {
|
||||
createMinimalMockProjectFiles();
|
||||
processManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(verbose: true, onRun: (_) {
|
||||
fileSystem.directory('build/ios/Release-iphoneos/Runner.app').createSync(recursive: true);
|
||||
}),
|
||||
@ -537,6 +531,7 @@ void main() {
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => processManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -553,7 +548,6 @@ void main() {
|
||||
);
|
||||
processManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(onRun: (_) {
|
||||
fileSystem.directory('build/ios/Release-iphoneos/Runner.app').createSync(recursive: true);
|
||||
fileSystem.file('build/flutter_size_01/snapshot.arm64.json')
|
||||
@ -591,6 +585,7 @@ void main() {
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => processManager,
|
||||
Platform: () => macosPlatform,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
FileSystemUtils: () => FileSystemUtils(fileSystem: fileSystem, platform: macosPlatform),
|
||||
Analytics: () => fakeAnalytics,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
@ -640,7 +635,6 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => FakeProcessManager.list(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(onRun: (_) {
|
||||
fileSystem.directory('build/ios/Release-iphoneos/Runner.app')
|
||||
.createSync(recursive: true);
|
||||
@ -656,6 +650,7 @@ void main() {
|
||||
platform: macosPlatform,
|
||||
),
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Analytics: () => fakeAnalytics,
|
||||
});
|
||||
|
||||
@ -695,7 +690,6 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => FakeProcessManager.list(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(onRun: (_) {
|
||||
fileSystem.directory('build/ios/Release-iphoneos/Runner.app')
|
||||
.createSync(recursive: true);
|
||||
@ -722,6 +716,7 @@ void main() {
|
||||
plutilCommand, plutilCommand, plutilCommand,
|
||||
]),
|
||||
),
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Analytics: () => fakeAnalytics,
|
||||
});
|
||||
});
|
||||
@ -739,7 +734,6 @@ void main() {
|
||||
);
|
||||
processManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(exitCode: 1, onRun: (_) {
|
||||
fileSystem.systemTempDirectory.childDirectory(_xcBundleDirectoryPath).createSync();
|
||||
}),
|
||||
@ -759,6 +753,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => processManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -775,7 +770,6 @@ void main() {
|
||||
);
|
||||
processManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(exitCode: 1, onRun: (_) {
|
||||
fileSystem.systemTempDirectory.childDirectory(_xcBundleDirectoryPath).createSync();
|
||||
}, stdout: 'Lots of spew from Xcode',
|
||||
@ -799,6 +793,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => processManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -815,7 +810,6 @@ void main() {
|
||||
);
|
||||
processManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(exitCode: 1, onRun: (_) {
|
||||
fileSystem.systemTempDirectory.childDirectory(_xcBundleDirectoryPath).createSync();
|
||||
}),
|
||||
@ -838,6 +832,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => processManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -854,7 +849,6 @@ void main() {
|
||||
);
|
||||
processManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(exitCode: 1),
|
||||
setUpXCResultCommand(stdout: kSampleResultJsonWithIssues),
|
||||
setUpRsyncCommand(),
|
||||
@ -871,6 +865,7 @@ void main() {
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => processManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -887,7 +882,6 @@ void main() {
|
||||
);
|
||||
processManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(exitCode: 1, onRun: (_) {
|
||||
fileSystem.systemTempDirectory.childDirectory(_xcBundleDirectoryPath).createSync();
|
||||
}),
|
||||
@ -911,6 +905,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => processManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -927,7 +922,6 @@ void main() {
|
||||
);
|
||||
processManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(
|
||||
exitCode: 1,
|
||||
onRun: (_) {
|
||||
@ -951,6 +945,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => processManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -967,7 +962,6 @@ void main() {
|
||||
);
|
||||
processManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(exitCode: 1, onRun: (_) {
|
||||
fileSystem.systemTempDirectory.childDirectory(_xcBundleDirectoryPath).createSync();
|
||||
}),
|
||||
@ -987,6 +981,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => processManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -1003,7 +998,6 @@ void main() {
|
||||
);
|
||||
processManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
// Intentionally fail the first xcodebuild command with concurrent run failure message.
|
||||
setUpFakeXcodeBuildHandler(
|
||||
exitCode: 1,
|
||||
@ -1035,6 +1029,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => processManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -1051,7 +1046,6 @@ void main() {
|
||||
);
|
||||
processManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(
|
||||
exitCode: 1,
|
||||
stdout: '''
|
||||
@ -1077,6 +1071,7 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => processManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -1093,7 +1088,6 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig
|
||||
);
|
||||
processManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(
|
||||
exitCode: 1,
|
||||
onRun: (_) {
|
||||
@ -1116,6 +1110,7 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => processManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(developmentTeam: null),
|
||||
});
|
||||
@ -1143,7 +1138,6 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => FakeProcessManager.list(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(
|
||||
exitCode: 1,
|
||||
stdout: '''
|
||||
@ -1156,6 +1150,7 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig
|
||||
setUpXCResultCommand(stdout: kSampleResultJsonNoIssues),
|
||||
setUpRsyncCommand(),
|
||||
]),
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
EnvironmentType: () => EnvironmentType.physical,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
@ -1173,7 +1168,6 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig
|
||||
);
|
||||
processManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(
|
||||
exitCode: 1,
|
||||
onRun: (_) {
|
||||
@ -1195,6 +1189,7 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => processManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(developmentTeam: null),
|
||||
});
|
||||
@ -1211,7 +1206,6 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig
|
||||
);
|
||||
processManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(
|
||||
exitCode: 1,
|
||||
onRun: (_) {
|
||||
@ -1235,6 +1229,7 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => processManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(developmentTeam: null),
|
||||
});
|
||||
@ -1251,7 +1246,6 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig
|
||||
);
|
||||
processManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(
|
||||
exitCode: 1,
|
||||
onRun: (_) {
|
||||
@ -1275,6 +1269,7 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => processManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(developmentTeam: null),
|
||||
});
|
||||
@ -1293,7 +1288,6 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig
|
||||
);
|
||||
processManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(
|
||||
simulator: true,
|
||||
exitCode: 1,
|
||||
@ -1317,6 +1311,7 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => processManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -1333,7 +1328,6 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig
|
||||
);
|
||||
processManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(
|
||||
simulator: true,
|
||||
exitCode: 1,
|
||||
@ -1358,6 +1352,7 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => processManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -1375,7 +1370,6 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig
|
||||
|
||||
processManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(
|
||||
simulator: true,
|
||||
exitCode: 1,
|
||||
@ -1402,6 +1396,7 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => processManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -1418,7 +1413,6 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig
|
||||
);
|
||||
processManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(
|
||||
simulator: true,
|
||||
exitCode: 1,
|
||||
@ -1439,6 +1433,7 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => processManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
|
@ -16,6 +16,7 @@ import 'package:flutter_tools/src/build_system/build_system.dart';
|
||||
import 'package:flutter_tools/src/cache.dart';
|
||||
import 'package:flutter_tools/src/commands/build.dart';
|
||||
import 'package:flutter_tools/src/commands/build_ios.dart';
|
||||
import 'package:flutter_tools/src/dart/pub.dart';
|
||||
import 'package:flutter_tools/src/ios/plist_parser.dart';
|
||||
import 'package:flutter_tools/src/ios/xcodeproj.dart';
|
||||
import 'package:test/fake.dart';
|
||||
@ -25,6 +26,7 @@ import '../../general.shard/ios/xcresult_test_data.dart';
|
||||
import '../../src/common.dart';
|
||||
import '../../src/context.dart';
|
||||
import '../../src/fake_process_manager.dart';
|
||||
import '../../src/fake_pub_deps.dart';
|
||||
import '../../src/fakes.dart';
|
||||
import '../../src/test_build_system.dart';
|
||||
import '../../src/test_flutter_command_runner.dart';
|
||||
@ -140,13 +142,6 @@ void main() {
|
||||
'xattr', '-r', '-d', 'com.apple.FinderInfo', '/',
|
||||
]);
|
||||
|
||||
const FakeCommand dartPubDepsCommand = FakeCommand(command: <String>[
|
||||
'dart',
|
||||
'pub',
|
||||
'deps',
|
||||
'--json',
|
||||
]);
|
||||
|
||||
FakeCommand setUpXCResultCommand({String stdout = '', void Function(List<String> command)? onRun}) {
|
||||
return FakeCommand(
|
||||
command: const <String>[
|
||||
@ -405,7 +400,6 @@ void main() {
|
||||
);
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(),
|
||||
exportArchiveCommand(exportOptionsPlist: _exportOptionsPlist),
|
||||
]);
|
||||
@ -420,6 +414,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -437,7 +432,6 @@ void main() {
|
||||
);
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(),
|
||||
exportArchiveCommand(exportOptionsPlist: _exportOptionsPlist, cachePlist: cachedExportOptionsPlist),
|
||||
]);
|
||||
@ -467,6 +461,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(version: Version(15, 4, null)),
|
||||
});
|
||||
@ -484,7 +479,6 @@ void main() {
|
||||
);
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(),
|
||||
exportArchiveCommand(exportOptionsPlist: _exportOptionsPlist, cachePlist: cachedExportOptionsPlist),
|
||||
]);
|
||||
@ -514,6 +508,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(version: Version(15, 4, null)),
|
||||
});
|
||||
@ -531,7 +526,6 @@ void main() {
|
||||
);
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(),
|
||||
exportArchiveCommand(exportOptionsPlist: _exportOptionsPlist, cachePlist: cachedExportOptionsPlist),
|
||||
]);
|
||||
@ -561,6 +555,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(version: Version(15, 4, null)),
|
||||
});
|
||||
@ -577,7 +572,6 @@ void main() {
|
||||
);
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(),
|
||||
exportArchiveCommand(exportOptionsPlist: _exportOptionsPlist),
|
||||
]);
|
||||
@ -590,6 +584,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(version: Version(15, 3, null)),
|
||||
});
|
||||
@ -607,7 +602,6 @@ void main() {
|
||||
);
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(),
|
||||
exportArchiveCommand(exportOptionsPlist: _exportOptionsPlist, cachePlist: cachedExportOptionsPlist),
|
||||
]);
|
||||
@ -637,6 +631,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(version: Version(15, 4, null)),
|
||||
});
|
||||
@ -653,7 +648,6 @@ void main() {
|
||||
);
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(),
|
||||
exportArchiveCommand(exportOptionsPlist: _exportOptionsPlist),
|
||||
]);
|
||||
@ -666,6 +660,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(version: Version(15, 3, null)),
|
||||
});
|
||||
@ -682,7 +677,6 @@ void main() {
|
||||
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(),
|
||||
exportArchiveCommand(exportOptionsPlist: exportOptions.path),
|
||||
]);
|
||||
@ -705,6 +699,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
PlistParser: () => plistUtils,
|
||||
@ -722,7 +717,6 @@ void main() {
|
||||
);
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(),
|
||||
const FakeCommand(
|
||||
command: <String>[
|
||||
@ -761,6 +755,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -778,7 +773,6 @@ void main() {
|
||||
);
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(),
|
||||
exportArchiveCommand(
|
||||
exportOptionsPlist: _exportOptionsPlist,
|
||||
@ -796,6 +790,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -813,7 +808,6 @@ void main() {
|
||||
);
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(),
|
||||
exportArchiveCommand(exportOptionsPlist: _exportOptionsPlist, cachePlist: cachedExportOptionsPlist),
|
||||
]);
|
||||
@ -849,6 +843,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -866,7 +861,6 @@ void main() {
|
||||
);
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(),
|
||||
exportArchiveCommand(exportOptionsPlist: _exportOptionsPlist, cachePlist: cachedExportOptionsPlist),
|
||||
]);
|
||||
@ -902,6 +896,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -919,7 +914,6 @@ void main() {
|
||||
);
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(),
|
||||
exportArchiveCommand(exportOptionsPlist: _exportOptionsPlist, cachePlist: cachedExportOptionsPlist),
|
||||
]);
|
||||
@ -955,6 +949,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -971,7 +966,6 @@ void main() {
|
||||
);
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(verbose: true),
|
||||
exportArchiveCommand(exportOptionsPlist: _exportOptionsPlist),
|
||||
]);
|
||||
@ -985,6 +979,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -1001,7 +996,6 @@ void main() {
|
||||
);
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(),
|
||||
exportArchiveCommand(exportOptionsPlist: _exportOptionsPlist),
|
||||
]);
|
||||
@ -1014,6 +1008,7 @@ void main() {
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -1030,7 +1025,6 @@ void main() {
|
||||
);
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
const FakeCommand(
|
||||
command: <String>[
|
||||
'xcrun',
|
||||
@ -1067,6 +1061,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -1083,7 +1078,6 @@ void main() {
|
||||
);
|
||||
createMinimalMockProjectFiles();
|
||||
|
||||
fakeProcessManager.addCommand(dartPubDepsCommand);
|
||||
fakeProcessManager.addCommand(setUpFakeXcodeBuildHandler());
|
||||
await expectToolExitLater(
|
||||
createTestCommandRunner(command).run(
|
||||
@ -1094,6 +1088,7 @@ void main() {
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -1115,7 +1110,6 @@ void main() {
|
||||
..writeAsBytesSync(List<int>.generate(10000, (int index) => 0));
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(onRun: (_) {
|
||||
fileSystem.file('build/flutter_size_01/snapshot.arm64.json')
|
||||
..createSync(recursive: true)
|
||||
@ -1149,6 +1143,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
FileSystemUtils: () => FileSystemUtils(fileSystem: fileSystem, platform: macosPlatform),
|
||||
Analytics: () => fakeAnalytics,
|
||||
@ -1171,7 +1166,6 @@ void main() {
|
||||
);
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(),
|
||||
exportArchiveCommand(),
|
||||
]);
|
||||
@ -1193,6 +1187,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -1209,7 +1204,6 @@ void main() {
|
||||
);
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(exitCode: 1, onRun: (_) {
|
||||
fileSystem.systemTempDirectory.childDirectory(_xcBundleFilePath).createSync();
|
||||
}),
|
||||
@ -1228,6 +1222,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -1244,7 +1239,6 @@ void main() {
|
||||
);
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(exitCode: 1, onRun: (_) {
|
||||
fileSystem.systemTempDirectory.childDirectory(_xcBundleFilePath).createSync();
|
||||
}),
|
||||
@ -1264,6 +1258,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -1280,7 +1275,6 @@ void main() {
|
||||
);
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(exitCode: 1, onRun: (_) {
|
||||
fileSystem.systemTempDirectory.childDirectory(_xcBundleFilePath).createSync();
|
||||
}),
|
||||
@ -1302,6 +1296,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -1318,7 +1313,6 @@ void main() {
|
||||
);
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(exitCode: 1),
|
||||
]);
|
||||
createMinimalMockProjectFiles();
|
||||
@ -1334,6 +1328,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -1351,7 +1346,6 @@ void main() {
|
||||
);
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(exitCode: 1, onRun: (_) {
|
||||
fileSystem.systemTempDirectory.childDirectory(_xcBundleFilePath).createSync();
|
||||
}),
|
||||
@ -1374,6 +1368,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -1384,7 +1379,6 @@ void main() {
|
||||
const String plistPath = 'build/ios/archive/Runner.xcarchive/Products/Applications/Runner.app/Info.plist';
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(onRun: (_) {
|
||||
fileSystem.file(plistPath).createSync(recursive: true);
|
||||
}),
|
||||
@ -1428,6 +1422,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
PlistParser: () => plistUtils,
|
||||
@ -1438,7 +1433,6 @@ void main() {
|
||||
const String plistPath = 'build/ios/archive/Runner.xcarchive/Products/Applications/Runner.app/Info.plist';
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(onRun: (_) {
|
||||
fileSystem.file(plistPath).createSync(recursive: true);
|
||||
}),
|
||||
@ -1488,6 +1482,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
PlistParser: () => plistUtils,
|
||||
@ -1498,7 +1493,6 @@ void main() {
|
||||
const String plistPath = 'build/ios/archive/Runner.xcarchive/Products/Applications/Runner.app/Info.plist';
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(onRun: (_) {
|
||||
fileSystem.file(plistPath).createSync(recursive: true);
|
||||
}),
|
||||
@ -1547,6 +1541,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
PlistParser: () => plistUtils,
|
||||
@ -1558,7 +1553,6 @@ void main() {
|
||||
const String plistPath = 'build/ios/archive/Runner.xcarchive/Products/Applications/Runner.app/Info.plist';
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(onRun: (_) {
|
||||
fileSystem.file(plistPath).createSync(recursive: true);
|
||||
}),
|
||||
@ -1592,6 +1586,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
PlistParser: () => plistUtils,
|
||||
@ -1602,7 +1597,6 @@ void main() {
|
||||
const String plistPath = 'build/ios/archive/Runner.xcarchive/Products/Applications/Runner.app/Info.plist';
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(onRun: (_) {
|
||||
fileSystem.file(plistPath).createSync(recursive: true);
|
||||
}),
|
||||
@ -1636,6 +1630,7 @@ void main() {
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Platform: () => macosPlatform,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
PlistParser: () => plistUtils,
|
||||
});
|
||||
@ -1649,7 +1644,6 @@ void main() {
|
||||
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(onRun: (_) {
|
||||
fileSystem.file(templateIconContentsJsonPath)
|
||||
..createSync(recursive: true)
|
||||
@ -1720,6 +1714,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -1732,7 +1727,6 @@ void main() {
|
||||
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(onRun: (_) {
|
||||
fileSystem.file(templateIconContentsJsonPath)
|
||||
..createSync(recursive: true)
|
||||
@ -1803,6 +1797,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -1813,7 +1808,6 @@ void main() {
|
||||
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(onRun: (_) {
|
||||
fileSystem.file(projectIconContentsJsonPath)
|
||||
..createSync(recursive: true)
|
||||
@ -1866,6 +1860,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -1876,7 +1871,6 @@ void main() {
|
||||
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(onRun: (_) {
|
||||
fileSystem.file(projectIconContentsJsonPath)
|
||||
..createSync(recursive: true)
|
||||
@ -1930,6 +1924,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -1940,7 +1935,6 @@ void main() {
|
||||
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(onRun: (_) {
|
||||
fileSystem.file(projectIconContentsJsonPath)
|
||||
..createSync(recursive: true)
|
||||
@ -1993,6 +1987,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -2003,7 +1998,6 @@ void main() {
|
||||
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(onRun: (_) {
|
||||
// Uses unknown format version 123.
|
||||
fileSystem.file(projectIconContentsJsonPath)
|
||||
@ -2059,6 +2053,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -2076,7 +2071,6 @@ void main() {
|
||||
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(onRun: (_) {
|
||||
// The following json contains examples of:
|
||||
// - invalid size
|
||||
@ -2170,6 +2164,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -2182,7 +2177,6 @@ void main() {
|
||||
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(onRun: (_) {
|
||||
fileSystem.file(templateLaunchImageContentsJsonPath)
|
||||
..createSync(recursive: true)
|
||||
@ -2251,6 +2245,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
@ -2264,7 +2259,6 @@ void main() {
|
||||
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
xattrCommand,
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(onRun: (_) {
|
||||
fileSystem.file(templateLaunchImageContentsJsonPath)
|
||||
..createSync(recursive: true)
|
||||
@ -2333,6 +2327,7 @@ void main() {
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithBuildSettings(),
|
||||
});
|
||||
|
@ -17,6 +17,7 @@ import 'package:flutter_tools/src/build_system/build_system.dart';
|
||||
import 'package:flutter_tools/src/cache.dart';
|
||||
import 'package:flutter_tools/src/commands/build.dart';
|
||||
import 'package:flutter_tools/src/commands/build_macos.dart';
|
||||
import 'package:flutter_tools/src/dart/pub.dart';
|
||||
import 'package:flutter_tools/src/features.dart';
|
||||
import 'package:flutter_tools/src/ios/xcodeproj.dart';
|
||||
import 'package:flutter_tools/src/project.dart';
|
||||
@ -25,6 +26,7 @@ import 'package:unified_analytics/unified_analytics.dart';
|
||||
import '../../src/common.dart';
|
||||
import '../../src/context.dart';
|
||||
import '../../src/fake_process_manager.dart';
|
||||
import '../../src/fake_pub_deps.dart';
|
||||
import '../../src/fakes.dart';
|
||||
import '../../src/test_build_system.dart';
|
||||
import '../../src/test_flutter_command_runner.dart';
|
||||
@ -105,13 +107,6 @@ void main() {
|
||||
createCoreMockProjectFiles();
|
||||
}
|
||||
|
||||
const FakeCommand dartPubDepsCommand = FakeCommand(command: <String>[
|
||||
'dart',
|
||||
'pub',
|
||||
'deps',
|
||||
'--json',
|
||||
]);
|
||||
|
||||
// Creates a FakeCommand for the xcodebuild call to build the app
|
||||
// in the given configuration.
|
||||
FakeCommand setUpFakeXcodeBuildHandler(
|
||||
@ -225,6 +220,7 @@ STDERR STUFF
|
||||
Platform: () => macosPlatform,
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
FeatureFlags: () => TestFeatureFlags(isMacOSEnabled: true),
|
||||
Analytics: () => fakeAnalytics,
|
||||
});
|
||||
@ -307,9 +303,9 @@ STDERR STUFF
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => FakeProcessManager.list(<FakeCommand>[
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler('Debug'),
|
||||
]),
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
Platform: () => macosPlatform,
|
||||
FeatureFlags: () => TestFeatureFlags(isMacOSEnabled: true),
|
||||
});
|
||||
@ -333,10 +329,10 @@ STDERR STUFF
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => FakeProcessManager.list(<FakeCommand>[
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler('Release'),
|
||||
]),
|
||||
Platform: () => macosPlatform,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
FeatureFlags: () => TestFeatureFlags(isMacOSEnabled: true),
|
||||
});
|
||||
|
||||
@ -358,10 +354,10 @@ STDERR STUFF
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => FakeProcessManager.list(<FakeCommand>[
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler('Debug'),
|
||||
]),
|
||||
Platform: () => macosPlatform,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
FeatureFlags: () => TestFeatureFlags(isMacOSEnabled: true),
|
||||
});
|
||||
|
||||
@ -383,10 +379,10 @@ STDERR STUFF
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => FakeProcessManager.list(<FakeCommand>[
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler('Debug', verbose: true),
|
||||
]),
|
||||
Platform: () => macosPlatform,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
FeatureFlags: () => TestFeatureFlags(isMacOSEnabled: true),
|
||||
});
|
||||
|
||||
@ -409,10 +405,10 @@ STDERR STUFF
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => FakeProcessManager.list(<FakeCommand>[
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler('Profile'),
|
||||
]),
|
||||
Platform: () => macosPlatform,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreterWithProfile(),
|
||||
FeatureFlags: () => TestFeatureFlags(isMacOSEnabled: true),
|
||||
});
|
||||
@ -435,10 +431,10 @@ STDERR STUFF
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => FakeProcessManager.list(<FakeCommand>[
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler('Release'),
|
||||
]),
|
||||
Platform: () => macosPlatform,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
FeatureFlags: () => TestFeatureFlags(isMacOSEnabled: true),
|
||||
});
|
||||
|
||||
@ -499,10 +495,10 @@ STDERR STUFF
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => FakeProcessManager.list(<FakeCommand>[
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler('Release'),
|
||||
]),
|
||||
Platform: () => macosPlatform,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
FeatureFlags: () => TestFeatureFlags(isMacOSEnabled: true),
|
||||
Artifacts: () => Artifacts.test(),
|
||||
});
|
||||
@ -518,7 +514,6 @@ STDERR STUFF
|
||||
createMinimalMockProjectFiles();
|
||||
|
||||
fakeProcessManager.addCommands(<FakeCommand>[
|
||||
dartPubDepsCommand,
|
||||
FakeCommand(
|
||||
command: <String>[
|
||||
'/usr/bin/env',
|
||||
@ -557,6 +552,7 @@ STDERR STUFF
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => fakeProcessManager,
|
||||
Platform: () => macosPlatformCustomEnv,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
FeatureFlags: () => TestFeatureFlags(isMacOSEnabled: true),
|
||||
XcodeProjectInterpreter: () => xcodeProjectInterpreter,
|
||||
});
|
||||
@ -592,10 +588,10 @@ STDERR STUFF
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => FakeProcessManager.list(<FakeCommand>[
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler('Debug'),
|
||||
]),
|
||||
Platform: () => macosPlatform,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
FeatureFlags: () => TestFeatureFlags(isMacOSEnabled: true),
|
||||
});
|
||||
|
||||
@ -664,11 +660,11 @@ STDERR STUFF
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => FakeProcessManager.list(<FakeCommand>[
|
||||
dartPubDepsCommand,
|
||||
// we never generate code size snapshot here
|
||||
setUpFakeXcodeBuildHandler('Release'),
|
||||
]),
|
||||
Platform: () => macosPlatform,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
FeatureFlags: () => TestFeatureFlags(isMacOSEnabled: true),
|
||||
FileSystemUtils: () => FileSystemUtils(fileSystem: fileSystem, platform: macosPlatform),
|
||||
Analytics: () => fakeAnalytics,
|
||||
@ -699,7 +695,6 @@ STDERR STUFF
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => FakeProcessManager.list(<FakeCommand>[
|
||||
dartPubDepsCommand,
|
||||
// These are generated by gen_snapshot because flutter assemble passes
|
||||
// extra flags specifying this output path
|
||||
setUpFakeXcodeBuildHandler('Release', onRun: (_) {
|
||||
@ -720,6 +715,7 @@ STDERR STUFF
|
||||
}),
|
||||
]),
|
||||
Platform: () => macosPlatform,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
FeatureFlags: () => TestFeatureFlags(isMacOSEnabled: true),
|
||||
FileSystemUtils: () => FileSystemUtils(fileSystem: fileSystem, platform: macosPlatform),
|
||||
Analytics: () => fakeAnalytics,
|
||||
@ -771,7 +767,6 @@ STDERR STUFF
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => FakeProcessManager.list(<FakeCommand>[
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(
|
||||
'Debug',
|
||||
additionalCommandArguements: <String>[
|
||||
@ -787,6 +782,7 @@ STDERR STUFF
|
||||
'LUCI_CI': 'True'
|
||||
}
|
||||
),
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
FeatureFlags: () => TestFeatureFlags(isMacOSEnabled: true),
|
||||
});
|
||||
|
||||
@ -840,7 +836,6 @@ STDERR STUFF
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fileSystem,
|
||||
ProcessManager: () => FakeProcessManager.list(<FakeCommand>[
|
||||
dartPubDepsCommand,
|
||||
setUpFakeXcodeBuildHandler(
|
||||
'Release',
|
||||
additionalCommandArguements: <String>[
|
||||
@ -856,6 +851,7 @@ STDERR STUFF
|
||||
'LUCI_CI': 'True'
|
||||
}
|
||||
),
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
FeatureFlags: () => TestFeatureFlags(isMacOSEnabled: true),
|
||||
});
|
||||
}
|
||||
|
@ -2,11 +2,21 @@
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:file/file.dart';
|
||||
import 'package:file/memory.dart';
|
||||
import 'package:flutter_tools/src/base/logger.dart';
|
||||
import 'package:flutter_tools/src/base/platform.dart';
|
||||
import 'package:flutter_tools/src/cache.dart';
|
||||
import 'package:flutter_tools/src/compute_dev_dependencies.dart';
|
||||
import 'package:flutter_tools/src/dart/pub.dart';
|
||||
import 'package:flutter_tools/src/project.dart';
|
||||
import 'package:flutter_tools/src/reporting/reporting.dart';
|
||||
|
||||
import '../src/common.dart';
|
||||
import '../src/fake_process_manager.dart';
|
||||
import '../src/fakes.dart';
|
||||
|
||||
const String _dartBin = 'bin/cache/dart-sdk/bin/dart';
|
||||
|
||||
// For all of these examples, imagine the following package structure:
|
||||
//
|
||||
@ -20,12 +30,29 @@ import '../src/fake_process_manager.dart';
|
||||
// /package_c
|
||||
// pubspec.yaml
|
||||
void main() {
|
||||
late FileSystem fileSystem;
|
||||
late FlutterProject project;
|
||||
late BufferLogger logger;
|
||||
|
||||
setUp(() {
|
||||
Cache.flutterRoot = '';
|
||||
fileSystem = MemoryFileSystem.test();
|
||||
project = FlutterProject.fromDirectoryTest(fileSystem.currentDirectory);
|
||||
logger = BufferLogger.test();
|
||||
});
|
||||
|
||||
Pub pub(ProcessManager processManager) {
|
||||
return Pub.test(
|
||||
fileSystem: fileSystem,
|
||||
logger: logger,
|
||||
processManager: processManager,
|
||||
usage: TestUsage(),
|
||||
platform: FakePlatform(),
|
||||
botDetector: const FakeBotDetector(false),
|
||||
stdio: FakeStdio(),
|
||||
);
|
||||
}
|
||||
|
||||
test('no dev dependencies at all', () async {
|
||||
// Simulates the following:
|
||||
//
|
||||
@ -38,7 +65,8 @@ void main() {
|
||||
// name: package_a
|
||||
// dependencies:
|
||||
// package_b:
|
||||
final ProcessManager processes = _dartPubDepsReturns('''
|
||||
final ProcessManager processes = _dartPubDepsReturns(
|
||||
'''
|
||||
{
|
||||
"root": "my_app",
|
||||
"packages": [
|
||||
@ -71,11 +99,13 @@ void main() {
|
||||
"directDependencies": []
|
||||
}
|
||||
]
|
||||
}''');
|
||||
}''',
|
||||
project: project,
|
||||
);
|
||||
|
||||
final Set<String> dependencies = await computeExclusiveDevDependencies(
|
||||
processes,
|
||||
projectPath: _fakeProjectPath,
|
||||
pub(processes),
|
||||
project: project,
|
||||
logger: logger,
|
||||
);
|
||||
|
||||
@ -99,7 +129,8 @@ void main() {
|
||||
//
|
||||
// # /package_a/pubspec.yaml
|
||||
// name: package_a
|
||||
final ProcessManager processes = _dartPubDepsReturns('''
|
||||
final ProcessManager processes = _dartPubDepsReturns(
|
||||
'''
|
||||
{
|
||||
"root": "my_app",
|
||||
"packages": [
|
||||
@ -130,11 +161,13 @@ void main() {
|
||||
"directDependencies": []
|
||||
}
|
||||
]
|
||||
}''');
|
||||
}''',
|
||||
project: project,
|
||||
);
|
||||
|
||||
final Set<String> dependencies = await computeExclusiveDevDependencies(
|
||||
processes,
|
||||
projectPath: _fakeProjectPath,
|
||||
pub(processes),
|
||||
project: project,
|
||||
logger: logger,
|
||||
);
|
||||
|
||||
@ -160,7 +193,8 @@ void main() {
|
||||
// name: package_a
|
||||
// dependencies:
|
||||
// package_b:
|
||||
final ProcessManager processes = _dartPubDepsReturns('''
|
||||
final ProcessManager processes = _dartPubDepsReturns(
|
||||
'''
|
||||
{
|
||||
"root": "my_app",
|
||||
"packages": [
|
||||
@ -195,11 +229,13 @@ void main() {
|
||||
"directDependencies": []
|
||||
}
|
||||
]
|
||||
}''');
|
||||
}''',
|
||||
project: project,
|
||||
);
|
||||
|
||||
final Set<String> dependencies = await computeExclusiveDevDependencies(
|
||||
processes,
|
||||
projectPath: _fakeProjectPath,
|
||||
pub(processes),
|
||||
project: project,
|
||||
logger: logger,
|
||||
);
|
||||
|
||||
@ -232,7 +268,8 @@ void main() {
|
||||
//
|
||||
// # /package_c/pubspec.yaml
|
||||
// name: package_c
|
||||
final ProcessManager processes = _dartPubDepsReturns('''
|
||||
final ProcessManager processes = _dartPubDepsReturns(
|
||||
'''
|
||||
{
|
||||
"root": "my_app",
|
||||
"packages": [
|
||||
@ -278,11 +315,13 @@ void main() {
|
||||
"directDependencies": []
|
||||
}
|
||||
]
|
||||
}''');
|
||||
}''',
|
||||
project: project,
|
||||
);
|
||||
|
||||
final Set<String> dependencies = await computeExclusiveDevDependencies(
|
||||
processes,
|
||||
projectPath: _fakeProjectPath,
|
||||
pub(processes),
|
||||
project: project,
|
||||
logger: logger,
|
||||
);
|
||||
|
||||
@ -293,7 +332,7 @@ void main() {
|
||||
);
|
||||
});
|
||||
|
||||
test('omitted devDependencies in app package', () async {
|
||||
test('omitted devDependencies in app package', () async {
|
||||
// Simulates the following:
|
||||
//
|
||||
// # /my_app/pubspec.yaml
|
||||
@ -324,11 +363,13 @@ void main() {
|
||||
"directDependencies": []
|
||||
}
|
||||
]
|
||||
}''');
|
||||
}''',
|
||||
project: project,
|
||||
);
|
||||
|
||||
final Set<String> dependencies = await computeExclusiveDevDependencies(
|
||||
processes,
|
||||
projectPath: _fakeProjectPath,
|
||||
pub(processes),
|
||||
project: project,
|
||||
logger: logger,
|
||||
);
|
||||
|
||||
@ -339,55 +380,9 @@ void main() {
|
||||
);
|
||||
});
|
||||
|
||||
test('throws and logs on non-zero exit code', () async {
|
||||
final ProcessManager processes = _dartPubDepsFails(
|
||||
'Bad thing',
|
||||
exitCode: 1,
|
||||
);
|
||||
|
||||
await expectLater(
|
||||
computeExclusiveDevDependencies(
|
||||
processes,
|
||||
projectPath: _fakeProjectPath,
|
||||
logger: logger,
|
||||
),
|
||||
throwsA(
|
||||
isA<StateError>().having(
|
||||
(StateError e) => e.message,
|
||||
'message',
|
||||
contains('dart pub deps --json failed'),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
expect(logger.traceText, isEmpty);
|
||||
});
|
||||
|
||||
test('throws and logs on unexpected output type', () async {
|
||||
final ProcessManager processes = _dartPubDepsReturns(
|
||||
'Not JSON haha!',
|
||||
);
|
||||
|
||||
await expectLater(
|
||||
computeExclusiveDevDependencies(
|
||||
processes,
|
||||
projectPath: _fakeProjectPath,
|
||||
logger: logger,
|
||||
),
|
||||
throwsA(
|
||||
isA<StateError>().having(
|
||||
(StateError e) => e.message,
|
||||
'message',
|
||||
contains('dart pub deps --json had unexpected output'),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
expect(logger.traceText, contains('Not JSON haha'));
|
||||
});
|
||||
|
||||
test('throws and logs on invalid JSON', () async {
|
||||
final ProcessManager processes = _dartPubDepsReturns('''
|
||||
final ProcessManager processes = _dartPubDepsReturns(
|
||||
'''
|
||||
{
|
||||
"root": "my_app",
|
||||
"packages": [
|
||||
@ -420,12 +415,14 @@ void main() {
|
||||
"directDependencies": []
|
||||
}
|
||||
]
|
||||
}''');
|
||||
}''',
|
||||
project: project,
|
||||
);
|
||||
|
||||
await expectLater(
|
||||
computeExclusiveDevDependencies(
|
||||
processes,
|
||||
projectPath: _fakeProjectPath,
|
||||
pub(processes),
|
||||
project: project,
|
||||
logger: logger,
|
||||
),
|
||||
throwsA(
|
||||
@ -445,28 +442,21 @@ void main() {
|
||||
});
|
||||
}
|
||||
|
||||
const String _fakeProjectPath = '/path/to/project';
|
||||
|
||||
ProcessManager _dartPubDepsReturns(String dartPubDepsOutput) {
|
||||
return FakeProcessManager.list(<FakeCommand>[
|
||||
FakeCommand(
|
||||
command: const <String>['dart', 'pub', 'deps', '--json'],
|
||||
stdout: dartPubDepsOutput,
|
||||
workingDirectory: _fakeProjectPath,
|
||||
),
|
||||
]);
|
||||
}
|
||||
|
||||
ProcessManager _dartPubDepsFails(
|
||||
String dartPubDepsError, {
|
||||
required int exitCode,
|
||||
ProcessManager _dartPubDepsReturns(
|
||||
String dartPubDepsOutput, {
|
||||
required FlutterProject project,
|
||||
}) {
|
||||
return FakeProcessManager.list(<FakeCommand>[
|
||||
FakeCommand(
|
||||
command: const <String>['dart', 'pub', 'deps', '--json'],
|
||||
exitCode: exitCode,
|
||||
stderr: dartPubDepsError,
|
||||
workingDirectory: _fakeProjectPath,
|
||||
command: const <String>[
|
||||
_dartBin,
|
||||
'pub',
|
||||
'--suppress-analytics',
|
||||
'deps',
|
||||
'--json',
|
||||
],
|
||||
stdout: dartPubDepsOutput,
|
||||
workingDirectory: project.directory.path,
|
||||
),
|
||||
]);
|
||||
}
|
||||
|
@ -0,0 +1,192 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:file/memory.dart';
|
||||
import 'package:flutter_tools/src/base/logger.dart';
|
||||
import 'package:flutter_tools/src/base/platform.dart';
|
||||
import 'package:flutter_tools/src/cache.dart';
|
||||
import 'package:flutter_tools/src/dart/pub.dart';
|
||||
import 'package:flutter_tools/src/project.dart';
|
||||
import 'package:flutter_tools/src/reporting/reporting.dart';
|
||||
|
||||
import '../../src/common.dart';
|
||||
import '../../src/fake_process_manager.dart';
|
||||
import '../../src/fakes.dart';
|
||||
|
||||
const String _dartBin = 'bin/cache/dart-sdk/bin/dart';
|
||||
|
||||
void main() {
|
||||
setUpAll(() {
|
||||
Cache.flutterRoot = '';
|
||||
});
|
||||
|
||||
testWithoutContext('throws a tool exit if pub cannot be run', () async {
|
||||
final FakeProcessManager processManager = FakeProcessManager.empty();
|
||||
final BufferLogger logger = BufferLogger.test();
|
||||
final MemoryFileSystem fileSystem = MemoryFileSystem.test();
|
||||
|
||||
processManager.excludedExecutables.add(_dartBin);
|
||||
fileSystem.file('pubspec.yaml').createSync();
|
||||
|
||||
final Pub pub = Pub.test(
|
||||
fileSystem: fileSystem,
|
||||
logger: logger,
|
||||
processManager: processManager,
|
||||
usage: TestUsage(),
|
||||
platform: FakePlatform(),
|
||||
botDetector: const FakeBotDetector(false),
|
||||
stdio: FakeStdio(),
|
||||
);
|
||||
|
||||
await expectLater(
|
||||
() => pub.deps(
|
||||
FlutterProject.fromDirectoryTest(fileSystem.currentDirectory),
|
||||
),
|
||||
throwsToolExit(
|
||||
message: 'Your Flutter SDK download may be corrupt',
|
||||
),
|
||||
);
|
||||
});
|
||||
|
||||
testWithoutContext('fails on non-zero exit code', () async {
|
||||
final BufferLogger logger = BufferLogger.test();
|
||||
final MemoryFileSystem fileSystem = MemoryFileSystem.test();
|
||||
final ProcessManager processManager = _dartPubDepsFails(
|
||||
'Bad thing',
|
||||
project: FlutterProject.fromDirectoryTest(fileSystem.currentDirectory),
|
||||
exitCode: 1,
|
||||
);
|
||||
|
||||
final Pub pub = Pub.test(
|
||||
fileSystem: fileSystem,
|
||||
logger: logger,
|
||||
processManager: processManager,
|
||||
usage: TestUsage(),
|
||||
platform: FakePlatform(),
|
||||
botDetector: const FakeBotDetector(false),
|
||||
stdio: FakeStdio(),
|
||||
);
|
||||
|
||||
await expectLater(
|
||||
() => pub.deps(
|
||||
FlutterProject.fromDirectoryTest(fileSystem.currentDirectory),
|
||||
),
|
||||
throwsA(
|
||||
isA<StateError>().having(
|
||||
(StateError e) => e.message,
|
||||
'message',
|
||||
contains('dart pub --suppress-analytics deps --json failed'),
|
||||
),
|
||||
),
|
||||
);
|
||||
});
|
||||
|
||||
testWithoutContext('fails on non-parseable JSON', () async {
|
||||
final BufferLogger logger = BufferLogger.test();
|
||||
final MemoryFileSystem fileSystem = MemoryFileSystem.test();
|
||||
final ProcessManager processManager = _dartPubDepsReturns(
|
||||
'Not JSON haha!',
|
||||
project: FlutterProject.fromDirectoryTest(fileSystem.currentDirectory),
|
||||
);
|
||||
|
||||
final Pub pub = Pub.test(
|
||||
fileSystem: fileSystem,
|
||||
logger: logger,
|
||||
processManager: processManager,
|
||||
usage: TestUsage(),
|
||||
platform: FakePlatform(),
|
||||
botDetector: const FakeBotDetector(false),
|
||||
stdio: FakeStdio(),
|
||||
);
|
||||
|
||||
await expectLater(
|
||||
() => pub.deps(
|
||||
FlutterProject.fromDirectoryTest(fileSystem.currentDirectory),
|
||||
),
|
||||
throwsA(
|
||||
isA<StateError>().having(
|
||||
(StateError e) => e.message,
|
||||
'message',
|
||||
contains(
|
||||
'dart pub --suppress-analytics deps --json had unexpected output',
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
});
|
||||
|
||||
testWithoutContext('fails on unexpected JSON type', () async {
|
||||
final BufferLogger logger = BufferLogger.test();
|
||||
final MemoryFileSystem fileSystem = MemoryFileSystem.test();
|
||||
final ProcessManager processManager = _dartPubDepsReturns(
|
||||
'[]',
|
||||
project: FlutterProject.fromDirectoryTest(fileSystem.currentDirectory),
|
||||
);
|
||||
|
||||
final Pub pub = Pub.test(
|
||||
fileSystem: fileSystem,
|
||||
logger: logger,
|
||||
processManager: processManager,
|
||||
usage: TestUsage(),
|
||||
platform: FakePlatform(),
|
||||
botDetector: const FakeBotDetector(false),
|
||||
stdio: FakeStdio(),
|
||||
);
|
||||
|
||||
await expectLater(
|
||||
() => pub.deps(
|
||||
FlutterProject.fromDirectoryTest(fileSystem.currentDirectory),
|
||||
),
|
||||
throwsA(
|
||||
isA<StateError>().having(
|
||||
(StateError e) => e.message,
|
||||
'message',
|
||||
contains(
|
||||
'Not a JSON object',
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
ProcessManager _dartPubDepsReturns(
|
||||
String dartPubDepsOutput, {
|
||||
required FlutterProject project,
|
||||
}) {
|
||||
return FakeProcessManager.list(<FakeCommand>[
|
||||
FakeCommand(
|
||||
command: const <String>[
|
||||
_dartBin,
|
||||
'pub',
|
||||
'--suppress-analytics',
|
||||
'deps',
|
||||
'--json',
|
||||
],
|
||||
stdout: dartPubDepsOutput,
|
||||
workingDirectory: project.directory.path,
|
||||
),
|
||||
]);
|
||||
}
|
||||
|
||||
ProcessManager _dartPubDepsFails(
|
||||
String dartPubDepsError, {
|
||||
required FlutterProject project,
|
||||
required int exitCode,
|
||||
}) {
|
||||
return FakeProcessManager.list(<FakeCommand>[
|
||||
FakeCommand(
|
||||
command: const <String>[
|
||||
_dartBin,
|
||||
'pub',
|
||||
'--suppress-analytics',
|
||||
'deps',
|
||||
'--json'
|
||||
],
|
||||
exitCode: exitCode,
|
||||
stderr: dartPubDepsError,
|
||||
workingDirectory: project.directory.path,
|
||||
),
|
||||
]);
|
||||
}
|
@ -4,7 +4,6 @@
|
||||
|
||||
import 'package:file/file.dart';
|
||||
import 'package:file/memory.dart';
|
||||
import 'package:flutter_tools/src/base/bot_detector.dart';
|
||||
import 'package:flutter_tools/src/base/common.dart';
|
||||
import 'package:flutter_tools/src/base/file_system.dart';
|
||||
import 'package:flutter_tools/src/base/io.dart' show ProcessException;
|
||||
@ -39,7 +38,7 @@ void main() {
|
||||
processManager: processManager,
|
||||
usage: TestUsage(),
|
||||
platform: FakePlatform(),
|
||||
botDetector: const BotDetectorAlwaysNo(),
|
||||
botDetector: const FakeBotDetector(false),
|
||||
stdio: FakeStdio(),
|
||||
);
|
||||
|
||||
@ -94,7 +93,7 @@ void main() {
|
||||
processManager: processManager,
|
||||
usage: TestUsage(),
|
||||
platform: FakePlatform(),
|
||||
botDetector: const BotDetectorAlwaysNo(),
|
||||
botDetector: const FakeBotDetector(false),
|
||||
stdio: FakeStdio(),
|
||||
);
|
||||
|
||||
@ -149,7 +148,7 @@ void main() {
|
||||
processManager: processManager,
|
||||
usage: TestUsage(),
|
||||
platform: FakePlatform(),
|
||||
botDetector: const BotDetectorAlwaysNo(),
|
||||
botDetector: const FakeBotDetector(false),
|
||||
stdio: FakeStdio(),
|
||||
);
|
||||
|
||||
@ -203,7 +202,7 @@ void main() {
|
||||
processManager: processManager,
|
||||
usage: TestUsage(),
|
||||
platform: FakePlatform(),
|
||||
botDetector: const BotDetectorAlwaysNo(),
|
||||
botDetector: const FakeBotDetector(false),
|
||||
stdio: FakeStdio(),
|
||||
);
|
||||
|
||||
@ -236,7 +235,7 @@ void main() {
|
||||
processManager: processManager,
|
||||
usage: TestUsage(),
|
||||
platform: FakePlatform(),
|
||||
botDetector: const BotDetectorAlwaysNo(),
|
||||
botDetector: const FakeBotDetector(false),
|
||||
stdio: FakeStdio(),
|
||||
);
|
||||
|
||||
@ -275,7 +274,7 @@ void main() {
|
||||
processManager: processManager,
|
||||
usage: TestUsage(),
|
||||
platform: FakePlatform(),
|
||||
botDetector: const BotDetectorAlwaysNo(),
|
||||
botDetector: const FakeBotDetector(false),
|
||||
stdio: FakeStdio(),
|
||||
);
|
||||
|
||||
@ -321,7 +320,7 @@ void main() {
|
||||
processManager: processManager,
|
||||
usage: TestUsage(),
|
||||
platform: FakePlatform(),
|
||||
botDetector: const BotDetectorAlwaysNo(),
|
||||
botDetector: const FakeBotDetector(false),
|
||||
stdio: FakeStdio(),
|
||||
);
|
||||
|
||||
@ -366,7 +365,7 @@ void main() {
|
||||
processManager: processManager,
|
||||
usage: TestUsage(),
|
||||
platform: FakePlatform(),
|
||||
botDetector: const BotDetectorAlwaysNo(),
|
||||
botDetector: const FakeBotDetector(false),
|
||||
stdio: FakeStdio(),
|
||||
);
|
||||
|
||||
@ -414,7 +413,7 @@ void main() {
|
||||
processManager: processManager,
|
||||
usage: TestUsage(),
|
||||
platform: FakePlatform(),
|
||||
botDetector: const BotDetectorAlwaysNo(),
|
||||
botDetector: const FakeBotDetector(false),
|
||||
stdio: FakeStdio(),
|
||||
);
|
||||
|
||||
@ -459,7 +458,7 @@ void main() {
|
||||
processManager: processManager,
|
||||
usage: TestUsage(),
|
||||
platform: FakePlatform(),
|
||||
botDetector: const BotDetectorAlwaysNo(),
|
||||
botDetector: const FakeBotDetector(false),
|
||||
stdio: FakeStdio(),
|
||||
);
|
||||
|
||||
@ -504,7 +503,7 @@ void main() {
|
||||
processManager: processManager,
|
||||
usage: TestUsage(),
|
||||
platform: FakePlatform(),
|
||||
botDetector: const BotDetectorAlwaysNo(),
|
||||
botDetector: const FakeBotDetector(false),
|
||||
stdio: FakeStdio(),
|
||||
);
|
||||
|
||||
@ -552,7 +551,7 @@ void main() {
|
||||
processManager: processManager,
|
||||
usage: TestUsage(),
|
||||
platform: FakePlatform(),
|
||||
botDetector: const BotDetectorAlwaysNo(),
|
||||
botDetector: const FakeBotDetector(false),
|
||||
stdio: FakeStdio(),
|
||||
);
|
||||
|
||||
@ -597,7 +596,7 @@ void main() {
|
||||
fileSystem: fileSystem,
|
||||
logger: logger,
|
||||
usage: TestUsage(),
|
||||
botDetector: const BotDetectorAlwaysNo(),
|
||||
botDetector: const FakeBotDetector(false),
|
||||
stdio: mockStdio,
|
||||
processManager: processManager,
|
||||
);
|
||||
@ -615,8 +614,8 @@ exit code: 66
|
||||
project: FlutterProject.fromDirectoryTest(fileSystem.currentDirectory),
|
||||
context: PubContext.flutterTests,
|
||||
),
|
||||
throwsA(isA<ToolExit>()
|
||||
.having((ToolExit error) => error.message, 'message', contains('Failed to update packages'))),
|
||||
throwsA(isA<ToolExit>().having((ToolExit error) => error.message,
|
||||
'message', contains('Failed to update packages'))),
|
||||
);
|
||||
expect(logger.statusText, isEmpty);
|
||||
expect(logger.traceText, contains(toolExitMessage));
|
||||
@ -629,11 +628,14 @@ exit code: 66
|
||||
expect(processManager, hasNoRemainingExpectations);
|
||||
});
|
||||
|
||||
testWithoutContext('pub get with failing exit code even with OutputMode == failuresOnly', () async {
|
||||
testWithoutContext(
|
||||
'pub get with failing exit code even with OutputMode == failuresOnly',
|
||||
() async {
|
||||
final BufferLogger logger = BufferLogger.test();
|
||||
final FileSystem fileSystem = MemoryFileSystem.test();
|
||||
|
||||
final FakeProcessManager processManager = FakeProcessManager.list(<FakeCommand>[
|
||||
final FakeProcessManager processManager =
|
||||
FakeProcessManager.list(<FakeCommand>[
|
||||
const FakeCommand(
|
||||
command: <String>[
|
||||
'bin/cache/dart-sdk/bin/dart',
|
||||
@ -661,7 +663,7 @@ exit code: 66
|
||||
fileSystem: fileSystem,
|
||||
logger: logger,
|
||||
usage: TestUsage(),
|
||||
botDetector: const BotDetectorAlwaysNo(),
|
||||
botDetector: const FakeBotDetector(false),
|
||||
processManager: processManager,
|
||||
);
|
||||
|
||||
@ -680,7 +682,8 @@ exit code: 66
|
||||
expect(
|
||||
logger.warningText,
|
||||
contains('git remote set-url upstream'),
|
||||
reason: 'When update-packages fails, it is often because of missing an upsteam remote.',
|
||||
reason:
|
||||
'When update-packages fails, it is often because of missing an upsteam remote.',
|
||||
);
|
||||
expect(processManager, hasNoRemainingExpectations);
|
||||
});
|
||||
@ -732,7 +735,7 @@ exit code: 66
|
||||
fileSystem: fileSystem,
|
||||
logger: logger,
|
||||
usage: TestUsage(),
|
||||
botDetector: const BotDetectorAlwaysNo(),
|
||||
botDetector: const FakeBotDetector(false),
|
||||
stdio: FakeStdio(),
|
||||
processManager: processManager,
|
||||
);
|
||||
@ -793,7 +796,7 @@ exit code: 66
|
||||
fileSystem: fileSystem,
|
||||
logger: logger,
|
||||
processManager: processManager,
|
||||
botDetector: const BotDetectorAlwaysNo(),
|
||||
botDetector: const FakeBotDetector(false),
|
||||
stdio: mockStdio,
|
||||
);
|
||||
|
||||
@ -844,7 +847,7 @@ exit code: 66
|
||||
fileSystem: fileSystem,
|
||||
logger: BufferLogger.test(),
|
||||
processManager: processManager,
|
||||
botDetector: const BotDetectorAlwaysNo(),
|
||||
botDetector: const FakeBotDetector(false),
|
||||
stdio: mockStdio,
|
||||
);
|
||||
|
||||
@ -915,7 +918,7 @@ exit code: 66
|
||||
fileSystem: fileSystem,
|
||||
logger: logger,
|
||||
processManager: processManager,
|
||||
botDetector: const BotDetectorAlwaysNo(),
|
||||
botDetector: const FakeBotDetector(false),
|
||||
stdio: FakeStdio(),
|
||||
);
|
||||
|
||||
@ -957,7 +960,7 @@ exit code: 66
|
||||
logger: BufferLogger.test(),
|
||||
processManager: processManager,
|
||||
usage: TestUsage(),
|
||||
botDetector: const BotDetectorAlwaysNo(),
|
||||
botDetector: const FakeBotDetector(false),
|
||||
stdio: mockStdio,
|
||||
platform: FakePlatform(
|
||||
environment: const <String, String>{
|
||||
@ -988,7 +991,7 @@ exit code: 66
|
||||
fileSystem: fileSystem,
|
||||
logger: BufferLogger.test(),
|
||||
processManager: FakeProcessManager.any(),
|
||||
botDetector: const BotDetectorAlwaysNo(),
|
||||
botDetector: const FakeBotDetector(false),
|
||||
stdio: FakeStdio(),
|
||||
usage: usage,
|
||||
platform: FakePlatform(environment: const <String, String>{
|
||||
@ -1021,7 +1024,7 @@ exit code: 66
|
||||
fileSystem: fileSystem,
|
||||
logger: BufferLogger.test(),
|
||||
processManager: FakeProcessManager.any(),
|
||||
botDetector: const BotDetectorAlwaysNo(),
|
||||
botDetector: const FakeBotDetector(false),
|
||||
stdio: FakeStdio(),
|
||||
usage: usage,
|
||||
platform: FakePlatform(environment: const <String, String>{
|
||||
@ -1084,7 +1087,7 @@ exit code: 66
|
||||
fileSystem: fileSystem,
|
||||
logger: BufferLogger.test(),
|
||||
processManager: processManager,
|
||||
botDetector: const BotDetectorAlwaysNo(),
|
||||
botDetector: const FakeBotDetector(false),
|
||||
stdio: FakeStdio(),
|
||||
platform: FakePlatform(
|
||||
environment: const <String, String>{
|
||||
@ -1173,7 +1176,7 @@ exit code: 66
|
||||
platform: FakePlatform(
|
||||
environment: <String, String>{},
|
||||
),
|
||||
botDetector: const BotDetectorAlwaysNo(),
|
||||
botDetector: const FakeBotDetector(false),
|
||||
stdio: FakeStdio());
|
||||
|
||||
fileSystem.file('version').createSync();
|
||||
@ -1211,10 +1214,3 @@ exit code: 66
|
||||
logger.clear();
|
||||
});
|
||||
}
|
||||
|
||||
class BotDetectorAlwaysNo implements BotDetector {
|
||||
const BotDetectorAlwaysNo();
|
||||
|
||||
@override
|
||||
Future<bool> get isRunningOnBot async => false;
|
||||
}
|
||||
|
@ -15,6 +15,7 @@ import 'package:flutter_tools/src/base/platform.dart';
|
||||
import 'package:flutter_tools/src/base/version.dart';
|
||||
import 'package:flutter_tools/src/build_info.dart';
|
||||
import 'package:flutter_tools/src/cache.dart';
|
||||
import 'package:flutter_tools/src/dart/pub.dart';
|
||||
import 'package:flutter_tools/src/device.dart';
|
||||
import 'package:flutter_tools/src/device_port_forwarder.dart';
|
||||
import 'package:flutter_tools/src/ios/application_package.dart';
|
||||
@ -34,6 +35,7 @@ import '../../src/common.dart';
|
||||
import '../../src/context.dart' hide FakeXcodeProjectInterpreter;
|
||||
import '../../src/fake_devices.dart';
|
||||
import '../../src/fake_process_manager.dart';
|
||||
import '../../src/fake_pub_deps.dart';
|
||||
import '../../src/fakes.dart';
|
||||
|
||||
List<String> _xattrArgs(FlutterProject flutterProject) {
|
||||
@ -74,12 +76,7 @@ const List<String> kRunReleaseArgs = <String>[
|
||||
// label which plugins are dependency plugins.
|
||||
//
|
||||
// Ideally processPodsIfNeeded should rely on the command (removing this call).
|
||||
const List<String> kCheckDartPubDeps = <String> [
|
||||
'dart',
|
||||
'pub',
|
||||
'deps',
|
||||
'--json',
|
||||
];
|
||||
final Pub fakePubBecauseRefreshPluginsList = FakePubWithPrimedDeps();
|
||||
|
||||
const String kConcurrentBuildErrorMessage = '''
|
||||
"/Developer/Xcode/DerivedData/foo/XCBuildData/build.db":
|
||||
@ -144,7 +141,6 @@ void main() {
|
||||
final BuildableIOSApp buildableIOSApp = BuildableIOSApp(flutterProject.ios, 'flutter', 'My Super Awesome App');
|
||||
|
||||
processManager.addCommand(FakeCommand(command: _xattrArgs(flutterProject)));
|
||||
processManager.addCommand(const FakeCommand(command: kCheckDartPubDeps));
|
||||
processManager.addCommand(const FakeCommand(command: kRunReleaseArgs));
|
||||
|
||||
final LaunchResult launchResult = await iosDevice.startApp(
|
||||
@ -166,6 +162,7 @@ void main() {
|
||||
);
|
||||
}, overrides: <Type, Generator>{
|
||||
ProcessManager: () => processManager,
|
||||
Pub: () => fakePubBecauseRefreshPluginsList,
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
OperatingSystemUtils: () => os,
|
||||
@ -219,7 +216,6 @@ void main() {
|
||||
fileSystem.directory('build/ios/Release-iphoneos/My Super Awesome App.app').createSync(recursive: true);
|
||||
|
||||
processManager.addCommand(FakeCommand(command: _xattrArgs(flutterProject)));
|
||||
processManager.addCommand(const FakeCommand(command: kCheckDartPubDeps));
|
||||
processManager.addCommand(const FakeCommand(command: kRunReleaseArgs));
|
||||
processManager.addCommand(const FakeCommand(command: <String>[
|
||||
'rsync',
|
||||
@ -258,6 +254,7 @@ void main() {
|
||||
expect(processManager, hasNoRemainingExpectations);
|
||||
}, overrides: <Type, Generator>{
|
||||
ProcessManager: () => processManager,
|
||||
Pub: () => fakePubBecauseRefreshPluginsList,
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
OperatingSystemUtils: () => os,
|
||||
@ -280,7 +277,6 @@ void main() {
|
||||
fileSystem.directory('build/ios/Release-iphoneos/My Super Awesome App.app').createSync(recursive: true);
|
||||
|
||||
processManager.addCommand(FakeCommand(command: _xattrArgs(flutterProject)));
|
||||
processManager.addCommand(const FakeCommand(command: kCheckDartPubDeps));
|
||||
processManager.addCommand(const FakeCommand(command: <String>[
|
||||
'xcrun',
|
||||
'xcodebuild',
|
||||
@ -347,6 +343,7 @@ void main() {
|
||||
OperatingSystemUtils: () => FakeOperatingSystemUtils(
|
||||
hostPlatform: HostPlatform.darwin_x64,
|
||||
),
|
||||
Pub: () => fakePubBecauseRefreshPluginsList,
|
||||
Platform: () => macPlatform,
|
||||
XcodeProjectInterpreter: () => fakeXcodeProjectInterpreter,
|
||||
Xcode: () => xcode,
|
||||
@ -364,7 +361,6 @@ void main() {
|
||||
final BuildableIOSApp buildableIOSApp = BuildableIOSApp(flutterProject.ios, 'flutter', 'My Super Awesome App');
|
||||
|
||||
processManager.addCommand(FakeCommand(command: _xattrArgs(flutterProject)));
|
||||
processManager.addCommand(const FakeCommand(command: kCheckDartPubDeps));
|
||||
// The first xcrun call should fail with a
|
||||
// concurrent build exception.
|
||||
processManager.addCommand(
|
||||
@ -419,6 +415,7 @@ void main() {
|
||||
hostPlatform: HostPlatform.darwin_arm64,
|
||||
),
|
||||
Platform: () => macPlatform,
|
||||
Pub: () => fakePubBecauseRefreshPluginsList,
|
||||
XcodeProjectInterpreter: () => fakeXcodeProjectInterpreter,
|
||||
Xcode: () => xcode,
|
||||
});
|
||||
@ -472,6 +469,7 @@ void main() {
|
||||
expect(processManager, hasNoRemainingExpectations);
|
||||
}, overrides: <Type, Generator>{
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
Pub: () => fakePubBecauseRefreshPluginsList,
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
OperatingSystemUtils: () => os,
|
||||
@ -507,6 +505,7 @@ void main() {
|
||||
expect(processManager, hasNoRemainingExpectations);
|
||||
}, overrides: <Type, Generator>{
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
Pub: () => fakePubBecauseRefreshPluginsList,
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
OperatingSystemUtils: () => os,
|
||||
@ -542,6 +541,7 @@ void main() {
|
||||
expect(processManager, hasNoRemainingExpectations);
|
||||
}, overrides: <Type, Generator>{
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
Pub: () => fakePubBecauseRefreshPluginsList,
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
OperatingSystemUtils: () => os,
|
||||
@ -578,6 +578,7 @@ void main() {
|
||||
expect(coreDeviceControl.argumentsUsedForLaunch, contains('--enable-dart-profiling'));
|
||||
}, overrides: <Type, Generator>{
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
Pub: () => fakePubBecauseRefreshPluginsList,
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
OperatingSystemUtils: () => os,
|
||||
@ -645,6 +646,7 @@ void main() {
|
||||
expect(processManager, hasNoRemainingExpectations);
|
||||
}, overrides: <Type, Generator>{
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
Pub: () => fakePubBecauseRefreshPluginsList,
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
OperatingSystemUtils: () => os,
|
||||
@ -721,6 +723,7 @@ void main() {
|
||||
expect(processManager, hasNoRemainingExpectations);
|
||||
}, overrides: <Type, Generator>{
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
Pub: () => fakePubBecauseRefreshPluginsList,
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
OperatingSystemUtils: () => os,
|
||||
@ -802,6 +805,7 @@ void main() {
|
||||
expect(contents.contains('CONFIGURATION_BUILD_DIR'), isFalse);
|
||||
}, overrides: <Type, Generator>{
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
Pub: () => fakePubBecauseRefreshPluginsList,
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
OperatingSystemUtils: () => os,
|
||||
@ -842,6 +846,7 @@ void main() {
|
||||
expect(processManager, hasNoRemainingExpectations);
|
||||
}, overrides: <Type, Generator>{
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
Pub: () => fakePubBecauseRefreshPluginsList,
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
Platform: () => macPlatform,
|
||||
@ -881,6 +886,7 @@ void main() {
|
||||
expect(processManager, hasNoRemainingExpectations);
|
||||
}, overrides: <Type, Generator>{
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
Pub: () => fakePubBecauseRefreshPluginsList,
|
||||
FileSystem: () => fileSystem,
|
||||
Logger: () => logger,
|
||||
OperatingSystemUtils: () => os,
|
||||
|
@ -8,6 +8,7 @@ import 'package:file/file.dart';
|
||||
import 'package:file/memory.dart';
|
||||
import 'package:flutter_tools/src/base/logger.dart';
|
||||
import 'package:flutter_tools/src/build_info.dart';
|
||||
import 'package:flutter_tools/src/dart/pub.dart';
|
||||
import 'package:flutter_tools/src/flutter_manifest.dart';
|
||||
import 'package:flutter_tools/src/macos/cocoapod_utils.dart';
|
||||
import 'package:flutter_tools/src/macos/cocoapods.dart';
|
||||
@ -16,6 +17,7 @@ import 'package:test/fake.dart';
|
||||
|
||||
import '../../src/common.dart';
|
||||
import '../../src/context.dart';
|
||||
import '../../src/fake_pub_deps.dart';
|
||||
|
||||
void main() {
|
||||
group('processPodsIfNeeded', () {
|
||||
@ -107,7 +109,8 @@ void main() {
|
||||
expect(cocoaPods.processedPods, isTrue);
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fs,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
ProcessManager: FakeProcessManager.empty,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
CocoaPods: () => cocoaPods,
|
||||
});
|
||||
|
||||
@ -125,7 +128,8 @@ void main() {
|
||||
expect(cocoaPods.processedPods, isTrue);
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fs,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
ProcessManager: FakeProcessManager.empty,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
CocoaPods: () => cocoaPods,
|
||||
});
|
||||
|
||||
@ -142,7 +146,8 @@ void main() {
|
||||
expect(cocoaPods.processedPods, isFalse);
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fs,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
ProcessManager: FakeProcessManager.empty,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
CocoaPods: () => cocoaPods,
|
||||
});
|
||||
|
||||
@ -158,7 +163,8 @@ void main() {
|
||||
expect(cocoaPods.processedPods, isFalse);
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fs,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
ProcessManager: FakeProcessManager.empty,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
CocoaPods: () => cocoaPods,
|
||||
});
|
||||
});
|
||||
@ -182,7 +188,8 @@ void main() {
|
||||
expect(cocoaPods.processedPods, isTrue);
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fs,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
ProcessManager: FakeProcessManager.empty,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
CocoaPods: () => cocoaPods,
|
||||
});
|
||||
|
||||
@ -203,7 +210,7 @@ void main() {
|
||||
expect(cocoaPods.processedPods, isFalse);
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fs,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
ProcessManager: FakeProcessManager.empty,
|
||||
CocoaPods: () => cocoaPods,
|
||||
});
|
||||
|
||||
@ -235,7 +242,8 @@ void main() {
|
||||
);
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fs,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
ProcessManager: FakeProcessManager.empty,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
CocoaPods: () => cocoaPods,
|
||||
Logger: () => logger,
|
||||
});
|
||||
@ -260,7 +268,8 @@ void main() {
|
||||
expect(cocoaPods.processedPods, isTrue);
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fs,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
ProcessManager: FakeProcessManager.empty,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
CocoaPods: () => cocoaPods,
|
||||
});
|
||||
|
||||
@ -278,7 +287,8 @@ void main() {
|
||||
expect(cocoaPods.processedPods, isTrue);
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fs,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
ProcessManager: FakeProcessManager.empty,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
CocoaPods: () => cocoaPods,
|
||||
});
|
||||
|
||||
@ -295,7 +305,8 @@ void main() {
|
||||
expect(cocoaPods.processedPods, isFalse);
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fs,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
ProcessManager: FakeProcessManager.empty,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
CocoaPods: () => cocoaPods,
|
||||
});
|
||||
|
||||
@ -311,7 +322,8 @@ void main() {
|
||||
expect(cocoaPods.processedPods, isFalse);
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fs,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
ProcessManager: FakeProcessManager.empty,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
CocoaPods: () => cocoaPods,
|
||||
});
|
||||
});
|
||||
@ -335,7 +347,8 @@ void main() {
|
||||
expect(cocoaPods.processedPods, isTrue);
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fs,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
ProcessManager: FakeProcessManager.empty,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
CocoaPods: () => cocoaPods,
|
||||
});
|
||||
|
||||
@ -356,7 +369,7 @@ void main() {
|
||||
expect(cocoaPods.processedPods, isFalse);
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fs,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
ProcessManager: FakeProcessManager.empty,
|
||||
CocoaPods: () => cocoaPods,
|
||||
});
|
||||
|
||||
@ -388,7 +401,8 @@ void main() {
|
||||
);
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fs,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
ProcessManager: FakeProcessManager.empty,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
CocoaPods: () => cocoaPods,
|
||||
Logger: () => logger,
|
||||
});
|
||||
|
@ -14,6 +14,7 @@ import 'package:flutter_tools/src/base/os.dart';
|
||||
import 'package:flutter_tools/src/base/platform.dart';
|
||||
import 'package:flutter_tools/src/base/time.dart';
|
||||
import 'package:flutter_tools/src/base/utils.dart';
|
||||
import 'package:flutter_tools/src/dart/pub.dart';
|
||||
import 'package:flutter_tools/src/features.dart';
|
||||
import 'package:flutter_tools/src/flutter_manifest.dart';
|
||||
import 'package:flutter_tools/src/flutter_plugins.dart';
|
||||
@ -30,6 +31,7 @@ import 'package:yaml/yaml.dart';
|
||||
|
||||
import '../src/common.dart';
|
||||
import '../src/context.dart';
|
||||
import '../src/fake_pub_deps.dart';
|
||||
import '../src/fakes.dart' hide FakeOperatingSystemUtils;
|
||||
import '../src/pubspec_schema.dart';
|
||||
|
||||
@ -462,7 +464,8 @@ dependencies:
|
||||
expect(flutterProject.flutterPluginsDependenciesFile, exists);
|
||||
}, overrides: <Type, Generator>{
|
||||
FileSystem: () => fs,
|
||||
ProcessManager: () => FakeProcessManager.any(),
|
||||
ProcessManager: FakeProcessManager.empty,
|
||||
Pub: FakePubWithPrimedDeps.new,
|
||||
});
|
||||
|
||||
testUsingContext(
|
||||
|
@ -121,7 +121,7 @@ void testUsingContext(
|
||||
FileSystem: () => LocalFileSystemBlockingSetCurrentDirectory(),
|
||||
PlistParser: () => FakePlistParser(),
|
||||
Signals: () => FakeSignals(),
|
||||
Pub: () => ThrowingPub(), // prevent accidentally using pub.
|
||||
Pub: () => const ThrowingPub(), // prevent accidentally using pub.
|
||||
CrashReporter: () => const NoopCrashReporter(),
|
||||
TemplateRenderer: () => const MustacheTemplateRenderer(),
|
||||
BuildTargets: () => const BuildTargetsImpl(),
|
||||
|
84
packages/flutter_tools/test/src/fake_pub_deps.dart
Normal file
84
packages/flutter_tools/test/src/fake_pub_deps.dart
Normal file
@ -0,0 +1,84 @@
|
||||
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:flutter_tools/src/dart/pub.dart';
|
||||
import 'package:flutter_tools/src/project.dart';
|
||||
|
||||
/// A fake implementation of [Pub] with a pre-primed [deps] response.
|
||||
final class FakePubWithPrimedDeps implements Pub {
|
||||
/// Creates an implementation of [Pub] with a pre-primed [Pub.deps] response.
|
||||
///
|
||||
/// It is expected that every [FlutterProject] that is provided to the
|
||||
/// [Pub.deps] call is represented by [rootPackageName].
|
||||
///
|
||||
/// Optionally, provide [devDependencies] (of [rootPackageName]), and non
|
||||
/// dev-dependencies ([dependencies]) of any package to a set of any other
|
||||
/// packages. A resulting valid `dart pub deps --json` response is implicitly
|
||||
/// created.
|
||||
factory FakePubWithPrimedDeps({
|
||||
String rootPackageName = 'app_name',
|
||||
Set<String> devDependencies = const <String>{},
|
||||
Map<String, Set<String>> dependencies = const <String, Set<String>>{},
|
||||
}) {
|
||||
// Start the packages: [ ... ] list with the root package.
|
||||
final List<Object?> packages = <Object?>[
|
||||
<String, Object?>{
|
||||
'name': rootPackageName,
|
||||
'kind': 'root',
|
||||
'dependencies': <String>[
|
||||
...dependencies.keys,
|
||||
...devDependencies,
|
||||
]..sort(),
|
||||
'directDependencies': <String>[
|
||||
...?dependencies[rootPackageName],
|
||||
...devDependencies,
|
||||
]..sort(),
|
||||
'devDependencies': <String>[
|
||||
...devDependencies,
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
// Add all non-dev dependencies.
|
||||
for (final String packageName in dependencies.keys) {
|
||||
final bool direct = dependencies[rootPackageName]!.contains(packageName);
|
||||
packages.add(<String, Object?>{
|
||||
'name': packageName,
|
||||
'kind': direct ? 'direct' : 'transitive',
|
||||
'dependencies': <String>[
|
||||
...?dependencies[packageName],
|
||||
],
|
||||
'directDependencies': <String>[
|
||||
...?dependencies[packageName],
|
||||
],
|
||||
});
|
||||
}
|
||||
|
||||
// Add all dev-dependencies.
|
||||
for (final String packageName in devDependencies) {
|
||||
packages.add(<String, Object?>{
|
||||
'name': packageName,
|
||||
'kind': 'dev',
|
||||
'dependencies': <String>[],
|
||||
'directDependencies': <String>[],
|
||||
});
|
||||
}
|
||||
|
||||
return FakePubWithPrimedDeps._(<String, Object?>{
|
||||
'root': rootPackageName,
|
||||
'packages': packages,
|
||||
});
|
||||
}
|
||||
|
||||
const FakePubWithPrimedDeps._(this._deps);
|
||||
final Map<String, Object?> _deps;
|
||||
|
||||
@override
|
||||
Future<Map<String, Object?>> deps(FlutterProject project) async => _deps;
|
||||
|
||||
@override
|
||||
Never noSuchMethod(Invocation invocation) {
|
||||
throw UnsupportedError('Only <Pub>.deps is expected to be called');
|
||||
}
|
||||
}
|
@ -44,7 +44,7 @@ final Map<Type, Generator> _testbedDefaults = <Type, Generator>{
|
||||
Analytics: () => const NoOpAnalytics(),
|
||||
FlutterVersion: () => FakeFlutterVersion(), // prevent requirement to mock git for test runner.
|
||||
Signals: () => FakeSignals(), // prevent registering actual signal handlers.
|
||||
Pub: () => ThrowingPub(), // prevent accidental invocations of pub.
|
||||
Pub: () => const ThrowingPub(), // prevent accidental invocations of pub.
|
||||
};
|
||||
|
||||
/// Manages interaction with the tool injection and runner system.
|
||||
|
@ -3,47 +3,25 @@
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:flutter_tools/src/dart/pub.dart';
|
||||
import 'package:flutter_tools/src/project.dart';
|
||||
|
||||
class ThrowingPub implements Pub {
|
||||
@override
|
||||
Future<void> batch(List<String> arguments, {
|
||||
PubContext? context,
|
||||
String? directory,
|
||||
MessageFilter? filter,
|
||||
String? failureMessage = 'pub failed',
|
||||
}) {
|
||||
throw UnsupportedError('Attempted to invoke pub during test.');
|
||||
}
|
||||
final class ThrowingPub implements Pub {
|
||||
const ThrowingPub();
|
||||
|
||||
@override
|
||||
Future<void> get({
|
||||
PubContext? context,
|
||||
required FlutterProject project,
|
||||
bool upgrade = false,
|
||||
bool offline = false,
|
||||
bool checkLastModified = true,
|
||||
bool skipPubspecYamlCheck = false,
|
||||
bool generateSyntheticPackage = false,
|
||||
bool generateSyntheticPackageForExample = false,
|
||||
String? flutterRootOverride,
|
||||
bool checkUpToDate = false,
|
||||
bool shouldSkipThirdPartyGenerator = true,
|
||||
PubOutputMode outputMode = PubOutputMode.all,
|
||||
}) {
|
||||
throw UnsupportedError('Attempted to invoke pub during test.');
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> interactively(
|
||||
List<String> arguments, {
|
||||
FlutterProject? project,
|
||||
required PubContext context,
|
||||
required String command,
|
||||
bool touchesPackageConfig = false,
|
||||
bool generateSyntheticPackage = false,
|
||||
PubOutputMode outputMode = PubOutputMode.all,
|
||||
}) {
|
||||
throw UnsupportedError('Attempted to invoke pub during test.');
|
||||
Never noSuchMethod(Invocation invocation) {
|
||||
throw UnsupportedError(
|
||||
'Attempted to invoke pub during test, which otherwise was unexpected. '
|
||||
'This error may be caused by either changing the implementation details '
|
||||
'of the Flutter CLI in where the "Pub" class is now being used, or '
|
||||
'adding a unit test that transitively depends on "Pub".\n'
|
||||
'\n'
|
||||
'Possible options for resolution:\n'
|
||||
' 1. Refactor the code or test to not rely on "Pub".\n'
|
||||
' 2. Create and use a test-appropriate Fake (grep for "implements Pub") '
|
||||
' for example code across the test/ repo. It is possible that the '
|
||||
' file you are editing already has an appropriate Fake.\n'
|
||||
' 3. Use "FakePubWithPrimedDeps" if your code will transitively call '
|
||||
' "dart pub deps --json" and you need a realistic output.',
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user