dart-sdk/tests/isolate/typed_message_test.dart

51 lines
1.5 KiB
Dart
Raw Normal View History

// 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
// typed objects.
// VMOptions=--checked
library TypedMessageTest;
import "dart:async";
import "package:expect/expect.dart";
import "package:async_helper/async_helper.dart";
import "dart:isolate";
isolates refactor: this change introduces 'dart:isolate' as a library. This is a big global change, so let me explain in more detail. This refactoring CL does the following: - moves all the dart code for isolates in a common library (lib/isolate) - changes frog to understand 'dart:isolate' imoprts by loading the code from the location above. - changes the vm to undernstand 'dart:isolate' imports by creating a separate library that is part of the bootstrap. This follows the same code-structure that Todd suggested in his CL introducing the mirror library - changes dartc to use the shared isolate library as the source of truth for type checking. I left around some of the internal js code in dartc so that the backend continues to work for apps that don't use isolates. - changes all tests that use isolates to import the library explicitly (this is a large bulk of the files in this CL) - changes test status for tests we can't fix in this repo (e.g. co19) - splits the isolate library code to make it possible to preserve some tests without exposing internal types (e.g. tests about serialization/deserialization) - changes the create_sdk script to copy the isolate library to the sdk - includes the isolate library in dartdoc I'll wait for at least one lgtm from each area (dartc, vm, frog, sdk) There is one important pending thing this CL doesn't do: - update test_runner.dart: This should be updated next time we upload the new binaries to tool/testing/bin - dartium specific changes: Vijay, is there anything I need to do for dartium? Review URL: https://chromiumcodereview.appspot.com//9422019 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@4647 260f80e4-7a28-3924-810f-c04153c831b5
2012-02-27 22:50:44 +00:00
void logMessages(SendPort replyTo) {
print("Starting log server.");
ReceivePort port = new ReceivePort();
replyTo.send(port.sendPort);
port.first.then((List<int> message) {
print("Log $message");
Expect.equals(5, message.length);
Expect.equals(0, message[0]);
Expect.equals(1, message[1]);
Expect.equals(2, message[2]);
Expect.equals(3, message[3]);
Expect.equals(4, message[4]);
port.close();
replyTo.send(1);
print("Stopping log server.");
});
}
main() {
asyncStart();
ReceivePort receivePort = new ReceivePort();
Future<Isolate> remote = Isolate.spawn(logMessages, receivePort.sendPort);
List<int> msg = new List<int>(5);
for (int i = 0; i < 5; i++) {
msg[i] = i;
}
StreamIterator iterator = new StreamIterator(receivePort);
iterator.moveNext().then((b) {
SendPort sendPort = iterator.current;
sendPort.send(msg);
return iterator.moveNext();
}).then((b) {
Expect.equals(1, iterator.current);
receivePort.close();
asyncEnd();
});
}