Unverified Commit adead099 authored by Jenn Magder's avatar Jenn Magder Committed by GitHub

Always show diagnostics (#57532)

parent 67b0dbb4
...@@ -60,34 +60,39 @@ class DevicesCommand extends FlutterCommand { ...@@ -60,34 +60,39 @@ class DevicesCommand extends FlutterCommand {
if (boolArg('machine')) { if (boolArg('machine')) {
await printDevicesAsJson(devices); await printDevicesAsJson(devices);
} else if (devices.isEmpty) { } else {
final StringBuffer status = StringBuffer('No devices detected.'); if (devices.isEmpty) {
status.writeln(); final StringBuffer status = StringBuffer('No devices detected.');
status.writeln(); status.writeln();
status.writeln('Run "flutter emulators" to list and start any available device emulators.'); status.writeln();
status.writeln(); status.writeln('Run "flutter emulators" to list and start any available device emulators.');
status.write('If you expected your device to be detected, please run "flutter doctor" to diagnose potential issues. '); status.writeln();
if (timeout == null) { status.write('If you expected your device to be detected, please run "flutter doctor" to diagnose potential issues. ');
status.write('You may also try increasing the time to wait for connected devices with the --timeout flag. '); if (timeout == null) {
} status.write('You may also try increasing the time to wait for connected devices with the --timeout flag. ');
status.write('Visit https://flutter.dev/setup/ for troubleshooting tips.');
globals.printStatus(status.toString());
final List<String> diagnostics = await deviceManager.getDeviceDiagnostics();
if (diagnostics.isNotEmpty) {
globals.printStatus('');
for (final String diagnostic in diagnostics) {
globals.printStatus('• $diagnostic', hangingIndent: 2);
} }
status.write('Visit https://flutter.dev/setup/ for troubleshooting tips.');
globals.printStatus(status.toString());
} else {
globals.printStatus('${devices.length} connected ${pluralize('device', devices.length)}:\n');
await Device.printDevices(devices);
} }
} else { await _printDiagnostics();
globals.printStatus('${devices.length} connected ${pluralize('device', devices.length)}:\n');
await Device.printDevices(devices);
} }
return FlutterCommandResult.success(); return FlutterCommandResult.success();
} }
Future<void> _printDiagnostics() async {
final List<String> diagnostics = await deviceManager.getDeviceDiagnostics();
if (diagnostics.isNotEmpty) {
globals.printStatus('');
for (final String diagnostic in diagnostics) {
globals.printStatus('• $diagnostic', hangingIndent: 2);
}
}
}
Future<void> printDevicesAsJson(List<Device> devices) async { Future<void> printDevicesAsJson(List<Device> devices) async {
globals.printStatus( globals.printStatus(
const JsonEncoder.withIndent(' ').convert( const JsonEncoder.withIndent(' ').convert(
......
...@@ -84,6 +84,25 @@ void main() { ...@@ -84,6 +84,25 @@ void main() {
DeviceManager: () => _FakeDeviceManager(), DeviceManager: () => _FakeDeviceManager(),
ProcessManager: () => MockProcessManager(), ProcessManager: () => MockProcessManager(),
}); });
testUsingContext('available devices and diagnostics', () async {
final DevicesCommand command = DevicesCommand();
await createTestCommandRunner(command).run(<String>['devices']);
expect(
testLogger.statusText,
'''
2 connected devices:
ephemeral • ephemeral • android-arm • Test SDK (1.2.3) (emulator)
webby • webby • web-javascript • Web SDK (1.2.4) (emulator)
• Cannot connect to device ABC
'''
);
}, overrides: <Type, Generator>{
DeviceManager: () => _FakeDeviceManager(),
ProcessManager: () => MockProcessManager(),
});
}); });
} }
...@@ -126,4 +145,8 @@ class _FakeDeviceManager extends DeviceManager { ...@@ -126,4 +145,8 @@ class _FakeDeviceManager extends DeviceManager {
Future<List<Device>> refreshAllConnectedDevices({Duration timeout}) => Future<List<Device>> refreshAllConnectedDevices({Duration timeout}) =>
getAllConnectedDevices(); getAllConnectedDevices();
@override
Future<List<String>> getDeviceDiagnostics() => Future<List<String>>.value(
<String>['Cannot connect to device ABC']
);
} }
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