// Copyright (c) 2017, 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. // VMOptions=--enable-isolate-groups --experimental-enable-isolate-groups-jit // VMOptions=--no-enable-isolate-groups // Dart test program for testing serialization of messages with static // native functions. library MessageTest; import 'dart:async'; import 'dart:collection'; import 'dart:isolate'; import 'package:async_helper/async_helper.dart'; import 'package:expect/expect.dart'; void echoMain(msg) { SendPort replyTo = msg[0]; SendPort pong = msg[1]; ReceivePort port = new ReceivePort(); replyTo.send(port.sendPort); port.listen((msg) { if (msg == "halt") { port.close(); } else { pong.send(msg); } }); } void runTests(SendPort ping, Queue checks) { ping.send("abc"); checks.add((x) => Expect.equals("abc", x)); ping.send(int.parse); checks.add((x) => Expect.identical(int.parse, x)); ping.send(identityHashCode); checks.add((x) => Expect.identical(identityHashCode, x)); ping.send(identical); checks.add((x) => Expect.identical(identical, x)); } main() async { asyncStart(); Queue checks = new Queue(); ReceivePort testPort = new ReceivePort(); Completer completer = new Completer(); testPort.listen((msg) { Function check = checks.removeFirst(); check(msg); if (checks.isEmpty) { completer.complete(); testPort.close(); } }); ReceivePort initialReplyPort = new ReceivePort(); Isolate i = await Isolate.spawn( echoMain, [initialReplyPort.sendPort, testPort.sendPort]); SendPort ping = await initialReplyPort.first; runTests(ping, checks); Expect.isTrue(checks.length > 0); await completer.future; ping.send("halt"); asyncEnd(); }