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

// @dart = 2.9

import "dart:isolate";
import "dart:io";

void main(List<String> args) {
  if (args.contains("--child")) {
    new RawReceivePort(); // Hang if not killed.
    Isolate.current.kill(priority: Isolate.immediate);
    // No intervening call.
    throw "QQQ Should not be reached";
  } else {
    var exec = Platform.resolvedExecutable;
    var args = <String>[];
    args.addAll(Platform.executableArguments);
    args.add(Platform.script.toFilePath());
    args.add("--child");
    var result = Process.runSync(exec, args);
    if (result.exitCode != 255) {
      throw "Wrong exit code: ${result.exitCode}";
    }
    if (result.stderr.contains("QQQ Should not be reached")) {
      print(result.stderr);
      throw "Not killed synchronously";
    }
    if (!result.stderr.contains("isolate terminated by Isolate.kill")) {
      print(result.stderr);
      throw "Missing killed message";
    }
  }
}
