Made SendPort a Capability.

Added tests.

R=iposva@google.com, sgjesse@google.com

Review URL: https://codereview.chromium.org//196983012

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@34163 260f80e4-7a28-3924-810f-c04153c831b5
This commit is contained in:
lrn@google.com 2014-03-20 11:43:54 +00:00
parent 843464d0ac
commit 63c7e14f44
2 changed files with 23 additions and 12 deletions

View file

@ -272,9 +272,10 @@ class Isolate {
* a [SendPort] is delivered to its corresponding [ReceivePort]. There might be
* many [SendPort]s for the same [ReceivePort].
*
* [SendPort]s can be transmitted to other isolates.
* [SendPort]s can be transmitted to other isolates, and they preserve equality
* when sent.
*/
abstract class SendPort {
abstract class SendPort implements Capability {
/**
* Sends an asynchronous [message] through this send port, to its

View file

@ -8,15 +8,25 @@ import "package:async_helper/async_helper.dart";
void main() {
asyncStart();
var c1 = new Capability();
var c2 = new Capability();
Expect.notEquals(c1, c2);
var receive = new RawReceivePort();
receive.sendPort.send(c1);
receive.handler = (c3) {
Expect.equals(c3, c1);
Expect.notEquals(c3, c2);
asyncEnd();
};
test(c1, c2) {
asyncStart();
Expect.notEquals(c1, c2);
var receive = new RawReceivePort();
receive.sendPort.send(c1);
receive.handler = (c3) {
Expect.equals(c3, c1);
Expect.notEquals(c3, c2);
receive.close();
asyncEnd();
};
}
Capability c1 = new Capability();
Capability c2 = new Capability();
Capability c3 = (new RawReceivePort()..close()).sendPort;
Capability c4 = (new RawReceivePort()..close()).sendPort;
test(c1, c2);
test(c3, c4);
test(c1, c3);
asyncEnd();
}