event_printer.dart 1.12 KB
Newer Older
1 2 3 4
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

5
import 'dart:convert' show json;
6 7 8 9 10 11

import '../base/io.dart' show stdout;
import 'watcher.dart';

/// Prints JSON events when running a test in --machine mode.
class EventPrinter extends TestWatcher {
12
  EventPrinter({StringSink out}) : _out = out == null ? stdout: out;
13 14 15 16

  final StringSink _out;

  @override
17
  void handleStartedProcess(ProcessEvent event) {
18 19
    _sendEvent('test.startedProcess',
        <String, dynamic>{'observatoryUri': event.observatoryUri.toString()});
20 21 22 23 24 25 26 27 28 29 30
  }

  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) {
31
    final String encoded = json.encode(command, toEncodable: _jsonEncodeObject);
32 33 34 35 36 37 38 39 40 41
    _out.writeln('\n[$encoded]');
  }

  dynamic _jsonEncodeObject(dynamic object) {
    if (object is Uri) {
      return object.toString();
    }
    return object;
  }
}