| // 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. |
| |
| library stream_mangling_test; |
| |
| import "package:expect/expect.dart"; |
| import 'dart:isolate'; |
| import '../../pkg/unittest/lib/unittest.dart'; |
| |
| main() { |
| test("Self referencing arrays serialize correctly", () { |
| var messageBox = new MessageBox(); |
| var stream = messageBox.stream; |
| var sink = messageBox.sink; |
| var nested = []; |
| nested.add(nested); |
| Expect.identical(nested, nested[0]); |
| stream.listen(expectAsync1((data) { |
| Expect.isFalse(identical(nested, data)); |
| Expect.isTrue(data is List); |
| Expect.equals(1, data.length); |
| Expect.identical(data, data[0]); |
| stream.close(); |
| })); |
| sink.add(nested); |
| }); |
| |
| test("Self referencing arrays serialize correctly 2", () { |
| var messageBox = new MessageBox(); |
| var stream = messageBox.stream; |
| var sink = messageBox.sink; |
| var nested = [0, 1]; |
| nested.add(nested); |
| nested.add(3); |
| nested.add(4); |
| Expect.identical(nested, nested[2]); |
| stream.listen(expectAsync1((data) { |
| Expect.isFalse(identical(nested, data)); |
| Expect.isTrue(data is List); |
| Expect.equals(5, data.length); |
| Expect.identical(data, data[2]); |
| Expect.equals(0, data[0]); |
| Expect.equals(1, data[1]); |
| Expect.equals(3, data[3]); |
| Expect.equals(4, data[4]); |
| stream.close(); |
| })); |
| sink.add(nested); |
| }); |
| |
| test("Self referencing arrays serialize correctly 3", () { |
| var messageBox = new MessageBox(); |
| var stream = messageBox.stream; |
| var sink = messageBox.sink; |
| var nested = [[[[[0, 1]]]]]; |
| nested.add(nested); |
| nested[0][0][0][0].add(nested); |
| nested.add(3); |
| nested.add(4); |
| Expect.identical(nested, nested[0][0][0][0][2]); |
| stream.listen(expectAsync1((data) { |
| Expect.isFalse(identical(nested, data)); |
| Expect.isTrue(data is List); |
| Expect.equals(4, data.length); |
| Expect.equals(1, data[0].length); |
| Expect.equals(1, data[0][0].length); |
| Expect.equals(1, data[0][0][0].length); |
| Expect.equals(3, data[0][0][0][0].length); |
| Expect.identical(data, data[0][0][0][0][2]); |
| Expect.identical(data, data[1]); |
| Expect.equals(3, data[2]); |
| Expect.equals(4, data[3]); |
| stream.close(); |
| })); |
| sink.add(nested); |
| }); |
| |
| test("Self referencing maps serialize correctly", () { |
| var messageBox = new MessageBox(); |
| var stream = messageBox.stream; |
| var sink = messageBox.sink; |
| var nested = {}; |
| nested["foo"] = nested; |
| Expect.identical(nested, nested["foo"]); |
| stream.listen(expectAsync1((data) { |
| Expect.isFalse(identical(nested, data)); |
| Expect.isTrue(data is Map); |
| Expect.equals(1, data.length); |
| Expect.identical(data, data["foo"]); |
| stream.close(); |
| })); |
| sink.add(nested); |
| }); |
| |
| test("Sending of IsolateSinks", () { |
| // TODO(floitsch): add test. |
| }); |
| |
| test("Sending of IsolateSinks in complicated structures", () { |
| // TODO(floitsch): add test. |
| }); |
| } |