// 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.

import 'dart:async';
import 'dart:io' as io;

import 'package:flutter_tools/src/base/io.dart';
import 'package:mockito/mockito.dart';
import 'package:test/test.dart';

import '../src/context.dart';

void main() {
  group('ProcessSignal', () {

    testUsingContext('signals are properly delegated', () async {
      final MockIoProcessSignal mockSignal = new MockIoProcessSignal();
      final ProcessSignal signalUnderTest = new ProcessSignal(mockSignal);
      final StreamController<io.ProcessSignal> controller = new StreamController<io.ProcessSignal>();

      when(mockSignal.watch()).thenAnswer((Invocation invocation) => controller.stream);
      controller.add(mockSignal);

      expect(signalUnderTest, await signalUnderTest.watch().first);
    });

    testUsingContext('toString() works', () async {
      expect(io.ProcessSignal.SIGINT.toString(), ProcessSignal.SIGINT.toString());
    });
  });
}

class MockIoProcessSignal extends Mock implements io.ProcessSignal {}
