/*
 * 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 ProcessResult(int pid, int exitCode, stdout, stderr)
 *
 * @description Checks that if constructor [ProcessResult] creates a new object
 * of type ProcessResult with the same parameters as ProcessResult received
 * after completion Process.rum method, this two objects are not equal.
 * @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> processResult = Process.run(command, args);
  processResult.then((result) {
    ProcessResult pr = new ProcessResult(
        result.pid, result.exitCode, result.stdout, result.stderr);
    Expect.isFalse(processResult == pr);
  });
}
