Files
sdk/tests/isolate/src/CrossIsolateMessageTest.dart
T
sigmund@google.com ee6a907611 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

74 lines
2.2 KiB
Dart

// Copyright (c) 2011, 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 that isolates can communicate to isolates
// other than the main isolate.
#library('CrossIsolateMessageTest');
#import('dart:isolate');
#import('TestFramework.dart');
class CrossIsolate1 extends Isolate {
CrossIsolate1() : super.heavy();
void main() {
this.port.receive((msg, replyTo) {
SendPort otherIsolate = msg;
ReceivePort receivePort = new ReceivePort();
receivePort.receive((msg, replyTo) {
otherIsolate.send(msg + 58, null); // 100.
receivePort.close();
});
replyTo.send('ready', receivePort.toSendPort());
this.port.close();
});
}
}
// CrossIsolate2 is nearly the same as CrossIsolate1, but contains a
// different constant.
class CrossIsolate2 extends Isolate {
CrossIsolate2() : super.heavy();
void main() {
this.port.receive((msg, replyTo) {
SendPort mainIsolate = msg;
ReceivePort receivePort = new ReceivePort();
receivePort.receive((msg, replyTo) {
mainIsolate.send(msg + 399, null); // 499.
receivePort.close();
});
replyTo.send('ready', receivePort.toSendPort());
this.port.close();
});
}
}
test(TestExpectation expect) {
// Create CrossIsolate1 and CrossIsolate2.
expect.completes(new CrossIsolate1().spawn()).then((SendPort port1) {
expect.completes(new CrossIsolate2().spawn()).then((SendPort port2) {
// Create a new receive port and send it to isolate2.
ReceivePort myPort = new ReceivePort();
port2.call(myPort.toSendPort()).receive(expect.runs2((msg, port2b) {
Expect.equals("ready", msg);
// Send port of isolate2 to isolate1.
port1.call(port2b).receive(expect.runs2((msg, port1b) {
Expect.equals("ready", msg);
myPort.receive(expect.runs2((msg, replyTo) {
Expect.equals(499, msg);
expect.succeeded();
myPort.close();
}));
port1b.send(42, null);
}));
}));
});
});
}
main() {
runTests([test]);
}