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

// @dart = 2.8

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';
import '../src/context.dart';

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

  testUsingContext('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;
  }
}
