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

// @dart = 2.9

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

import "dart:isolate";
import "package:expect/expect.dart";

class _Private {
  String data;
  _Private(this.data);
}

void child(message) {
  print("Got message: $message");
  SendPort replyPort = message[0];
  _Private object = message[1];
  Expect.isTrue(object is _Private);
  Expect.equals("XYZ", object.data);
  replyPort.send(object);
}

void main() {
  var port;
  port = new RawReceivePort((message) {
    print("Got reply: $message");
    Expect.isTrue(message is _Private);
    Expect.equals("XYZ", message.data);
    port.close();
  });

  Isolate.spawn(child, [port.sendPort, new _Private("XYZ")]);
}
