| // Copyright 2014 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import '../convert.dart'; |
| |
| import 'test_device.dart'; |
| import 'watcher.dart'; |
| |
| /// Prints JSON events when running a test in --machine mode. |
| class EventPrinter extends TestWatcher { |
| EventPrinter({required StringSink out, TestWatcher? parent}) |
| : _out = out, |
| _parent = parent; |
| |
| final StringSink _out; |
| final TestWatcher? _parent; |
| |
| @override |
| void handleStartedDevice(Uri? vmServiceUri) { |
| _sendEvent('test.startedProcess', |
| <String, dynamic>{ |
| 'vmServiceUri': vmServiceUri?.toString(), |
| // TODO(bkonyi): remove references to Observatory |
| // See https://github.com/flutter/flutter/issues/121271 |
| 'observatoryUri': vmServiceUri?.toString() |
| }); |
| _parent?.handleStartedDevice(vmServiceUri); |
| } |
| |
| @override |
| Future<void> handleTestCrashed(TestDevice testDevice) async { |
| return _parent?.handleTestCrashed(testDevice); |
| } |
| |
| @override |
| Future<void> handleTestTimedOut(TestDevice testDevice) async { |
| return _parent?.handleTestTimedOut(testDevice); |
| } |
| |
| @override |
| Future<void> handleFinishedTest(TestDevice testDevice) async { |
| return _parent?.handleFinishedTest(testDevice); |
| } |
| |
| void _sendEvent(String name, [ dynamic params ]) { |
| final Map<String, dynamic> map = <String, dynamic>{'event': name}; |
| if (params != null) { |
| map['params'] = params; |
| } |
| _send(map); |
| } |
| |
| void _send(Map<String, dynamic> command) { |
| final String encoded = json.encode(command, toEncodable: _jsonEncodeObject); |
| _out.writeln('\n[$encoded]'); |
| } |
| |
| dynamic _jsonEncodeObject(dynamic object) { |
| if (object is Uri) { |
| return object.toString(); |
| } |
| return object; |
| } |
| } |