|  | // 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. | 
|  |  | 
|  | // Test RawReceivePort. | 
|  |  | 
|  | library raw_port_test; | 
|  |  | 
|  | import 'dart:isolate'; | 
|  | import 'package:unittest/unittest.dart'; | 
|  | import 'remote_unittest_helper.dart'; | 
|  |  | 
|  | void remote(SendPort port) { | 
|  | port.send("reply"); | 
|  | } | 
|  |  | 
|  | void remote2(SendPort port) { | 
|  | port.send("reply 1"); | 
|  | port.send("reply 2"); | 
|  | } | 
|  |  | 
|  | main([args, port]) { | 
|  | if (testRemote(main, port)) return; | 
|  |  | 
|  | test("raw receive", () { | 
|  | RawReceivePort port = new RawReceivePort(); | 
|  | Isolate.spawn(remote, port.sendPort); | 
|  | port.handler = expectAsync((v) { | 
|  | expect(v, "reply"); | 
|  | port.close(); | 
|  | }); | 
|  | }); | 
|  |  | 
|  | test("raw receive hashCode", () { | 
|  | RawReceivePort port = new RawReceivePort(); | 
|  | expect(port.hashCode is int, true); | 
|  | port.close(); | 
|  | }); | 
|  |  | 
|  | test("raw receive twice - change handler", () { | 
|  | RawReceivePort port = new RawReceivePort(); | 
|  | Isolate.spawn(remote2, port.sendPort); | 
|  | port.handler = expectAsync((v) { | 
|  | expect(v, "reply 1"); | 
|  | port.handler = expectAsync((v) { | 
|  | expect(v, "reply 2"); | 
|  | port.close(); | 
|  | }); | 
|  | }); | 
|  | }); | 
|  |  | 
|  | test("from-raw-port", () { | 
|  | RawReceivePort rawPort = new RawReceivePort(); | 
|  | Isolate.spawn(remote, rawPort.sendPort); | 
|  | rawPort.handler = expectAsync((v) { | 
|  | expect(v, "reply"); | 
|  | ReceivePort port = new ReceivePort.fromRawReceivePort(rawPort); | 
|  | Isolate.spawn(remote, rawPort.sendPort); | 
|  | Isolate.spawn(remote, port.sendPort); | 
|  | int ctr = 2; | 
|  | port.listen( | 
|  | expectAsync((v) { | 
|  | expect(v, "reply"); | 
|  | ctr--; | 
|  | if (ctr == 0) port.close(); | 
|  | }, count: 2), | 
|  | onDone: expectAsync(() {})); | 
|  | }); | 
|  | }); | 
|  | } |