// 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. // 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:unittest/unittest.dart'; import "remote_unittest_helper.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)}'); } void main([args, port]) { if (testRemote(main, port)) { return; } test('message - reply chain', () async { final exitPort = ReceivePort(); final replyPort = ReceivePort(); final isolate = Isolate.spawn(isolateEntryPoint, ['hi', replyPort.sendPort], onExit: exitPort.sendPort); replyPort.listen((msg) { replyPort.close(); expect(msg, equals('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; }); }