2019-11-27 23:04:02 +00:00
|
|
|
// Copyright 2014 The Flutter Authors. All rights reserved.
|
2015-09-30 22:24:39 +00:00
|
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
|
|
// found in the LICENSE file.
|
|
|
|
|
2021-01-27 23:17:53 +00:00
|
|
|
// @dart = 2.8
|
|
|
|
|
2017-05-09 00:57:20 +00:00
|
|
|
import 'dart:convert';
|
|
|
|
|
2016-02-13 20:00:41 +00:00
|
|
|
import 'package:flutter_tools/src/android/android_sdk.dart';
|
2020-06-24 23:45:46 +00:00
|
|
|
import 'package:flutter_tools/src/artifacts.dart';
|
2017-03-10 17:39:01 +00:00
|
|
|
import 'package:flutter_tools/src/cache.dart';
|
2016-02-14 07:50:20 +00:00
|
|
|
import 'package:flutter_tools/src/commands/devices.dart';
|
2016-02-13 20:00:41 +00:00
|
|
|
import 'package:flutter_tools/src/device.dart';
|
2020-07-17 16:41:03 +00:00
|
|
|
import 'package:flutter_tools/src/globals.dart' as globals;
|
2021-02-08 17:21:46 +00:00
|
|
|
import 'package:process/process.dart';
|
2015-09-30 22:24:39 +00:00
|
|
|
|
2019-07-13 18:51:44 +00:00
|
|
|
import '../../src/common.dart';
|
|
|
|
import '../../src/context.dart';
|
2020-04-09 16:14:16 +00:00
|
|
|
import '../../src/fake_devices.dart';
|
2015-09-30 22:24:39 +00:00
|
|
|
|
2016-03-10 01:43:14 +00:00
|
|
|
void main() {
|
2016-02-14 07:50:20 +00:00
|
|
|
group('devices', () {
|
2017-03-10 17:39:01 +00:00
|
|
|
setUpAll(() {
|
|
|
|
Cache.disableLocking();
|
|
|
|
});
|
|
|
|
|
2020-09-30 21:53:57 +00:00
|
|
|
Cache cache;
|
2020-06-24 23:45:46 +00:00
|
|
|
|
|
|
|
setUp(() {
|
2020-09-30 21:53:57 +00:00
|
|
|
cache = Cache.test();
|
2020-06-24 23:45:46 +00:00
|
|
|
});
|
|
|
|
|
2016-11-14 19:21:30 +00:00
|
|
|
testUsingContext('returns 0 when called', () async {
|
2018-09-12 06:29:29 +00:00
|
|
|
final DevicesCommand command = DevicesCommand();
|
2016-11-14 19:21:30 +00:00
|
|
|
await createTestCommandRunner(command).run(<String>['devices']);
|
2020-06-24 23:45:46 +00:00
|
|
|
}, overrides: <Type, Generator>{
|
|
|
|
Cache: () => cache,
|
|
|
|
Artifacts: () => Artifacts.test(),
|
2016-02-13 20:00:41 +00:00
|
|
|
});
|
2015-10-12 02:42:50 +00:00
|
|
|
|
2016-11-14 19:21:30 +00:00
|
|
|
testUsingContext('no error when no connected devices', () async {
|
2018-09-12 06:29:29 +00:00
|
|
|
final DevicesCommand command = DevicesCommand();
|
2016-11-14 19:21:30 +00:00
|
|
|
await createTestCommandRunner(command).run(<String>['devices']);
|
2020-04-28 20:12:12 +00:00
|
|
|
expect(testLogger.statusText, containsIgnoringWhitespace('No devices detected'));
|
2016-11-30 16:42:42 +00:00
|
|
|
}, overrides: <Type, Generator>{
|
|
|
|
AndroidSdk: () => null,
|
2020-06-24 18:26:36 +00:00
|
|
|
DeviceManager: () => NoDevicesManager(),
|
2021-01-27 19:17:29 +00:00
|
|
|
ProcessManager: () => FakeProcessManager.any(),
|
2020-06-24 23:45:46 +00:00
|
|
|
Cache: () => cache,
|
|
|
|
Artifacts: () => Artifacts.test(),
|
2015-09-30 22:24:39 +00:00
|
|
|
});
|
2020-04-09 16:14:16 +00:00
|
|
|
|
2020-06-03 23:14:38 +00:00
|
|
|
testUsingContext('get devices\' platform types', () async {
|
|
|
|
final List<String> platformTypes = Device.devicesPlatformTypes(
|
2020-07-17 16:41:03 +00:00
|
|
|
await globals.deviceManager.getAllConnectedDevices(),
|
2020-06-03 23:14:38 +00:00
|
|
|
);
|
|
|
|
expect(platformTypes, <String>['android', 'web']);
|
|
|
|
}, overrides: <Type, Generator>{
|
|
|
|
DeviceManager: () => _FakeDeviceManager(),
|
2021-01-27 19:17:29 +00:00
|
|
|
ProcessManager: () => FakeProcessManager.any(),
|
2020-06-24 23:45:46 +00:00
|
|
|
Cache: () => cache,
|
|
|
|
Artifacts: () => Artifacts.test(),
|
2020-06-03 23:14:38 +00:00
|
|
|
});
|
|
|
|
|
2020-04-09 16:14:16 +00:00
|
|
|
testUsingContext('Outputs parsable JSON with --machine flag', () async {
|
|
|
|
final DevicesCommand command = DevicesCommand();
|
|
|
|
await createTestCommandRunner(command).run(<String>['devices', '--machine']);
|
|
|
|
expect(
|
|
|
|
json.decode(testLogger.statusText),
|
|
|
|
<Map<String,Object>>[
|
|
|
|
<String, Object>{
|
|
|
|
'name': 'ephemeral',
|
|
|
|
'id': 'ephemeral',
|
|
|
|
'isSupported': true,
|
|
|
|
'targetPlatform': 'android-arm',
|
|
|
|
'emulator': true,
|
|
|
|
'sdk': 'Test SDK (1.2.3)',
|
|
|
|
'capabilities': <String, Object>{
|
|
|
|
'hotReload': true,
|
|
|
|
'hotRestart': true,
|
|
|
|
'screenshot': false,
|
|
|
|
'fastStart': false,
|
|
|
|
'flutterExit': true,
|
|
|
|
'hardwareRendering': true,
|
|
|
|
'startPaused': true
|
|
|
|
}
|
|
|
|
},
|
|
|
|
<String,Object>{
|
|
|
|
'name': 'webby',
|
|
|
|
'id': 'webby',
|
|
|
|
'isSupported': true,
|
|
|
|
'targetPlatform': 'web-javascript',
|
|
|
|
'emulator': true,
|
|
|
|
'sdk': 'Web SDK (1.2.4)',
|
|
|
|
'capabilities': <String, Object>{
|
|
|
|
'hotReload': true,
|
|
|
|
'hotRestart': true,
|
|
|
|
'screenshot': false,
|
|
|
|
'fastStart': false,
|
|
|
|
'flutterExit': true,
|
2020-06-08 18:20:15 +00:00
|
|
|
'hardwareRendering': true,
|
2020-04-09 16:14:16 +00:00
|
|
|
'startPaused': true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
]
|
|
|
|
);
|
|
|
|
}, overrides: <Type, Generator>{
|
|
|
|
DeviceManager: () => _FakeDeviceManager(),
|
2021-01-27 19:17:29 +00:00
|
|
|
ProcessManager: () => FakeProcessManager.any(),
|
2020-06-24 23:45:46 +00:00
|
|
|
Cache: () => cache,
|
|
|
|
Artifacts: () => Artifacts.test(),
|
2020-04-09 16:14:16 +00:00
|
|
|
});
|
2020-05-20 01:17:03 +00:00
|
|
|
|
|
|
|
testUsingContext('available devices and diagnostics', () async {
|
|
|
|
final DevicesCommand command = DevicesCommand();
|
|
|
|
await createTestCommandRunner(command).run(<String>['devices']);
|
|
|
|
expect(
|
|
|
|
testLogger.statusText,
|
|
|
|
'''
|
|
|
|
2 connected devices:
|
|
|
|
|
2020-06-30 18:28:02 +00:00
|
|
|
ephemeral (mobile) • ephemeral • android-arm • Test SDK (1.2.3) (emulator)
|
|
|
|
webby (mobile) • webby • web-javascript • Web SDK (1.2.4) (emulator)
|
2020-05-20 01:17:03 +00:00
|
|
|
|
|
|
|
• Cannot connect to device ABC
|
|
|
|
'''
|
|
|
|
);
|
|
|
|
}, overrides: <Type, Generator>{
|
|
|
|
DeviceManager: () => _FakeDeviceManager(),
|
2021-01-27 19:17:29 +00:00
|
|
|
ProcessManager: () => FakeProcessManager.any(),
|
2020-05-20 01:17:03 +00:00
|
|
|
});
|
2015-09-30 22:24:39 +00:00
|
|
|
});
|
|
|
|
}
|
2017-05-09 00:57:20 +00:00
|
|
|
|
2020-04-09 16:14:16 +00:00
|
|
|
class _FakeDeviceManager extends DeviceManager {
|
|
|
|
_FakeDeviceManager();
|
|
|
|
|
|
|
|
@override
|
|
|
|
Future<List<Device>> getAllConnectedDevices() =>
|
|
|
|
Future<List<Device>>.value(fakeDevices.map((FakeDeviceJsonData d) => d.dev).toList());
|
|
|
|
|
|
|
|
@override
|
|
|
|
Future<List<Device>> refreshAllConnectedDevices({Duration timeout}) =>
|
|
|
|
getAllConnectedDevices();
|
|
|
|
|
2020-05-20 01:17:03 +00:00
|
|
|
@override
|
|
|
|
Future<List<String>> getDeviceDiagnostics() => Future<List<String>>.value(
|
|
|
|
<String>['Cannot connect to device ABC']
|
|
|
|
);
|
2020-07-09 01:07:27 +00:00
|
|
|
|
|
|
|
@override
|
|
|
|
List<DeviceDiscovery> get deviceDiscoverers => <DeviceDiscovery>[];
|
2020-04-09 16:14:16 +00:00
|
|
|
}
|
2020-06-24 18:26:36 +00:00
|
|
|
|
|
|
|
class NoDevicesManager extends DeviceManager {
|
|
|
|
@override
|
|
|
|
Future<List<Device>> getAllConnectedDevices() async => <Device>[];
|
|
|
|
|
|
|
|
@override
|
|
|
|
Future<List<Device>> refreshAllConnectedDevices({Duration timeout}) =>
|
|
|
|
getAllConnectedDevices();
|
2020-07-09 01:07:27 +00:00
|
|
|
|
|
|
|
@override
|
|
|
|
List<DeviceDiscovery> get deviceDiscoverers => <DeviceDiscovery>[];
|
2020-06-24 18:26:36 +00:00
|
|
|
}
|