<!DOCTYPE html>
<title>DedicatedWorker: import failure</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script> setup({allow_uncaught_exception: true}); </script>
<script>

promise_test(async () => {
  const scriptURL = 'resources/import-scripts-worker.js';
  const worker = new Worker(scriptURL, { type: 'module' });
  const msg_event = await new Promise(resolve => worker.onmessage = resolve);
  assert_equals(msg_event.data, 'TypeError');
}, 'importScripts() on module worker should throw an exception.');

promise_test(() => {
  const scriptURL = 'resources/static-import-worker.js';
  const worker = new Worker(scriptURL, { type: 'classic' });
  return new Promise(resolve => worker.onerror = resolve);
}, 'Static import on classic worker should throw an exception.');

promise_test(() => {
  const scriptURL = 'resources/non-existent-worker.js';
  const worker = new Worker(scriptURL, { type: 'module' });
  return new Promise(resolve => worker.onerror = resolve);
}, 'Worker construction for non-existent script should dispatch an ' +
   'ErrorEvent.');

promise_test(() => {
  const scriptURL = 'resources/static-import-non-existent-script-worker.js';
  const worker = new Worker(scriptURL, { type: 'module' });
  return new Promise(resolve => worker.onerror = resolve);
}, 'Static import for non-existent script should dispatch an ErrorEvent.');

promise_test(async () => {
  const scriptURL = './non-existent-worker.js';
  const worker = new Worker('resources/dynamic-import-given-url-worker.js',
                            { type: 'module' });
  worker.postMessage(scriptURL);
  const msg_event = await new Promise((resolve, reject) => {
    worker.onmessage = resolve;
    worker.onerror = (error) => reject(error && error.message);
  });
  assert_equals(msg_event.data, 'TypeError');
}, 'Dynamic import for non-existent script should throw an exception.');

test(() => {
  const scriptURL = 'http://invalid:123$';
  assert_throws('SyntaxError', () => new Worker(scriptURL, { type: 'module' }));
}, 'Worker construction for an invalid URL should throw an exception.');

test(() => {
  const scriptURL = 'file:///static-import-worker.js';
  assert_throws('SecurityError', () => new Worker(scriptURL, { type: 'module' }));
}, 'Worker construction for a file URL should throw an exception.');

</script>
