| // 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(() {})); |
| }); |
| }); |
| } |