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

// Create a user-defined class in a new isolate.
//
// Regression test for vm bug 2235: We were forgetting to finalize
// classes in new isolates started using the v2 api.

library spawn_tests;

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

class MyClass {
  final myVar = 'there';
  myFunc(msg) {
    return '$msg $myVar';
  }
}

isolateEntryPoint(args) {
  final reply = args[1];
  final msg = args[0];
  reply.send('re: ${new MyClass().myFunc(msg)}');
}

Future<void> main([args, port]) async {
  // message - reply chain'
  final exitPort = ReceivePort();
  final replyPort = ReceivePort();

  Isolate.spawn(isolateEntryPoint, ['hi', replyPort.sendPort],
      onExit: exitPort.sendPort);

  replyPort.listen((msg) {
    replyPort.close();
    Expect.equals(msg, 're: hi there');
  });

  // Explicitly await spawned isolate exit to enforce main isolate not
  // completing (and the stand-alone runtime exiting) before the spawned
  // isolate is done.
  await exitPort.first;
}
