// Copyright (c) 2013, 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 = 2.9

library worker_test;

import 'package:async_helper/async_minitest.dart';
import 'dart:html';

main() {
  var workerScript = '''postMessage('WorkerMessage');''';

  test('unsupported', () {
    if (!Worker.supported) {
      expect(() => new Worker('worker.js'), throws);
    } else {
      new Worker('worker.js').onError.first.then(expectAsync((e) {
        // This event is expected, "worker.js" doesn't exist.  But the event
        // *sometimes* propagates to window.onerror in Firefox which causes
        // this test to fail, so let's stop any further propagation:
        e.preventDefault();
        e.stopImmediatePropagation();
      }));
    }
  });

  if (!Worker.supported) return;

  test('works', () {
    // Use Blob to make a local URL so we don't have to have a separate file.
    // This does not work on browsers using CSP (Content Security Policy).
    var blob = new Blob([workerScript], 'text/javascript');
    var url = Url.createObjectUrl(blob);
    var worker = new Worker(url);
    var test = expectAsync((e) {
      expect(e.data, 'WorkerMessage');
    });
    worker.onMessage.first.then(test);
  });
}
