blob: 79ee8b6a3f34935d4fd0b72f0126c22c8d63ef83 [file] [log] [blame]
// Copyright (c) 2011-2017, 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.
/// @assertion An unforgeable object that comes back as equal when passed through
/// other isolates.
/// Sending a capability object to another isolate, and getting it back, will
/// produce an object that is equal to the original. There is no other way to
/// create objects equal to a capability object.
///
/// @description Checks hashCode and equality operator of Capability, that is
/// sent from another isolate.
///
/// @author a.semenov@unipro.ru
import "dart:isolate";
import "dart:async";
import "../../../Utils/expect.dart";
import "../../core/Object/allTests.lib.dart" as object;
void entryPoint(SendPort sendPort) {
Capability capability0 = new Capability();
// first tree are equal
sendPort.send(capability0);
sendPort.send(capability0);
sendPort.send(capability0);
// next three are not equal
for (int i = 0; i < 3; i++) {
sendPort.send(new Capability());
}
// last is a control port, used to stop the isolate and close all ports
ReceivePort controlPort = new ReceivePort();
controlPort.listen((_) {
controlPort.close();
});
sendPort.send(controlPort.sendPort);
}
Future test() async {
ReceivePort receivePort = new ReceivePort();
Isolate.spawn(entryPoint, receivePort.sendPort);
List cp = await receivePort.take(7).toList();
List<Object> capabilities = new List.from(cp);
Object create() => capabilities[0];
List<Object> createEqual(int number) {
Expect.isTrue(number < 4);
return capabilities.sublist(0, number);
}
List<Object> createNotEqual(int number) {
Expect.isTrue(number < 4);
return capabilities.sublist(3, 3 + number);
}
// execute tests
object.test(create, createEqual, createNotEqual);
// clean up
(capabilities.last as SendPort).send("finish");
asyncEnd();
}
main() {
asyncStart();
test();
}