// Copyright (c) 2012, 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

// VMOptions=--enable-isolate-groups --experimental-enable-isolate-groups-jit
// VMOptions=--no-enable-isolate-groups

library RequestReplyTest;

import 'dart:isolate';
import 'package:async_helper/async_helper.dart';
import 'package:expect/expect.dart';

void entry(initPort) {
  ReceivePort port = new ReceivePort();
  initPort.send(port.sendPort);
  port.listen((pair) {
    var message = pair[0];
    SendPort replyTo = pair[1];
    replyTo.send(message + 87);
    port.close();
  });
}

void main([args, port]) {
  ReceivePort init = new ReceivePort();
  Isolate.spawn(entry, init.sendPort);
  asyncStart();
  init.first.then((port) {
    ReceivePort reply = new ReceivePort();
    port.send([99, reply.sendPort]);
    reply.listen((message) {
      Expect.equals(message, 99 + 87);
      reply.close();
      asyncEnd();
    });
  });
}
