<!doctype html>
<html>
<head>
<title>Keyboard IDL tests</title>
<link rel="help" href="https://w3c.github.io/keyboard-lock/"/>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/WebIDLParser.js"></script>
<script src="/resources/idlharness.js"></script>
<script>
'use strict';

function doTest(idls) {
  var idl_array = new IdlArray();
  idl_array.add_untested_idls('interface Navigator {};');
  for (let idl of idls) {
    idl_array.add_idls(idl);
  }
  idl_array.add_objects({
    Navigator: ['navigator'],
    Keyboard: ['navigator.keyboard'],
  });
  idl_array.test();
};

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

promise_test(() => {
  return Promise.all(["/interfaces/keyboard-lock.idl"].map(fetchText))
    .then(doTest);
}, "Test driver");
</script>
