mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
Prefer ephemeral devices from command line run (#34802)
This commit is contained in:
parent
4c56b66fce
commit
25a3121dfd
@ -517,12 +517,8 @@ abstract class FlutterCommand extends Command<void> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
devices = devices.where((Device device) => device.isSupported()).toList();
|
devices = devices.where((Device device) => device.isSupported()).toList();
|
||||||
// If the user has not specified all devices and has multiple connected
|
|
||||||
// then filter then list by those supported in the current project. If
|
|
||||||
// this ends up with a single device we can proceed as normal.
|
|
||||||
if (devices.length > 1 && !deviceManager.hasSpecifiedAllDevices && !deviceManager.hasSpecifiedDeviceId) {
|
if (devices.length > 1 && !deviceManager.hasSpecifiedAllDevices && !deviceManager.hasSpecifiedDeviceId) {
|
||||||
final FlutterProject flutterProject = FlutterProject.current();
|
devices = filterDevices(devices);
|
||||||
devices.removeWhere((Device device) => !device.isSupportedForProject(flutterProject));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (devices.isEmpty) {
|
if (devices.isEmpty) {
|
||||||
@ -698,3 +694,24 @@ abstract class FastFlutterCommand extends FlutterCommand {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If the user has not specified all devices and has multiple connected
|
||||||
|
// then filter the list by those supported in the current project and
|
||||||
|
// remove non-ephemeral device types. If this ends up with a single
|
||||||
|
// device we can proceed as normal.
|
||||||
|
@visibleForTesting
|
||||||
|
List<Device> filterDevices(List<Device> devices) {
|
||||||
|
final FlutterProject flutterProject = FlutterProject.current();
|
||||||
|
devices = devices
|
||||||
|
.where((Device device) => device.isSupportedForProject(flutterProject))
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
// Note: ephemeral is nullable for device types where this is not well
|
||||||
|
// defined.
|
||||||
|
if (devices.any((Device device) => device.ephemeral == true)) {
|
||||||
|
devices = devices
|
||||||
|
.where((Device device) => device.ephemeral == true)
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
|
return devices;
|
||||||
|
}
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
|
|
||||||
import 'package:flutter_tools/src/cache.dart';
|
import 'package:flutter_tools/src/cache.dart';
|
||||||
import 'package:flutter_tools/src/base/time.dart';
|
import 'package:flutter_tools/src/base/time.dart';
|
||||||
|
import 'package:flutter_tools/src/device.dart';
|
||||||
|
import 'package:flutter_tools/src/project.dart';
|
||||||
import 'package:flutter_tools/src/usage.dart';
|
import 'package:flutter_tools/src/usage.dart';
|
||||||
import 'package:flutter_tools/src/base/common.dart';
|
import 'package:flutter_tools/src/base/common.dart';
|
||||||
import 'package:flutter_tools/src/runner/flutter_command.dart';
|
import 'package:flutter_tools/src/runner/flutter_command.dart';
|
||||||
@ -289,6 +291,43 @@ void main() {
|
|||||||
FlutterVersion: () => betaVersion,
|
FlutterVersion: () => betaVersion,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
group('Filter devices', () {
|
||||||
|
MockDevice ephemeral;
|
||||||
|
MockDevice nonEphemeralOne;
|
||||||
|
MockDevice nonEphemeralTwo;
|
||||||
|
MockDevice unsupported;
|
||||||
|
|
||||||
|
setUp(() {
|
||||||
|
ephemeral = MockDevice(true);
|
||||||
|
nonEphemeralOne = MockDevice(false);
|
||||||
|
nonEphemeralTwo = MockDevice(false);
|
||||||
|
unsupported = MockDevice(true, false);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('chooses ephemeral device', () {
|
||||||
|
final List<Device> filtered = filterDevices(<Device>[
|
||||||
|
ephemeral,
|
||||||
|
nonEphemeralOne,
|
||||||
|
nonEphemeralTwo,
|
||||||
|
unsupported,
|
||||||
|
]);
|
||||||
|
|
||||||
|
expect(filtered.single, ephemeral);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('does not remove all non-ephemeral', () {
|
||||||
|
final List<Device> filtered = filterDevices(<Device>[
|
||||||
|
nonEphemeralOne,
|
||||||
|
nonEphemeralTwo,
|
||||||
|
]);
|
||||||
|
|
||||||
|
expect(filtered, <Device>[
|
||||||
|
nonEphemeralOne,
|
||||||
|
nonEphemeralTwo,
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -309,3 +348,15 @@ class FakeCommand extends FlutterCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class MockVersion extends Mock implements FlutterVersion {}
|
class MockVersion extends Mock implements FlutterVersion {}
|
||||||
|
|
||||||
|
class MockDevice extends Mock implements Device {
|
||||||
|
MockDevice(this.ephemeral, [this._isSupported = true]);
|
||||||
|
|
||||||
|
@override
|
||||||
|
final bool ephemeral;
|
||||||
|
|
||||||
|
bool _isSupported;
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool isSupportedForProject(FlutterProject flutterProject) => _isSupported;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user