Index: test/codegen/lib/html/isolates_test.dart |
diff --git a/test/codegen/lib/html/isolates_test.dart b/test/codegen/lib/html/isolates_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9c07ed0eb25472461e4de99d9d4b260ae146ab2c |
--- /dev/null |
+++ b/test/codegen/lib/html/isolates_test.dart |
@@ -0,0 +1,65 @@ |
+library IsolatesTest; |
+import 'package:unittest/unittest.dart'; |
+import 'package:unittest/html_config.dart'; |
+import 'dart:async'; |
+import 'dart:html'; |
+import 'dart:convert'; |
+import 'dart:isolate' as isolate; |
+ |
+String responseFor(message) => 'response for $message'; |
+ |
+void isolateEntry(isolate.SendPort initialReplyTo) { |
+ var port = new isolate.ReceivePort(); |
+ initialReplyTo.send(port.sendPort); |
+ |
+ bool wasThrown = false; |
+ try { |
+ window.alert('Test'); |
+ } catch (e) { |
+ wasThrown = true; |
+ } |
+ // If wasn't thrown, do not listen to messages to make test fail. |
+ if (!wasThrown) { |
+ return; |
+ } |
+ |
+ // Check that convert library was loaded to isolate. |
+ JSON.encode([1, 2, 3]); |
+ |
+ port.listen((message) { |
+ var data = message[0]; |
+ var replyTo = message[1]; |
+ replyTo.send(responseFor(data)); |
+ }); |
+} |
+ |
+Future sendReceive(isolate.SendPort port, msg) { |
+ var response = new isolate.ReceivePort(); |
+ port.send([msg, response.sendPort]); |
+ return response.first; |
+} |
+ |
+main() { |
+ useHtmlConfiguration(); |
+ test('IsolateSpawn', () { |
+ var port = new isolate.ReceivePort(); |
+ isolate.Isolate.spawn(isolateEntry, port.sendPort); |
+ port.close(); |
+ }); |
+ test('NonDOMIsolates', () { |
+ var callback = expectAsync((){}); |
+ var response = new isolate.ReceivePort(); |
+ var remote = isolate.Isolate.spawn(isolateEntry, response.sendPort); |
+ response.first.then((port) { |
+ final msg1 = 'foo'; |
+ final msg2 = 'bar'; |
+ sendReceive(port, msg1).then((response) { |
+ expect(response, equals(responseFor(msg1))); |
+ sendReceive(port, msg2).then((response) { |
+ expect(response, equals(responseFor(msg2))); |
+ callback(); |
+ }); |
+ }); |
+ }); |
+ }); |
+} |