// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

/// @assertion int exitCode
///
/// Exit code for the process.
///
/// @description Checks that if constructor ProcessResult creates a new object
/// with the same parameters as ProcessResult received after completion
/// Process.run method, [exitCode] of new object returns int value not equal 0
/// when the process was not completed successfully.
///
/// @author ngl@unipro.ru

import "dart:async";
import "dart:io";
import "../../../Utils/expect.dart";

main() {
  String command = Platform.resolvedExecutable;
  List<String> args = ['--version'];
  Future<ProcessResult> fProcessResult = Process.run(command, args);
  fProcessResult.then((ProcessResult result) {
    ProcessResult pr = new ProcessResult(
        result.pid, result.exitCode, result.stdout, result.stderr);
    Expect.equals(0, pr.exitCode);
  });
}
