// 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. // Dart test program for testing isolate communication with // complex messages. library IsolateComplexMessagesTest; import 'dart:isolate'; import '../../pkg/unittest/lib/unittest.dart'; main() { test("complex messages are serialized correctly", () { SendPort remote = spawnFunction(logMessages); remote.send(1, null); remote.send("Hello", null); remote.send("World", null); remote.send(const [null, 1, 2, 3, 4], null); remote.send(const [1, 2.0, true, false, 0xffffffffff], null); remote.send(const ["Hello", "World", 0xffffffffff], null); // Shutdown the LogRunner. remote.call(-1).then(expectAsync1((int message) { expect(message, 6); })); }); } void logMessages() { int count = 0; port.receive((var message, SendPort replyTo) { if (message == -1) { port.close(); replyTo.send(count, null); } else { switch (count) { case 0: expect(message, 1); break; case 1: expect(message, "Hello"); break; case 2: expect(message, "World"); break; case 3: expect(message.length, 5); expect(message[0], null); expect(message[1], 1); expect(message[2], 2); expect(message[3], 3); expect(message[4], 4); break; case 4: expect(message.length, 5); expect(message[0], 1); expect(message[1], 2.0); expect(message[2], true); expect(message[3], false); expect(message[4], 0xffffffffff); break; case 5: expect(message.length, 3); expect(message[0], "Hello"); expect(message[1], "World"); expect(message[2], 0xffffffffff); break; } count++; } }); }