// 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 'dart:io' as io; // ignore: dart_io_import
import 'package:flutter_tools/src/base/io.dart';
import 'package:flutter_tools/src/device_port_forwarder.dart';
import 'package:test/fake.dart';

import '../src/common.dart';

void main() {
  testWithoutContext('dispose does not throw exception if no process is present', () {
    final ForwardedPort forwardedPort = ForwardedPort(123, 456);
    expect(forwardedPort.context, isNull);
    forwardedPort.dispose();
  });

  testWithoutContext('dispose kills process if process was available', () {
    final FakeProcess process = FakeProcess();
    final ForwardedPort forwardedPort = ForwardedPort.withContext(123, 456, process);
    forwardedPort.dispose();

    expect(forwardedPort.context, isNotNull);
    expect(process.killed, true);
  });
}

class FakeProcess extends Fake implements Process {
  bool killed = false;

  @override
  bool kill([io.ProcessSignal signal =  io.ProcessSignal.sigterm])  {
    return killed = true;
  }
}
