diff --git a/sdk/lib/isolate/isolate.dart b/sdk/lib/isolate/isolate.dart index 3ae06e9b7c7..ea6a4df773d 100644 --- a/sdk/lib/isolate/isolate.dart +++ b/sdk/lib/isolate/isolate.dart @@ -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 diff --git a/tests/isolate/capability_test.dart b/tests/isolate/capability_test.dart index a9d3ae63ec8..78a8caebe1f 100644 --- a/tests/isolate/capability_test.dart +++ b/tests/isolate/capability_test.dart @@ -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(); }