<!DOCTYPE html>
<meta charset=utf-8>
<title>Document.createEvent</title>
<link rel=help href="https://dom.spec.whatwg.org/#dom-document-createevent">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="Document-createEvent.js"></script>
<div id="log"></div>
<script>
function testAlias(arg, iface) {
  var ev;
  test(function() {
    ev = document.createEvent(arg);
    assert_true(ev instanceof window[iface]);
    assert_true(ev instanceof Event);
  }, arg + " should be an alias for " + iface + ".");
  test(function() {
    assert_equals(ev.type, "",
                  "type should be initialized to the empty string");
    assert_equals(ev.target, null,
                  "target should be initialized to null");
    assert_equals(ev.currentTarget, null,
                  "currentTarget should be initialized to null");
    assert_equals(ev.eventPhase, 0,
                  "eventPhase should be initialized to NONE (0)");
    assert_equals(ev.bubbles, false,
                  "bubbles should be initialized to false");
    assert_equals(ev.cancelable, false,
                  "cancelable should be initialized to false");
    assert_equals(ev.defaultPrevented, false,
                  "defaultPrevented should be initialized to false");
    assert_equals(ev.isTrusted, false,
                  "isTrusted should be initialized to false");
  }, "createEvent('" + arg + "') should be initialized correctly.");
}
aliases.forEach(function(alias) {
  testAlias(alias[0], alias[1]);
  testAlias(alias[0].toLowerCase(), alias[1]);
  testAlias(alias[0].toUpperCase(), alias[1]);
});

test(function() {
  assert_throws("NOT_SUPPORTED_ERR", function() {
    var evt = document.createEvent("foo");
  });
  assert_throws("NOT_SUPPORTED_ERR", function() {
    // 'LATIN CAPITAL LETTER I WITH DOT ABOVE' (U+0130)
    var evt = document.createEvent("U\u0130Event");
  });
  assert_throws("NOT_SUPPORTED_ERR", function() {
    // 'LATIN SMALL LETTER DOTLESS I' (U+0131)
    var evt = document.createEvent("U\u0131Event");
  });
}, "Should throw NOT_SUPPORTED_ERR for unrecognized arguments");
</script>
