Chromium Code Reviews| 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(); |
|
floitsch
2013/10/23 13:33:24
you can drop the close. "first" already closes.
Lasse Reichstein Nielsen
2013/10/24 10:26:01
Done.
|
| }); |
| } |
| -// 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]); |
|
floitsch
2013/10/23 13:33:24
debug print.
Lasse Reichstein Nielsen
2013/10/24 10:26:01
Done.
|
| + 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); |
| }); |
| } |