Commit 83bf5d10 authored by Dan Rubel's avatar Dan Rubel Committed by GitHub

fix getDeviceById to match exact name (#5657)

* fix getDeviceById to match exact name
fixes https://github.com/flutter/flutter/issues/5508
parent f6353b68
......@@ -39,13 +39,14 @@ class DeviceManager {
/// `null`.
///
/// This does a case insentitive compare with `deviceId`.
Future<Device> getDeviceById(String deviceId) async {
Future<Device> getDeviceById(String deviceId, [List<Device> devices]) async {
deviceId = deviceId.toLowerCase();
List<Device> devices = await getAllConnectedDevices();
devices ??= await getAllConnectedDevices();
Device device = devices.firstWhere(
(Device device) => device.id.toLowerCase() == deviceId,
orElse: () => null
);
(Device device) =>
device.id.toLowerCase() == deviceId ||
device.name.toLowerCase() == deviceId,
orElse: () => null);
if (device != null)
return device;
......
......@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:async';
import 'package:flutter_tools/src/device.dart';
import 'package:test/test.dart';
......@@ -15,5 +17,33 @@ void main() {
List<Device> devices = await deviceManager.getDevices();
expect(devices, isList);
});
testUsingContext('getDeviceById', () async {
DeviceManager deviceManager = new DeviceManager();
_MockDevice device1 = new _MockDevice('Nexus 5', '0553790d0a4e726f');
_MockDevice device2 = new _MockDevice('Nexus 5X', '01abfc49119c410e');
_MockDevice device3 = new _MockDevice('iPod touch', '82564b38861a9a5');
List<Device> devices = <Device>[device1, device2, device3];
Future<Null> expectDevice(String id, Device expected) async {
expect(await deviceManager.getDeviceById(id, devices), expected);
}
expectDevice('01abfc49119c410e', device2);
expectDevice('Nexus 5X', device2);
expectDevice('0553790d0a4e726f', device1);
expectDevice('Nexus 5', device1);
expectDevice('0553790', device1);
expectDevice('Nexus', null);
});
});
}
class _MockDevice extends Device {
@override
final String name;
_MockDevice(this.name, String id) : super(id);
@override
void noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
......@@ -82,7 +82,7 @@ class MockDeviceManager implements DeviceManager {
Future<List<Device>> getAllConnectedDevices() => new Future<List<Device>>.value(devices);
@override
Future<Device> getDeviceById(String deviceId) {
Future<Device> getDeviceById(String deviceId, [List<Device> _]) {
Device device = devices.firstWhere((Device device) => device.id == deviceId, orElse: () => null);
return new Future<Device>.value(device);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment