Index: client/tests/client/dom/IsolatesTest.dart |
diff --git a/client/tests/client/dom/IsolatesTest.dart b/client/tests/client/dom/IsolatesTest.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7f062ab0778c59d8c82309db3f7aa98aa40cee77 |
--- /dev/null |
+++ b/client/tests/client/dom/IsolatesTest.dart |
@@ -0,0 +1,52 @@ |
+#library('IsolatesTest'); |
+#import('../../../testing/unittest/unittest.dart'); |
+#import('dart:dom'); |
+#import('dart:json'); |
+ |
+class PingPongIsolate extends Isolate { |
+ PingPongIsolate() : super.heavy(); |
+ |
+ void main() { |
+ bool wasThrown = false; |
+ try { |
+ window.alert('Test'); |
+ } catch(final e) { |
+ wasThrown = true; |
+ } |
+ // If wasn't thrown, do not listen to messages to make test fail. |
+ if (!wasThrown) { |
+ return; |
+ } |
+ |
+ // Check that JSON library was loaded to isolate. |
+ JSON.stringify([1, 2, 3]); |
+ |
+ port.receive((message, replyTo) { |
+ replyTo.send(responseFor(message), null); |
+ }); |
+ } |
+ |
+ static String responseFor(message) => 'response for $message'; |
+} |
+ |
+main() { |
+ forLayoutTests(); |
+ asyncTest('IsolateSpawn', 1, () { |
+ new PingPongIsolate().spawn().then((SendPort port) { |
+ callbackDone(); |
+ }); |
+ }); |
+ asyncTest('NonDOMIsolates', 1, () { |
+ new PingPongIsolate().spawn().then((SendPort port) { |
+ final msg1 = 'foo'; |
+ final msg2 = 'bar'; |
+ port.call(msg1).receive((response, _) { |
+ Expect.equals(PingPongIsolate.responseFor(msg1), response); |
+ port.call(msg2).receive((response, _) { |
+ Expect.equals(PingPongIsolate.responseFor(msg2), response); |
+ callbackDone(); |
+ }); |
+ }); |
+ }); |
+ }); |
+} |