// Copyright (c) 2014, 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:async";
import "package:expect/expect.dart";
import "package:async_helper/async_helper.dart";

isomain1(replyPort) {
  RawReceivePort port = new RawReceivePort();
  port.handler = (v) {
    replyPort.send(v);
    if (v == 0) port.close();
  };
  replyPort.send(port.sendPort);
}

void main() {
  asyncStart();
  var completer = new Completer(); // Completed by first reply from isolate.
  RawReceivePort reply = new RawReceivePort(completer.complete);
  Isolate.spawn(isomain1, reply.sendPort).then((Isolate isolate) {
    completer.future.then((_echoPort) {
      SendPort echoPort = _echoPort;
      List result = [];
      reply.handler = (v) {
        result.add(v);
        if (v == 2) {
          isolate.kill(priority: Isolate.immediate);
        }
        echoPort.send(v - 1);
      };
      RawReceivePort exitSignal;
      exitSignal = new RawReceivePort((_) {
        Expect.listEquals([4, 3, 2], result);
        exitSignal.close();
        reply.close();
        asyncEnd();
      });
      isolate.addOnExitListener(exitSignal.sendPort);
      echoPort.send(4);
    });
  });
}
