daemon_test.dart 5.23 KB
Newer Older
Devon Carew's avatar
Devon Carew committed
1 2 3 4 5
// 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';
6
import 'dart:io';
Devon Carew's avatar
Devon Carew committed
7

8
import 'package:flutter_tools/src/base/context.dart';
9
import 'package:flutter_tools/src/base/logger.dart';
10
import 'package:flutter_tools/src/commands/daemon.dart';
11
import 'package:flutter_tools/src/device.dart';
12
import 'package:flutter_tools/src/doctor.dart';
13
import 'package:flutter_tools/src/globals.dart';
14
import 'package:flutter_tools/src/ios/mac.dart';
Devon Carew's avatar
Devon Carew committed
15
import 'package:mockito/mockito.dart';
Devon Carew's avatar
Devon Carew committed
16 17
import 'package:test/test.dart';

18
import 'src/context.dart';
Devon Carew's avatar
Devon Carew committed
19 20 21 22 23
import 'src/mocks.dart';

main() => defineTests();

defineTests() {
24 25 26 27 28 29 30 31 32
  Daemon daemon;
  AppContext appContext;
  NotifyingLogger notifyingLogger;

  void _testUsingContext(String description, dynamic testMethod()) {
    test(description, () {
      return appContext.runInZone(testMethod);
    });
  }
33

34
  group('daemon', () {
35
    setUp(() {
36 37 38
      appContext = new AppContext();
      notifyingLogger = new NotifyingLogger();
      appContext[Logger] = notifyingLogger;
39 40 41
      appContext[Doctor] = new Doctor();
      if (Platform.isMacOS)
        appContext[XCode] = new XCode();
42
      appContext[DeviceManager] = new MockDeviceManager();
43
    });
Devon Carew's avatar
Devon Carew committed
44 45 46 47 48 49

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

50
    _testUsingContext('daemon.version', () async {
51 52
      StreamController<Map<String, dynamic>> commands = new StreamController();
      StreamController<Map<String, dynamic>> responses = new StreamController();
Devon Carew's avatar
Devon Carew committed
53 54
      daemon = new Daemon(
        commands.stream,
55
        (Map<String, dynamic> result) => responses.add(result),
56
        notifyingLogger: notifyingLogger
Devon Carew's avatar
Devon Carew committed
57
      );
58
      commands.add({'id': 0, 'method': 'daemon.version'});
59
      Map response = await responses.stream.where(_notEvent).first;
Devon Carew's avatar
Devon Carew committed
60 61 62 63 64
      expect(response['id'], 0);
      expect(response['result'], isNotEmpty);
      expect(response['result'] is String, true);
    });

65
    _testUsingContext('daemon.logMessage', () {
66
      return appContext.runInZone(() async {
67 68 69 70 71
        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),
72
          notifyingLogger: notifyingLogger
73 74 75 76 77 78 79 80 81 82
        );
        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');
83
      });
84 85
    });

86
    _testUsingContext('daemon.shutdown', () async {
87 88
      StreamController<Map<String, dynamic>> commands = new StreamController();
      StreamController<Map<String, dynamic>> responses = new StreamController();
Devon Carew's avatar
Devon Carew committed
89 90
      daemon = new Daemon(
        commands.stream,
91
        (Map<String, dynamic> result) => responses.add(result),
92
        notifyingLogger: notifyingLogger
Devon Carew's avatar
Devon Carew committed
93
      );
94
      commands.add({'id': 0, 'method': 'daemon.shutdown'});
Devon Carew's avatar
Devon Carew committed
95 96 97 98 99
      return daemon.onExit.then((int code) {
        expect(code, 0);
      });
    });

100
    _testUsingContext('daemon.stopAll', () async {
Devon Carew's avatar
Devon Carew committed
101 102 103
      DaemonCommand command = new DaemonCommand();
      applyMocksToCommand(command);

104 105
      StreamController<Map<String, dynamic>> commands = new StreamController();
      StreamController<Map<String, dynamic>> responses = new StreamController();
Devon Carew's avatar
Devon Carew committed
106 107
      daemon = new Daemon(
        commands.stream,
108
        (Map<String, dynamic> result) => responses.add(result),
109
        daemonCommand: command,
110
        notifyingLogger: notifyingLogger
Devon Carew's avatar
Devon Carew committed
111 112 113 114 115 116 117 118 119 120 121 122 123
      );

      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);

124
      commands.add({'id': 0, 'method': 'app.stopAll'});
125
      Map response = await responses.stream.where(_notEvent).first;
Devon Carew's avatar
Devon Carew committed
126 127 128
      expect(response['id'], 0);
      expect(response['result'], true);
    });
129

130
    _testUsingContext('device.getDevices', () async {
131 132
      StreamController<Map<String, dynamic>> commands = new StreamController();
      StreamController<Map<String, dynamic>> responses = new StreamController();
133 134
      daemon = new Daemon(
        commands.stream,
135
        (Map<String, dynamic> result) => responses.add(result),
136
        notifyingLogger: notifyingLogger
137 138
      );
      commands.add({'id': 0, 'method': 'device.getDevices'});
139
      Map response = await responses.stream.where(_notEvent).first;
140 141 142
      expect(response['id'], 0);
      expect(response['result'], isList);
    });
Devon Carew's avatar
Devon Carew committed
143 144
  });
}
145 146

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