https://github.com/web-platform-tests/wpt
Raw File
Tip revision: a3e01e5be250ecebeeefc5e5faf65a8a47f89e64 authored by James Graham on 13 February 2017, 10:16:48 UTC
Pass --enable-experimental-web-platform-features to Chrome instability checker
Tip revision: a3e01e5
Document-createEvent.html
<!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_equals(Object.getPrototypeOf(ev), window[iface].prototype);
  }, 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.");
}
for (var alias in aliases) {
  var iface = aliases[alias];
  testAlias(alias, iface);
  testAlias(alias.toLowerCase(), iface);
  testAlias(alias.toUpperCase(), iface);

  if (alias[alias.length - 1] != "s") {
    var plural = alias + "s";
    if (!(plural in aliases)) {
      test(function () {
        assert_throws("NOT_SUPPORTED_ERR", function () {
          var evt = document.createEvent(plural);
        });
      }, 'Should throw NOT_SUPPORTED_ERR for pluralized legacy event interface "' + plural + '"');
    }
  }
}

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");

/*
 * The following are event interfaces which do actually exist, but must still
 * throw since they're absent from the table in the spec for
 * document.createEvent().  This list is not exhaustive, but includes all
 * interfaces that it is known some UA does or did not throw for.
 */
var someNonCreateableEvents = [
  "AnimationPlaybackEvent",
  "AnimationPlayerEvent",
  "ApplicationCacheErrorEvent",
  "AudioProcessingEvent",
  "AutocompleteErrorEvent",
  "BeforeInstallPromptEvent",
  "BlobEvent",
  "ClipboardEvent",
  "CommandEvent",
  "DataContainerEvent",
  "DeviceLightEvent",
  "ExtendableEvent",
  "ExtendableMessageEvent",
  "FetchEvent",
  "FontFaceSetLoadEvent",
  "GamepadEvent",
  "GeofencingEvent",
  "InstallEvent",
  "KeyEvent",
  "MIDIConnectionEvent",
  "MIDIMessageEvent",
  "MediaEncryptedEvent",
  "MediaKeyEvent",
  "MediaKeyMessageEvent",
  "MediaQueryListEvent",
  "MediaStreamEvent",
  "MediaStreamTrackEvent",
  "MouseScrollEvent",
  "MutationEvent",
  "NotificationEvent",
  "NotifyPaintEvent",
  "OfflineAudioCompletionEvent",
  "OrientationEvent",
  "PageTransition", // Yes, with no "Event"
  "PointerEvent",
  "PopUpEvent",
  "PresentationConnectionAvailableEvent",
  "PresentationConnectionCloseEvent",
  "PromiseRejectionEvent",
  "PushEvent",
  "RTCDTMFToneChangeEvent",
  "RTCDataChannelEvent",
  "RTCIceCandidateEvent",
  "RelatedEvent",
  "ResourceProgressEvent",
  "SVGEvent",
  "SVGZoomEvent",
  "ScrollAreaEvent",
  "SecurityPolicyViolationEvent",
  "ServicePortConnectEvent",
  "ServiceWorkerMessageEvent",
  "SimpleGestureEvent",
  "SpeechRecognitionError",
  "SpeechRecognitionEvent",
  "SpeechSynthesisEvent",
  "SyncEvent",
  "TimeEvent",
  "WebKitAnimationEvent",
  "WebKitTransitionEvent",
  "XULCommandEvent",
];
someNonCreateableEvents.forEach(function (eventInterface) {
  // SVGEvents is allowed, but not SVGEvent.  Make sure we only test if it's
  // not whitelisted.
  if (!(eventInterface in aliases)) {
    test(function () {
      assert_throws("NOT_SUPPORTED_ERR", function () {
        var evt = document.createEvent(eventInterface);
      });
    }, 'Should throw NOT_SUPPORTED_ERR for non-legacy event interface "' + eventInterface + '"');
  }

  if (!(eventInterface + "s" in aliases)) {
    test(function () {
      assert_throws("NOT_SUPPORTED_ERR", function () {
        var evt = document.createEvent(eventInterface + "s");
      });
    }, 'Should throw NOT_SUPPORTED_ERR for pluralized non-legacy event interface "' + eventInterface + 's"');
  }
});
</script>
back to top