blob: 03b515349f8ec78ca65c2ae8afd328534c90aa81 [file] [log] [blame]
// Copyright (c) 2011-2016, 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 abstract void send(message)
/// Sends an asynchronous message through this send port, to its corresponding
/// ReceivePort.
/// The content of message can be: primitive values (null, num, bool, double,
/// String), instances of SendPort, and lists and maps whose elements are any
/// of these. List and maps are also allowed to be cyclic.
///
/// @description Checks that cyclic lists are sent properly.
///
/// @author iefremov
import "dart:isolate";
import "../../../Utils/expect.dart";
void iMain(List data) {
SendPort replyPort=data[0];
var message=data[1];
replyPort.send(message);
}
void main() {
List cyclicList = [];
cyclicList.add(cyclicList);
(cyclicList[0] as List).add(cyclicList);
List<Object?> cyclicList2 = [1, 2, 3, null];
cyclicList2.add(cyclicList);
cyclicList2.add(cyclicList2);
var receivePort = new ReceivePort();
asyncStart();
Isolate.spawn(iMain, [receivePort.sendPort, cyclicList2]);
receivePort.listen((message) {
Expect.equals(cyclicList2[0], message[0]);
Expect.equals(cyclicList2[1], message[1]);
Expect.equals(cyclicList2[2], message[2]);
Expect.equals(cyclicList2[3], message[3]);
Expect.identical(message[4], message[4][0]);
Expect.identical(message[4], message[4][0][0]);
Expect.equals(cyclicList2[0], message[5][0]);
Expect.equals(cyclicList2[1], message[5][1]);
Expect.equals(cyclicList2[2], message[5][2]);
Expect.equals(cyclicList2[3], message[5][3]);
Expect.identical(message[5], message[5][5]);
receivePort.close();
asyncEnd();
});
}