| // 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. |
| |
| // Dart test program for testing that isolates can spawn other isolates. |
| |
| library NestedSpawnTest; |
| import 'dart:isolate'; |
| import '../../pkg/unittest/lib/unittest.dart'; |
| |
| void isolateA() { |
| IsolateSink replyTo; |
| bool isFirst = true; |
| stream.listen((msg) { |
| if (isFirst) { |
| isFirst = false; |
| replyTo = msg; |
| return; |
| } |
| expect(msg, "launch nested!"); |
| IsolateSink sink = streamSpawnFunction(isolateB); |
| MessageBox box = new MessageBox(); |
| sink.add(box.sink); |
| sink.add("alive?"); |
| box.stream.single.then((msg) { |
| expect(msg, "and kicking"); |
| replyTo.add(499); |
| replyTo.close(); |
| stream.close(); |
| }); |
| }); |
| } |
| |
| void isolateB() { |
| IsolateSink replyTo; |
| bool isFirst = true; |
| stream.listen((msg) { |
| if (isFirst) { |
| isFirst = false; |
| replyTo = msg; |
| return; |
| } |
| expect(msg, "alive?"); |
| replyTo.add("and kicking"); |
| replyTo.close(); |
| stream.close(); |
| }); |
| } |
| |
| |
| main() { |
| test("spawned isolates can spawn nested isolates", () { |
| MessageBox box = new MessageBox(); |
| IsolateSink sink = streamSpawnFunction(isolateA); |
| sink.add(box.sink); |
| sink.add("launch nested!"); |
| box.stream.single.then(expectAsync1((msg) { |
| expect(msg, 499); |
| })); |
| }); |
| } |