<!DOCTYPE html>
<title> ErrorEvent and Worker.dispatchEvent() </title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id=log></div>
<script>
async_test(function(t) {
  var event = "error";
  var filename = './support/ErrorEvent.js';
  var message = 'Hello Worker';
  var lineno = 5;
  var colno = 6;
  var error = new Error("test");
  var worker = new Worker(filename);
  worker.addEventListener(event, t.step_func_done(function(e) {
    assert_equals(e.type, event, 'type');
    assert_equals(e.message, message, 'message');
    assert_equals(e.filename, filename, 'filename');
    assert_equals(e.lineno, lineno, 'lineno');
    assert_equals(e.colno, colno, 'colno');
    assert_equals(e.error, error, 'error');
  }), true);
  var e = new ErrorEvent(event, {bubbles:true, cancelable:true, message:message, filename:filename, lineno:lineno, colno:colno, error:error});
  worker.dispatchEvent(e);
});

test(function() {
  assert_throws("NotSupportedError", function() {
    document.createEvent("ErrorEvent");
  }, "should not be supported");
}, "document.createEvent('ErrorEvent')");

test(function() {
  var e = new ErrorEvent("error");
  assert_false("initErrorEvent" in e, "should not be supported");
}, "initErrorEvent");
</script>
