// 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. library CountTest; import 'dart:isolate'; import 'package:unittest/unittest.dart'; import "remote_unittest_helper.dart"; void countMessages(replyTo) { int count = 0; var port = new ReceivePort(); replyTo.send(["init", port.sendPort]); port.listen((message) { if (message == -1) { expect(count, 10); replyTo.send(["done"]); port.close(); return; } count++; expect(message, count); replyTo.send(["count", message * 2]); }); } void main([args, port]) { if (testRemote(main, port)) return; test("count 10 consecutive messages", () { ReceivePort local = new ReceivePort(); Isolate.spawn(countMessages, local.sendPort); SendPort remote; int count = 0; var done = expectAsync(() {}); local.listen((msg) { switch (msg[0]) { case "init": expect(remote, null); remote = msg[1]; remote.send(++count); break; case "count": expect(msg[1], count * 2); if (count == 10) { remote.send(-1); } else { remote.send(++count); } break; case "done": expect(count, 10); local.close(); done(); break; default: fail("unreachable: ${msg[0]}"); } }); }); }