Fix type error hidden by implicit downcasts (#38102)
This commit is contained in:
parent
2003432cd8
commit
ca5411e3aa
@ -90,7 +90,12 @@ class SimControl {
|
||||
return <String, Map<String, dynamic>>{};
|
||||
}
|
||||
try {
|
||||
return json.decode(results.stdout)[section.name];
|
||||
final Object decodeResult = json.decode(results.stdout?.toString())[section.name];
|
||||
if (decodeResult is Map<String, dynamic>) {
|
||||
return decodeResult;
|
||||
}
|
||||
printError('simctl returned unexpected JSON response: ${results.stdout}');
|
||||
return <String, dynamic>{};
|
||||
} on FormatException {
|
||||
// We failed to parse the simctl output, or it returned junk.
|
||||
// One known message is "Install Started" isn't valid JSON but is
|
||||
@ -107,9 +112,11 @@ class SimControl {
|
||||
final Map<String, dynamic> devicesSection = await _list(SimControlListSection.devices);
|
||||
|
||||
for (String deviceCategory in devicesSection.keys) {
|
||||
final List<dynamic> devicesData = devicesSection[deviceCategory];
|
||||
for (Map<String, dynamic> data in devicesData.map<Map<String, dynamic>>(castStringKeyedMap)) {
|
||||
devices.add(SimDevice(deviceCategory, data));
|
||||
final Object devicesData = devicesSection[deviceCategory];
|
||||
if (devicesData != null && devicesData is List<dynamic>) {
|
||||
for (Map<String, dynamic> data in devicesData.map<Map<String, dynamic>>(castStringKeyedMap)) {
|
||||
devices.add(SimDevice(deviceCategory, data));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -220,10 +227,10 @@ class SimDevice {
|
||||
final String category;
|
||||
final Map<String, dynamic> data;
|
||||
|
||||
String get state => data['state'];
|
||||
String get availability => data['availability'];
|
||||
String get name => data['name'];
|
||||
String get udid => data['udid'];
|
||||
String get state => data['state']?.toString();
|
||||
String get availability => data['availability']?.toString();
|
||||
String get name => data['name']?.toString();
|
||||
String get udid => data['udid']?.toString();
|
||||
|
||||
bool get isBooted => state == 'Booted';
|
||||
}
|
||||
@ -267,7 +274,7 @@ class IOSSimulator extends Device {
|
||||
Future<bool> isLatestBuildInstalled(ApplicationPackage app) async => false;
|
||||
|
||||
@override
|
||||
Future<bool> installApp(ApplicationPackage app) async {
|
||||
Future<bool> installApp(covariant IOSApp app) async {
|
||||
try {
|
||||
final IOSApp iosApp = app;
|
||||
await SimControl.instance.install(id, iosApp.simulatorBundlePath);
|
||||
@ -316,7 +323,7 @@ class IOSSimulator extends Device {
|
||||
|
||||
@override
|
||||
Future<LaunchResult> startApp(
|
||||
ApplicationPackage package, {
|
||||
covariant IOSApp package, {
|
||||
String mainPath,
|
||||
String route,
|
||||
DebuggingOptions debuggingOptions,
|
||||
@ -325,7 +332,7 @@ class IOSSimulator extends Device {
|
||||
bool usesTerminalUi = true,
|
||||
bool ipv6 = false,
|
||||
}) async {
|
||||
if (!prebuiltApplication) {
|
||||
if (!prebuiltApplication && package is BuildableIOSApp) {
|
||||
printTrace('Building ${package.name} for $id.');
|
||||
|
||||
try {
|
||||
@ -371,8 +378,7 @@ class IOSSimulator extends Device {
|
||||
// which should always yield the correct value and does not require
|
||||
// parsing the xcodeproj or configuration files.
|
||||
// See https://github.com/flutter/flutter/issues/31037 for more information.
|
||||
final IOSApp iosApp = package;
|
||||
final String plistPath = fs.path.join(iosApp.simulatorBundlePath, 'Info.plist');
|
||||
final String plistPath = fs.path.join(package.simulatorBundlePath, 'Info.plist');
|
||||
final String bundleIdentifier = iosWorkflow.getPlistValueFromFile(plistPath, kCFBundleIdentifierKey);
|
||||
|
||||
await SimControl.instance.launch(id, bundleIdentifier, args);
|
||||
@ -400,7 +406,7 @@ class IOSSimulator extends Device {
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _setupUpdatedApplicationBundle(ApplicationPackage app, BuildInfo buildInfo, String mainPath, bool usesTerminalUi) async {
|
||||
Future<void> _setupUpdatedApplicationBundle(covariant BuildableIOSApp app, BuildInfo buildInfo, String mainPath, bool usesTerminalUi) async {
|
||||
await _sideloadUpdatedAssetsForInstalledApplicationBundle(app, buildInfo, mainPath);
|
||||
|
||||
// Step 1: Build the Xcode project.
|
||||
@ -422,8 +428,7 @@ class IOSSimulator extends Device {
|
||||
throwToolExit('Could not build the application for the simulator.');
|
||||
|
||||
// Step 2: Assert that the Xcode project was successfully built.
|
||||
final IOSApp iosApp = app;
|
||||
final Directory bundle = fs.directory(iosApp.simulatorBundlePath);
|
||||
final Directory bundle = fs.directory(app.simulatorBundlePath);
|
||||
final bool bundleExists = bundle.existsSync();
|
||||
if (!bundleExists)
|
||||
throwToolExit('Could not find the built application bundle at ${bundle.path}.');
|
||||
@ -463,11 +468,11 @@ class IOSSimulator extends Device {
|
||||
|
||||
Future<int> get sdkMajorVersion async {
|
||||
final Match sdkMatch = _iosSdkRegExp.firstMatch(await sdkNameAndVersion);
|
||||
return int.parse(sdkMatch?.group(2) ?? 11);
|
||||
return int.parse(sdkMatch?.group(2) ?? '11');
|
||||
}
|
||||
|
||||
@override
|
||||
DeviceLogReader getLogReader({ ApplicationPackage app }) {
|
||||
DeviceLogReader getLogReader({ covariant IOSApp app }) {
|
||||
assert(app is IOSApp);
|
||||
_logReaders ??= <ApplicationPackage, _IOSSimulatorLogReader>{};
|
||||
return _logReaders.putIfAbsent(app, () => _IOSSimulatorLogReader(this, app));
|
||||
|
@ -438,6 +438,12 @@ void main() {
|
||||
ProcessManager: () => mockProcessManager,
|
||||
SimControl: () => simControl,
|
||||
});
|
||||
|
||||
testUsingContext('sdkMajorVersion defaults to 11 when sdkNameAndVersion is junk', () async {
|
||||
final IOSSimulator iosSimulatorA = IOSSimulator('x', name: 'Testo', simulatorCategory: 'NaN');
|
||||
|
||||
expect(await iosSimulatorA.sdkMajorVersion, 11);
|
||||
});
|
||||
});
|
||||
|
||||
group('startApp', () {
|
||||
|
Loading…
x
Reference in New Issue
Block a user