daemon_test.dart 4.44 KB
Newer Older
Devon Carew's avatar
Devon Carew committed
1 2 3 4 5 6
// Copyright 2015 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.

import 'dart:async';

7
import 'package:flutter_tools/src/base/context.dart';
8
import 'package:flutter_tools/src/commands/daemon.dart';
Devon Carew's avatar
Devon Carew committed
9
import 'package:mockito/mockito.dart';
Devon Carew's avatar
Devon Carew committed
10 11 12 13 14 15 16 17 18
import 'package:test/test.dart';

import 'src/mocks.dart';

main() => defineTests();

defineTests() {
  group('daemon', () {
    Daemon daemon;
19 20 21 22 23
    NotifyingAppContext appContext;

    setUp(() {
      appContext = new NotifyingAppContext();
    });
Devon Carew's avatar
Devon Carew committed
24 25 26 27 28 29 30

    tearDown(() {
      if (daemon != null)
        return daemon.shutdown();
    });

    test('daemon.version', () async {
31 32
      StreamController<Map<String, dynamic>> commands = new StreamController();
      StreamController<Map<String, dynamic>> responses = new StreamController();
Devon Carew's avatar
Devon Carew committed
33 34
      daemon = new Daemon(
        commands.stream,
35 36
        (Map<String, dynamic> result) => responses.add(result),
        appContext: appContext
Devon Carew's avatar
Devon Carew committed
37
      );
38
      commands.add({'id': 0, 'method': 'daemon.version'});
39
      Map response = await responses.stream.where(_notEvent).first;
Devon Carew's avatar
Devon Carew committed
40 41 42 43 44
      expect(response['id'], 0);
      expect(response['result'], isNotEmpty);
      expect(response['result'] is String, true);
    });

45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
    test('daemon.logMessage', () {
      return runZoned(() async {
        StreamController<Map<String, dynamic>> commands = new StreamController();
        StreamController<Map<String, dynamic>> responses = new StreamController();
        daemon = new Daemon(
          commands.stream,
          (Map<String, dynamic> result) => responses.add(result),
          appContext: appContext
        );
        printError('daemon.logMessage test');
        Map<String, dynamic> response = await responses.stream.where((Map<String, dynamic> map) {
          return map['event'] == 'daemon.logMessage' && map['params']['level'] == 'error';
        }).first;
        expect(response['id'], isNull);
        expect(response['event'], 'daemon.logMessage');
        Map<String, String> logMessage = response['params'];
        expect(logMessage['level'], 'error');
        expect(logMessage['message'], 'daemon.logMessage test');
      }, zoneValues: {'context': appContext});
64 65
    });

Devon Carew's avatar
Devon Carew committed
66
    test('daemon.shutdown', () async {
67 68
      StreamController<Map<String, dynamic>> commands = new StreamController();
      StreamController<Map<String, dynamic>> responses = new StreamController();
Devon Carew's avatar
Devon Carew committed
69 70
      daemon = new Daemon(
        commands.stream,
71 72
        (Map<String, dynamic> result) => responses.add(result),
        appContext: appContext
Devon Carew's avatar
Devon Carew committed
73
      );
74
      commands.add({'id': 0, 'method': 'daemon.shutdown'});
Devon Carew's avatar
Devon Carew committed
75 76 77 78 79 80 81 82 83
      return daemon.onExit.then((int code) {
        expect(code, 0);
      });
    });

    test('daemon.stopAll', () async {
      DaemonCommand command = new DaemonCommand();
      applyMocksToCommand(command);

84 85
      StreamController<Map<String, dynamic>> commands = new StreamController();
      StreamController<Map<String, dynamic>> responses = new StreamController();
Devon Carew's avatar
Devon Carew committed
86 87
      daemon = new Daemon(
        commands.stream,
88
        (Map<String, dynamic> result) => responses.add(result),
89 90
        daemonCommand: command,
        appContext: appContext
Devon Carew's avatar
Devon Carew committed
91 92 93 94 95 96 97 98 99 100 101 102 103
      );

      MockDeviceStore mockDevices = command.devices;

      when(mockDevices.android.isConnected()).thenReturn(true);
      when(mockDevices.android.stopApp(any)).thenReturn(true);

      when(mockDevices.iOS.isConnected()).thenReturn(false);
      when(mockDevices.iOS.stopApp(any)).thenReturn(false);

      when(mockDevices.iOSSimulator.isConnected()).thenReturn(false);
      when(mockDevices.iOSSimulator.stopApp(any)).thenReturn(false);

104
      commands.add({'id': 0, 'method': 'app.stopAll'});
105
      Map response = await responses.stream.where(_notEvent).first;
Devon Carew's avatar
Devon Carew committed
106 107 108
      expect(response['id'], 0);
      expect(response['result'], true);
    });
109 110

    test('device.getDevices', () async {
111 112
      StreamController<Map<String, dynamic>> commands = new StreamController();
      StreamController<Map<String, dynamic>> responses = new StreamController();
113 114
      daemon = new Daemon(
        commands.stream,
115 116
        (Map<String, dynamic> result) => responses.add(result),
        appContext: appContext
117 118
      );
      commands.add({'id': 0, 'method': 'device.getDevices'});
119
      Map response = await responses.stream.where(_notEvent).first;
120 121 122
      expect(response['id'], 0);
      expect(response['result'], isList);
    });
Devon Carew's avatar
Devon Carew committed
123 124
  });
}
125 126

bool _notEvent(Map<String, dynamic> map) => map['event'] == null;