OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 // Note: the following comment is used by test.dart to additionally compile the | 5 // Note: the following comment is used by test.dart to additionally compile the |
6 // other isolate's code. | 6 // other isolate's code. |
7 // OtherScripts=issue_21398_child_isolate1.dart | 7 // OtherScripts=issue_21398_child_isolate1.dart |
8 // OtherScripts=issue_21398_child_isolate11.dart | 8 // OtherScripts=issue_21398_child_isolate11.dart |
9 | 9 |
10 import 'dart:isolate'; | 10 import 'dart:isolate'; |
11 import 'dart:async'; | 11 import 'dart:async'; |
12 import "package:expect/expect.dart"; | 12 import "package:expect/expect.dart"; |
| 13 import 'package:async_helper/async_helper.dart'; |
13 | 14 |
14 class FromMainIsolate { | 15 class FromMainIsolate { |
15 String toString() => 'from main isolate'; | 16 String toString() => 'from main isolate'; |
16 int get fld => 10; | 17 int get fld => 10; |
17 } | 18 } |
18 | 19 |
19 func1Child(args) { | 20 func1Child(args) { |
20 var receivePort = new ReceivePort(); | 21 var receivePort = new ReceivePort(); |
21 var sendPort = args[0]; | 22 var sendPort = args[0]; |
22 sendPort.send(receivePort.sendPort); | 23 sendPort.send(receivePort.sendPort); |
23 receivePort.listen( | 24 receivePort.listen( |
24 (msg) { | 25 (msg) { |
25 Expect.isTrue(msg is FromMainIsolate); | 26 Expect.isTrue(msg is FromMainIsolate); |
26 Expect.equals(10, msg.fld); | 27 Expect.equals(10, msg.fld); |
27 receivePort.close(); | 28 receivePort.close(); |
| 29 sendPort.send("done"); |
28 }, | 30 }, |
29 onError: (e) => print('$e') | 31 onError: (e) => print('$e') |
30 ); | 32 ); |
31 } | 33 } |
32 | 34 |
33 | 35 |
34 func2Child(args) { | 36 func2Child(args) { |
35 var receivePort = new ReceivePort(); | 37 var receivePort = new ReceivePort(); |
36 var sendPort = args[0]; | 38 var sendPort = args[0]; |
37 sendPort.send(receivePort.sendPort); | 39 sendPort.send(receivePort.sendPort); |
(...skipping 12 matching lines...) Expand all Loading... |
50 var receive1 = new ReceivePort(); | 52 var receive1 = new ReceivePort(); |
51 var receive2 = new ReceivePort(); | 53 var receive2 = new ReceivePort(); |
52 | 54 |
53 var spawnFunctionIsolate1SendPort; | 55 var spawnFunctionIsolate1SendPort; |
54 var spawnFunctionIsolate2SendPort; | 56 var spawnFunctionIsolate2SendPort; |
55 | 57 |
56 // First spawn the first isolate using spawnFunction, this isolate will | 58 // First spawn the first isolate using spawnFunction, this isolate will |
57 // create a receivePort and send it's sendPort back and then it will just | 59 // create a receivePort and send it's sendPort back and then it will just |
58 // sit there listening for a message from the second isolate spawned | 60 // sit there listening for a message from the second isolate spawned |
59 // using spawnFunction. | 61 // using spawnFunction. |
60 Isolate.spawn(func1Child, [receive1.sendPort]).then( | 62 asyncStart(); |
| 63 return Isolate.spawn(func1Child, [receive1.sendPort]).then( |
61 (isolate) { | 64 (isolate) { |
62 receive1.listen( | 65 receive1.listen( |
63 (msg) { | 66 (msg) { |
64 Expect.isTrue(msg is SendPort); | 67 if (msg is SendPort) { |
65 spawnFunctionIsolate1SendPort = msg; | 68 spawnFunctionIsolate1SendPort = msg; |
66 receive1.close(); | |
67 | 69 |
68 // Now spawn the second isolate using spawnFunction, this isolate | 70 // Now spawn the second isolate using spawnFunction, this isolate |
69 // will create a receivePort and send it's sendPort back and then | 71 // will create a receivePort and send it's sendPort back and then |
70 // wait for the third isolate spawned using spawnUri to send it | 72 // wait for the third isolate spawned using spawnUri to send it |
71 // a sendPort to which it will try and send a non "literal-like" | 73 // a sendPort to which it will try and send a non "literal-like" |
72 // object. | 74 // object. |
73 Isolate.spawn(func2Child, [receive2.sendPort]).then( | 75 Isolate.spawn(func2Child, [receive2.sendPort]).then( |
74 (isolate) { | 76 (isolate) { |
75 receive2.listen( | 77 receive2.listen( |
76 (msg) { | 78 (msg) { |
77 spawnFunctionIsolate2SendPort = msg; | 79 spawnFunctionIsolate2SendPort = msg; |
78 receive2.close(); | 80 receive2.close(); |
79 | 81 |
80 // Now spawn an isolate using spawnUri and send these send | 82 // Now spawn an isolate using spawnUri and send these send |
81 // ports over to it. This isolate will send one of the | 83 // ports over to it. This isolate will send one of the |
82 // sendports over to the other. | 84 // sendports over to the other. |
83 Isolate.spawnUri(Uri.parse('issue_21398_child_isolate1.dart'), | 85 Isolate |
84 [spawnFunctionIsolate1SendPort, | 86 .spawnUri(Uri.parse('issue_21398_child_isolate1.dart'), |
85 spawnFunctionIsolate2SendPort], "no-msg"); | 87 [spawnFunctionIsolate1SendPort, |
86 }, | 88 spawnFunctionIsolate2SendPort], "no-msg")
; |
87 onError: (e) => print('$e') | 89 }, |
88 ); | 90 onError: (e) => print('$e') |
89 } | 91 ); |
90 ); | 92 } |
| 93 ); |
| 94 } else if (msg == "done") { |
| 95 receive1.close(); |
| 96 asyncEnd(); |
| 97 } else { |
| 98 Expect.fail("Invalid message received: $msg"); |
| 99 } |
91 }, | 100 }, |
92 onError: (e) => print('$e') | 101 onError: (e) => print('$e') |
93 ); | 102 ); |
94 } | 103 } |
95 ); | 104 ); |
96 } | 105 } |
97 | 106 |
98 | 107 |
99 uriChild(args) { | 108 uriChild(args) { |
100 var receivePort = new ReceivePort(); | 109 var receivePort = new ReceivePort(); |
101 var sendPort = args[0]; | 110 var sendPort = args[0]; |
102 sendPort.send(receivePort.sendPort); | 111 sendPort.send(receivePort.sendPort); |
103 receivePort.listen( | 112 receivePort.listen( |
104 (msg) { | 113 (msg) { |
105 Expect.isTrue(msg is String); | 114 Expect.isTrue(msg is String); |
106 Expect.equals("Invalid Argument(s).", msg); | 115 Expect.equals("Invalid Argument(s).", msg); |
107 receivePort.close(); | 116 receivePort.close(); |
| 117 sendPort.send("done"); |
108 }, | 118 }, |
109 onError: (e) => print('$e') | 119 onError: (e) => print('$e') |
110 ); | 120 ); |
111 } | 121 } |
112 | 122 |
113 | 123 |
114 spawnUriTest() { | 124 spawnUriTest() { |
115 var receive1 = new ReceivePort(); | 125 var receive1 = new ReceivePort(); |
116 var receive2 = new ReceivePort(); | 126 var receive2 = new ReceivePort(); |
117 | 127 |
118 var spawnFunctionIsolateSendPort; | 128 var spawnFunctionIsolateSendPort; |
119 var spawnUriIsolateSendPort; | 129 var spawnUriIsolateSendPort; |
120 | 130 |
121 // First spawn the first isolate using spawnFunction, this isolate will | 131 // First spawn the first isolate using spawnFunction, this isolate will |
122 // create a receivePort and send it's sendPort back and then it will just | 132 // create a receivePort and send it's sendPort back and then it will just |
123 // sit there listening for a message from the second isolate spawned | 133 // sit there listening for a message from the second isolate spawned |
124 // using spawnFunction. | 134 // using spawnFunction. |
| 135 asyncStart(); |
125 Isolate.spawn(uriChild, [receive1.sendPort]).then( | 136 Isolate.spawn(uriChild, [receive1.sendPort]).then( |
126 (isolate) { | 137 (isolate) { |
127 receive1.listen( | 138 receive1.listen( |
128 (msg) { | 139 (msg) { |
129 Expect.isTrue(msg is SendPort); | 140 if (msg is SendPort) { |
130 spawnFunctionIsolateSendPort = msg; | 141 spawnFunctionIsolateSendPort = msg; |
131 receive1.close(); | |
132 | 142 |
133 // Now spawn the second isolate using spawnUri, this isolate | 143 // Now spawn the second isolate using spawnUri, this isolate |
134 // will create a receivePort and send it's sendPort back and then | 144 // will create a receivePort and send it's sendPort back and then |
135 // wait for the third isolate spawned using spawnUri to send it | 145 // wait for the third isolate spawned using spawnUri to send it |
136 // a sendPort to which it will try and send a non "literal-like" | 146 // a sendPort to which it will try and send a non "literal-like" |
137 // object. | 147 // object. |
138 Isolate.spawnUri(Uri.parse('issue_21398_child_isolate11.dart'), | 148 Isolate.spawnUri(Uri.parse('issue_21398_child_isolate11.dart'), |
139 [], | 149 [], |
140 receive2.sendPort).then( | 150 receive2.sendPort).then( |
141 (isolate) { | 151 (isolate) { |
142 receive2.listen( | 152 receive2.listen( |
143 (msg) { | 153 (msg) { |
144 spawnUriIsolateSendPort = msg; | 154 spawnUriIsolateSendPort = msg; |
145 receive2.close(); | 155 receive2.close(); |
146 | 156 |
147 // Now spawn an isolate using spawnUri and send these send | 157 // Now spawn an isolate using spawnUri and send these send |
148 // ports over to it. This isolate will send one of the | 158 // ports over to it. This isolate will send one of the |
149 // sendports over to the other. | 159 // sendports over to the other. |
150 Isolate.spawnUri(Uri.parse('issue_21398_child_isolate1.dart'), | 160 Isolate.spawnUri(Uri.parse('issue_21398_child_isolate1.dart'), |
151 [spawnFunctionIsolateSendPort, | 161 [spawnFunctionIsolateSendPort, |
152 spawnUriIsolateSendPort], "no-msg"); | 162 spawnUriIsolateSendPort], "no-msg"); |
153 }, | 163 }, |
154 onError: (e) => print('$e') | 164 onError: (e) => print('$e') |
155 ); | 165 ); |
156 } | 166 } |
157 ); | 167 ); |
| 168 } else if (msg == "done") { |
| 169 receive1.close(); |
| 170 asyncEnd(); |
| 171 } else { |
| 172 Expect.fail("Invalid message received: $msg"); |
| 173 } |
158 }, | 174 }, |
159 onError: (e) => print('$e') | 175 onError: (e) => print('$e') |
160 ); | 176 ); |
161 } | 177 } |
162 ); | 178 ); |
163 } | 179 } |
164 | 180 |
165 | 181 |
166 main() { | 182 main() { |
167 spawnFuncTest(); | 183 spawnFuncTest(); |
168 spawnUriTest(); | 184 spawnUriTest(); |
169 } | 185 } |
OLD | NEW |