Files
sdk/tests/lib_2/isolate/spawn_function_custom_class_test.dart
T
Clement Skau de45a83755 [test] Makes spawn_function_custom_class_test more robust.
Adds exit port to spawned isolate to force main isolate and runtime
to wait until spawned isolate has completed.
This should improve potential flakiness stemming from racing.

Similar to:
- https://dart-review.googlesource.com/c/sdk/+/110913
- https://dart-review.googlesource.com/c/sdk/+/108410

Change-Id: I1055ca0e23f38bcfa67f485c5b810c39ef302dde
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/113820
Commit-Queue: Clement Skau <cskau@google.com>
Reviewed-by: Daco Harkes <dacoharkes@google.com>
2019-08-20 12:16:22 +00:00

52 lines
1.3 KiB
Dart

// 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;
});
}