|  | // Copyright (c) 2015, 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. | 
|  |  | 
|  | // Note: the following comment is used by test.dart to additionally compile the | 
|  | // other isolate's code. | 
|  | // OtherScripts=issue_21398_child_isolate.dart | 
|  |  | 
|  | import 'dart:isolate'; | 
|  | import 'dart:async'; | 
|  | import "package:expect/expect.dart"; | 
|  | import 'package:async_helper/async_helper.dart'; | 
|  |  | 
|  | class FromMainIsolate { | 
|  | String toString() => 'from main isolate'; | 
|  | int get fld => 10; | 
|  | } | 
|  |  | 
|  | funcChild(args) { | 
|  | var reply = args[1]; | 
|  | var obj = args[0]; | 
|  | Expect.isTrue(obj is FromMainIsolate); | 
|  | Expect.equals(10, obj.fld); | 
|  | reply.send(new FromMainIsolate()); | 
|  | } | 
|  |  | 
|  | main() { | 
|  | var receive1 = new ReceivePort(); | 
|  | var receive2 = new ReceivePort(); | 
|  |  | 
|  | // First spawn an isolate using spawnURI and have it | 
|  | // send back a "non-literal" like object. | 
|  | asyncStart(); | 
|  | Isolate.spawnUri(Uri.parse('issue_21398_child_isolate.dart'), [], | 
|  | [new FromMainIsolate(), receive1.sendPort]).catchError((error) { | 
|  | Expect.isTrue(error is ArgumentError); | 
|  | asyncEnd(); | 
|  | }); | 
|  | asyncStart(); | 
|  | Isolate | 
|  | .spawnUri( | 
|  | Uri.parse('issue_21398_child_isolate.dart'), [], receive1.sendPort) | 
|  | .then((isolate) { | 
|  | receive1.listen((msg) { | 
|  | Expect.stringEquals(msg, "Invalid Argument(s)."); | 
|  | receive1.close(); | 
|  | asyncEnd(); | 
|  | }, onError: (e) => print('$e')); | 
|  | }); | 
|  |  | 
|  | // Now spawn an isolate using spawnFunction and send it a "non-literal" | 
|  | // like object and also have the child isolate send back a "non-literal" | 
|  | // like object. | 
|  | asyncStart(); | 
|  | Isolate.spawn(funcChild, [new FromMainIsolate(), receive2.sendPort]).then( | 
|  | (isolate) { | 
|  | receive2.listen((msg) { | 
|  | Expect.isTrue(msg is FromMainIsolate); | 
|  | Expect.equals(10, msg.fld); | 
|  | receive2.close(); | 
|  | asyncEnd(); | 
|  | }, onError: (e) => print('$e')); | 
|  | }); | 
|  | } |