/*
 * 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 void exit(int code)
 * This does not wait for any asynchronous operations to terminate. Using [exit]
 * is therefore very likely to lose data.
 * @description Checks that data will be lost if [exit] was called during some
 * asynchronous operation.
 * @author iarkh@unipro.ru
 */
import "../../../Utils/expect.dart";
import "dart:async";
import "dart:io";

run_process() {
  new Future.delayed(new Duration(seconds: 2)).then((_) {
    print("Hello, World!");
  });
  exit(123);
}

run_main() async {
  String executable = Platform.resolvedExecutable;
  String eScript = Platform.script.toString();
  int called = 0;
  await Process.run(
          executable, [...Platform.executableArguments, eScript, "run"])
      .then((ProcessResult results) {
    Expect.equals(123, results.exitCode);
    Expect.isFalse(results.stdout.contains("Hello, World!"));
    called++;
  });
  if (called != 1) {
    throw new Exception("Called must be <1> but actually <$called>");
  }
  Expect.equals(1, called);
}

main(List<String> args) {
  if (args.length > 0)
    run_process();
  else {
    run_main();
  }
}
