[flutter_tools] iOS VM Service logs should include stderr (#58551)
diff --git a/packages/flutter_tools/lib/src/ios/devices.dart b/packages/flutter_tools/lib/src/ios/devices.dart
index a381c5c..125b293 100644
--- a/packages/flutter_tools/lib/src/ios/devices.dart
+++ b/packages/flutter_tools/lib/src/ios/devices.dart
@@ -655,16 +655,25 @@
return;
}
try {
- await connectedVmService.streamListen('Stdout');
+ await Future.wait(<Future<void>>[
+ connectedVmService.streamListen(vm_service.EventStreams.kStdout),
+ connectedVmService.streamListen(vm_service.EventStreams.kStderr),
+ ]);
} on vm_service.RPCError {
// Do nothing, since the tool is already subscribed.
}
- _loggingSubscriptions.add(connectedVmService.onStdoutEvent.listen((vm_service.Event event) {
+
+ void logMessage(vm_service.Event event) {
final String message = utf8.decode(base64.decode(event.bytes));
if (message.isNotEmpty) {
_linesController.add(message);
}
- }));
+ }
+
+ _loggingSubscriptions.addAll(<StreamSubscription<void>>[
+ connectedVmService.onStdoutEvent.listen(logMessage),
+ connectedVmService.onStderrEvent.listen(logMessage),
+ ]);
}
void _listenToSysLog() {
diff --git a/packages/flutter_tools/test/general.shard/ios/ios_device_logger_test.dart b/packages/flutter_tools/test/general.shard/ios/ios_device_logger_test.dart
index bf2d789..bd95e87 100644
--- a/packages/flutter_tools/test/general.shard/ios/ios_device_logger_test.dart
+++ b/packages/flutter_tools/test/general.shard/ios/ios_device_logger_test.dart
@@ -153,25 +153,42 @@
logger: logger,
),
);
- final StreamController<Event> controller = StreamController<Event>();
+ final StreamController<Event> stdoutController = StreamController<Event>();
+ final StreamController<Event> stderController = StreamController<Event>();
final Completer<Success> stdoutCompleter = Completer<Success>();
+ final Completer<Success> stderrCompleter = Completer<Success>();
when(vmService.streamListen('Stdout')).thenAnswer((Invocation invocation) {
return stdoutCompleter.future;
});
+ when(vmService.streamListen('Stderr')).thenAnswer((Invocation invocation) {
+ return stderrCompleter.future;
+ });
when(vmService.onStdoutEvent).thenAnswer((Invocation invocation) {
- return controller.stream;
+ return stdoutController.stream;
+ });
+ when(vmService.onStderrEvent).thenAnswer((Invocation invocation) {
+ return stderController.stream;
});
logReader.connectedVMService = vmService;
stdoutCompleter.complete(Success());
- controller.add(Event(
+ stderrCompleter.complete(Success());
+ stdoutController.add(Event(
kind: 'Stdout',
timestamp: 0,
bytes: base64.encode(utf8.encode(' This is a message ')),
));
+ stderController.add(Event(
+ kind: 'Stderr',
+ timestamp: 0,
+ bytes: base64.encode(utf8.encode(' And this is an error ')),
+ ));
// Wait for stream listeners to fire.
- await expectLater(logReader.logLines, emits(' This is a message '));
+ await expectLater(logReader.logLines, emitsInAnyOrder(<Matcher>[
+ equals(' This is a message '),
+ equals(' And this is an error '),
+ ]));
});
}