Skip to content

Commit 7e4822d

Browse files
authored
Use DeviceDiscoveryFilter correctly in ProxiedDevices. (#123144)
Use DeviceDiscoveryFilter correctly in ProxiedDevices.
1 parent a9073f7 commit 7e4822d

File tree

2 files changed

+96
-21
lines changed

2 files changed

+96
-21
lines changed

packages/flutter_tools/lib/src/proxied_devices/devices.dart

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class ProxiedDevices extends DeviceDiscovery {
5858

5959
@override
6060
Future<List<Device>> devices({DeviceDiscoveryFilter? filter}) async =>
61-
_devices ?? await discoverDevices(filter: filter);
61+
_filterDevices(_devices ?? await discoverDevices(), filter);
6262

6363
@override
6464
Future<List<Device>> discoverDevices({
@@ -72,7 +72,14 @@ class ProxiedDevices extends DeviceDiscovery {
7272
];
7373

7474
_devices = devices;
75-
return devices;
75+
return _filterDevices(devices, filter);
76+
}
77+
78+
Future<List<Device>> _filterDevices(List<Device> devices, DeviceDiscoveryFilter? filter) async {
79+
if (filter == null) {
80+
return devices;
81+
}
82+
return filter.filterDevices(devices);
7683
}
7784

7885
@override

packages/flutter_tools/test/general.shard/proxied_devices/proxied_devices_test.dart

Lines changed: 87 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@ import 'dart:typed_data';
88

99
import 'package:flutter_tools/src/base/logger.dart';
1010
import 'package:flutter_tools/src/daemon.dart';
11+
import 'package:flutter_tools/src/device.dart';
1112
import 'package:flutter_tools/src/proxied_devices/devices.dart';
1213
import 'package:test/fake.dart';
1314

1415
import '../../src/common.dart';
16+
import '../../src/fake_devices.dart';
1517

1618
void main() {
1719
late BufferLogger bufferLogger;
@@ -225,26 +227,45 @@ void main() {
225227
});
226228
});
227229

230+
final Map<String, Object> fakeDevice = <String, Object>{
231+
'name': 'device-name',
232+
'id': 'device-id',
233+
'category': 'mobile',
234+
'platformType': 'android',
235+
'platform': 'android-arm',
236+
'emulator': true,
237+
'ephemeral': false,
238+
'sdk': 'Test SDK (1.2.3)',
239+
'capabilities': <String, Object>{
240+
'hotReload': true,
241+
'hotRestart': true,
242+
'screenshot': false,
243+
'fastStart': false,
244+
'flutterExit': true,
245+
'hardwareRendering': true,
246+
'startPaused': true,
247+
},
248+
};
249+
final Map<String, Object> fakeDevice2 = <String, Object>{
250+
'name': 'device-name2',
251+
'id': 'device-id2',
252+
'category': 'mobile',
253+
'platformType': 'android',
254+
'platform': 'android-arm',
255+
'emulator': true,
256+
'ephemeral': false,
257+
'sdk': 'Test SDK (1.2.3)',
258+
'capabilities': <String, Object>{
259+
'hotReload': true,
260+
'hotRestart': true,
261+
'screenshot': false,
262+
'fastStart': false,
263+
'flutterExit': true,
264+
'hardwareRendering': true,
265+
'startPaused': true,
266+
},
267+
};
228268
group('ProxiedDevice', () {
229-
final Map<String, Object> fakeDevice = <String, Object>{
230-
'name': 'device-name',
231-
'id': 'device-id',
232-
'category': 'mobile',
233-
'platformType': 'android',
234-
'platform': 'android-arm',
235-
'emulator': true,
236-
'ephemeral': false,
237-
'sdk': 'Test SDK (1.2.3)',
238-
'capabilities': <String, Object>{
239-
'hotReload': true,
240-
'hotRestart': true,
241-
'screenshot': false,
242-
'fastStart': false,
243-
'flutterExit': true,
244-
'hardwareRendering': true,
245-
'startPaused': true,
246-
},
247-
};
248269
testWithoutContext('calls stopApp without application package if not passed', () async {
249270
bufferLogger = BufferLogger.test();
250271
final ProxiedDevices proxiedDevices = ProxiedDevices(
@@ -259,6 +280,42 @@ void main() {
259280
expect(message.data['params'], <String, Object?>{'deviceId': 'device-id', 'userIdentifier': 'user-id'});
260281
});
261282
});
283+
284+
group('ProxiedDevices', () {
285+
testWithoutContext('devices respects the filter passed in', () async {
286+
bufferLogger = BufferLogger.test();
287+
final ProxiedDevices proxiedDevices = ProxiedDevices(
288+
clientDaemonConnection,
289+
logger: bufferLogger,
290+
);
291+
292+
final FakeDeviceDiscoveryFilter fakeFilter = FakeDeviceDiscoveryFilter();
293+
294+
final FakeDevice supportedDevice = FakeDevice('Device', 'supported');
295+
fakeFilter.filteredDevices = <Device>[
296+
supportedDevice,
297+
];
298+
299+
final Future<List<Device>> resultFuture = proxiedDevices.devices(filter: fakeFilter);
300+
301+
final DaemonMessage message = await serverDaemonConnection.incomingCommands.first;
302+
expect(message.data['id'], isNotNull);
303+
expect(message.data['method'], 'device.discoverDevices');
304+
305+
serverDaemonConnection.sendResponse(message.data['id']!, <Map<String, Object?>>[
306+
fakeDevice,
307+
fakeDevice2,
308+
]);
309+
310+
final List<Device> result = await resultFuture;
311+
expect(result.length, 1);
312+
expect(result.first.id, supportedDevice.id);
313+
314+
expect(fakeFilter.devices!.length, 2);
315+
expect(fakeFilter.devices![0].id, fakeDevice['id']);
316+
expect(fakeFilter.devices![1].id, fakeDevice2['id']);
317+
});
318+
});
262319
}
263320

264321
class FakeDaemonStreams implements DaemonStreams {
@@ -373,3 +430,14 @@ class FakeDaemonConnection extends Fake implements DaemonConnection {
373430
throw Exception('"$method" request failed');
374431
}
375432
}
433+
434+
class FakeDeviceDiscoveryFilter extends Fake implements DeviceDiscoveryFilter {
435+
List<Device>? filteredDevices;
436+
List<Device>? devices;
437+
438+
@override
439+
Future<List<Device>> filterDevices(List<Device> devices) async {
440+
this.devices = devices;
441+
return filteredDevices!;
442+
}
443+
}

0 commit comments

Comments
 (0)