| // 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=--no-enable-fast-object-copy | |
| // VMOptions=--enable-fast-object-copy | |
| library CountTest; | |
| import 'dart:isolate'; | |
| import 'package:expect/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]}"); | |
| } | |
| }); | |
| } |