Index: tests/isolate/cross_isolate_message_test.dart |
diff --git a/tests/isolate/cross_isolate_message_test.dart b/tests/isolate/cross_isolate_message_test.dart |
index 41b2c7ae1141acbb18790d675802b2f933e68d3a..358643e2c2845850849429d65d684b60c2046909 100644 |
--- a/tests/isolate/cross_isolate_message_test.dart |
+++ b/tests/isolate/cross_isolate_message_test.dart |
@@ -9,51 +9,51 @@ library CrossIsolateMessageTest; |
import 'dart:isolate'; |
import '../../pkg/unittest/lib/unittest.dart'; |
-void crossIsolate1() { |
- port.receive((msg, replyTo) { |
- SendPort otherIsolate = msg; |
- ReceivePort receivePort = new ReceivePort(); |
- receivePort.receive((msg, replyTo) { |
- otherIsolate.send(msg + 58, null); // 100. |
- receivePort.close(); |
- }); |
- replyTo.send(['ready', receivePort.toSendPort()]); |
- port.close(); |
+/* |
+ * Everything starts in the main-isolate (in the main-method). |
+ * The main isolate spawns two isolates: isolate1 (with entry point |
+ * 'crossIsolate1') and isolate2 (with entry point 'crossIsolate2'). |
+ * |
+ * The main isolate creates two isolates, isolate1 and isolate2. |
+ * The second isolate is created with a send-port being listened on by |
+ * isolate1. A message is passed along this from isolate2 to isolate1. |
+ * Isolate1 then sends the result back to the main isolate for final checking. |
+ */ |
+ |
+void crossIsolate1(SendPort mainIsolate) { |
+ ReceivePort local = new ReceivePort(); |
+ mainIsolate.send(["ready1", local.sendPort]); |
+ local.first.then((msg) { |
+ // Message from crossIsolate2 |
+ expect(msg[0], "fromIsolate2"); |
+ mainIsolate.send(["fromIsolate1", msg[1] + 58]); // 100. |
+ local.close(); |
}); |
} |
-// crossIsolate2 is nearly the same as crossIsolate1, but contains a |
-// different constant. |
-void crossIsolate2() { |
- port.receive((msg, replyTo) { |
- SendPort mainIsolate = msg; |
- ReceivePort receivePort = new ReceivePort(); |
- receivePort.receive((msg, replyTo) { |
- mainIsolate.send(msg + 399, null); // 499. |
- receivePort.close(); |
- }); |
- replyTo.send(['ready', receivePort.toSendPort()]); |
- port.close(); |
- }); |
+void crossIsolate2(SendPort toIsolate1) { |
+ toIsolate1.send(["fromIsolate2", 42]); |
} |
main() { |
- test("share port, and send message cross isolates ", () { |
- SendPort port1 = spawnFunction(crossIsolate1); |
- SendPort port2 = spawnFunction(crossIsolate2); |
- // Create a new receive port and send it to isolate2. |
- ReceivePort myPort = new ReceivePort(); |
- port2.call(myPort.toSendPort()).then(expectAsync1((msg) { |
- expect(msg[0], "ready"); |
- // Send port of isolate2 to isolate1. |
- port1.call(msg[1]).then(expectAsync1((msg) { |
- expect(msg[0], "ready"); |
- myPort.receive(expectAsync2((msg, replyTo) { |
- expect(msg, 499); |
- myPort.close(); |
- })); |
- msg[1].send(42, null); |
- })); |
- })); |
+ test("send message cross isolates ", () { |
+ ReceivePort fromIsolate1 = new ReceivePort(); |
+ Isolate.spawn(crossIsolate1, fromIsolate1.sendPort); |
+ var done = expectAsync0((){}); |
+ fromIsolate1.listen((msg) { |
+ print(msg[0]); |
+ switch (msg[0]) { |
+ case "ready1": |
+ SendPort toIsolate1 = msg[1]; |
+ Isolate.spawn(crossIsolate2, toIsolate1); |
+ break; |
+ case "fromIsolate1": |
+ expect(msg[1], 100); |
+ fromIsolate1.close(); |
+ break; |
+ default: |
+ fail("unreachable! Tag: ${msg[0]}"); |
+ } |
+ }, onDone: done); |
}); |
} |