// 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. // VMOptions=--enable-isolate-groups --experimental-enable-isolate-groups-jit // VMOptions=--no-enable-isolate-groups library CountTest; import 'dart:isolate'; import 'package:async_helper/async_helper.dart'; import 'package:expect/expect.dart'; void countMessages(replyTo) { int count = 0; var port = new ReceivePort(); replyTo.send(["init", port.sendPort]); port.listen((_message) { int message = _message; if (message == -1) { Expect.equals(count, 10); replyTo.send(["done"]); port.close(); return; } count++; Expect.equals(message, count); replyTo.send(["count", message * 2]); }); } void main([args, port]) { //testRemote(main, port); ReceivePort local = new ReceivePort(); Isolate.spawn(countMessages, local.sendPort); SendPort? remote; int count = 0; asyncStart(); local.listen((msg) { switch (msg[0]) { case "init": Expect.equals(remote, null); remote = msg[1]; remote!.send(++count); break; case "count": Expect.equals(msg[1], count * 2); if (count == 10) { remote!.send(-1); } else { remote!.send(++count); } break; case "done": Expect.equals(count, 10); local.close(); asyncEnd(); break; default: Expect.fail("unreachable: ${msg[0]}"); } }); }