library IsolatesTest;
import '../../pkg/unittest/lib/unittest.dart';
import '../../pkg/unittest/lib/html_config.dart';
import 'dart:html';
import 'dart:json';
import 'dart:isolate' as isolate;

String responseFor(message) => 'response for $message';

void isolateEntry() {
  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 JSON library was loaded to isolate.
  stringify([1, 2, 3]);

  isolate.port.receive((message, replyTo) {
    replyTo.send(responseFor(message), null);
  });
}

main() {
  useHtmlConfiguration();
  test('IsolateSpawn', () {
    isolate.spawnFunction(isolateEntry);
  });
  test('NonDOMIsolates', () {
    var callback = expectAsync0((){});
    var port = isolate.spawnFunction(isolateEntry);
    final msg1 = 'foo';
    final msg2 = 'bar';
    port.call(msg1).then((response) {
      guardAsync(() {
        expect(response, equals(responseFor(msg1)));
        port.call(msg2).then((response) {
          guardAsync(() {
            expect(response, equals(responseFor(msg2)));
            callback();
          });
        });
      });
    });
  });
}
