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(); }); }); }); }); }