/*
 * Copyright (c) 2016, 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 If the errorAreFatal, onExit and/or onError parameters are
 * provided, the isolate will act as if, respectively, setErrorsFatal,
 * addOnExitListener and addErrorListener were called with the corresponding
 * parameter and was processed before the isolate starts running.
 *
 * @description Check that if onExit parameter is supplied, the isolate sends
 * null value on given send port. The isolate is terminated with error.
 * @author a.semenov@unipro.ru
 */
import "dart:isolate";
import "../../../Utils/expect.dart";

main() {
  asyncStart();
  ReceivePort exitPort = new ReceivePort();
  exitPort.listen((value) {
    exitPort.close();
    Expect.isNull(value);
    asyncEnd();
  });

  Isolate.spawnUri(new Uri.file("spawnUri_A06_t03_isolate.dart"), [], null,
      errorsAreFatal: true, onExit: exitPort.sendPort);
}
