| Index: tests/isolate/typed_data_message_test.dart
|
| ===================================================================
|
| --- tests/isolate/typed_data_message_test.dart (revision 0)
|
| +++ tests/isolate/typed_data_message_test.dart (revision 0)
|
| @@ -0,0 +1,97 @@
|
| +// 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 serialization of messages.
|
| +// VMOptions=--enable_type_checks --enable_asserts
|
| +
|
| +library TypedDataMessageTest;
|
| +import 'dart:isolate';
|
| +import 'dart:typeddata';
|
| +import '../../pkg/unittest/lib/unittest.dart';
|
| +
|
| +// ---------------------------------------------------------------------------
|
| +// Message passing test.
|
| +// ---------------------------------------------------------------------------
|
| +
|
| +List elements;
|
| +
|
| +void initializeList() {
|
| + elements = new List(3);
|
| + elements[0] = new Int8List(10);
|
| + for (int j = 0; j < 10; j++) {
|
| + elements[0][j] = j;
|
| + }
|
| + elements[1] = new ByteData.view(elements[0].buffer, 0, 10);
|
| + for (int j = 0; j < 10; j++) {
|
| + elements[1].setInt8(j, j + 100);
|
| + }
|
| + elements[2] = new Int8List.view(new Int8List(100).buffer, 50, 10);
|
| + for (int j = 0; j < 10; j++) {
|
| + elements[2][j] = j + 250;
|
| + }
|
| +}
|
| +
|
| +void VerifyList(List expected, List actual) {
|
| + for (int i = 0; i < expected.length; i++) {
|
| + expect(actual[i], expected[i]);
|
| + }
|
| +}
|
| +
|
| +void VerifyBytedata(ByteData expected, ByteData actual) {
|
| + for (int i = 0; i < expected.length; i++) {
|
| + expect(actual.getInt8(i), expected.getInt8(i));
|
| + }
|
| +}
|
| +
|
| +void VerifyObject(int index, var actual) {
|
| + var expected = elements[index];
|
| + if (expected is List) {
|
| + expect(actual, isList);
|
| + VerifyList(expected, actual);
|
| + } else {
|
| + expect(true, actual is ByteData);
|
| + VerifyBytedata(expected, actual);
|
| + }
|
| + expect(actual.length, expected.length);
|
| +}
|
| +
|
| +pingPong() {
|
| + initializeList();
|
| + int count = 0;
|
| + port.receive((var message, SendPort replyTo) {
|
| + if (message == -1) {
|
| + port.close();
|
| + replyTo.send(count, null);
|
| + } else {
|
| + // Check if the received object is correct.
|
| + if (count < elements.length) {
|
| + VerifyObject(count, message);
|
| + }
|
| + // Bounce the received object back so that the sender
|
| + // can make sure that the object matches.
|
| + replyTo.send(message, null);
|
| + count++;
|
| + }
|
| + });
|
| +}
|
| +
|
| +main() {
|
| + initializeList();
|
| + test("send objects and receive them back", () {
|
| + SendPort remote = spawnFunction(pingPong);
|
| + // Send objects and receive them back.
|
| + for (int i = 0; i < elements.length; i++) {
|
| + var sentObject = elements[i];
|
| + var idx = i;
|
| + remote.call(sentObject).then(expectAsync1((var receivedObject) {
|
| + VerifyObject(idx, receivedObject);
|
| + }));
|
| + }
|
| +
|
| + // Shutdown the MessageServer.
|
| + remote.call(-1).then(expectAsync1((int message) {
|
| + expect(message, elements.length);
|
| + }));
|
| + });
|
| +}
|
|
|