<!doctype html>
<meta charset=utf-8>
<title>UI Events IDL tests</title>
<meta name=timeout content=long>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/resources/WebIDLParser.js></script>
<script src=/resources/idlharness.js></script>

<h1>UI Events IDL tests</h1>
<div id=log></div>

<script>
"use strict";
function doTest([dom, uievents]) {
  var idlArray = new IdlArray();
  idlArray.add_untested_idls(dom);
  idlArray.add_idls(uievents);

  idlArray.add_objects({
    FocusEvent: ['new FocusEvent("event")'],
    MouseEvent: ['new MouseEvent("event")'],
    WheelEvent: ['new WheelEvent("event")'],
    KeyboardEvent: ['new KeyboardEvent("event")'],
    CompositionEvent: ['new CompositionEvent("event")'],
    UIEvent: ['new UIEvent("event")'],
    InputEvent: ['new InputEvent("event")'],
  });
  idlArray.test();
};

function fetchData(url) {
  return fetch(url).then((response) => response.text());
}

function waitForLoad() {
  return new Promise(function(resolve) {
    addEventListener("load", resolve);
  });
}

promise_test(function() {
  return Promise.all([fetchData("/interfaces/dom.idl"),
                      fetchData("/interfaces/uievents.idl")])
                .then(doTest);
}, "Test driver");

</script>
