/*
 * 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 same parameters as ProcessResult received after
 * completion Process.rumSync method, this two objects are not equal.
 * @author ngl@unipro.ru
 */
import "dart:io";
import "../../../Utils/expect.dart";

main() {
  String command = Platform.resolvedExecutable;
  List<String> args = ['--version'];
  ProcessResult processResult = Process.runSync(command, args);
  ProcessResult pr = new ProcessResult(processResult.pid,
      processResult.exitCode, processResult.stdout, processResult.stderr);
  Expect.isFalse(processResult == pr);
}
