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();
|
||||
// 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) {
|
||||
final FlutterProject flutterProject = FlutterProject.current();
|
||||
devices.removeWhere((Device device) => !device.isSupportedForProject(flutterProject));
|
||||
devices = filterDevices(devices);
|
||||
}
|
||||
|
||||
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/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/base/common.dart';
|
||||
import 'package:flutter_tools/src/runner/flutter_command.dart';
|
||||
@ -289,6 +291,43 @@ void main() {
|
||||
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 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