<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>File API manual IDL tests</title>
    <link rel="author" title="Intel" href="http://www.intel.com">
    <link rel="help" href="http://dev.w3.org/2006/webapi/FileAPI/#conformance">
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <script src="/resources/WebIDLParser.js"></script>
    <script src="/resources/idlharness.js"></script>
  </head>
  <body>
    <h1>File API manual IDL tests</h1>

    <div>
      <p>Test steps:</p>
      <ol>
        <li>Download <a href="support/upload.txt">upload.txt</a> to local.</li>
        <li>Select the local upload.txt file to run the test.</li>
      </ol>
    </div>

    <form name="uploadData">
      <input type="file" id="fileChooser">
    </form>

    <div id="log"></div>

    <script>
      var fileInput;

      setup(function() {
        fileInput = document.querySelector("#fileChooser")
      }, {explicit_done: true, explicit_timeout: true});

      on_event(fileInput, "change", async function(evt) {
        const idl = await fetch('/interfaces/FileAPI.idl').then(r => r.text());
        const dom = await fetch('/interfaces/dom.idl').then(r => r.text());
        const html = await fetch('/interfaces/html.idl').then(r => r.text());
        const url = await fetch('/interfaces/url.idl').then(r => r.text());

        const idl_array = new IdlArray();
        idl_array.add_idls(idl);
        idl_array.add_dependency_idls(url);
        idl_array.add_dependency_idls(html);
        idl_array.add_dependency_idls(dom);
        idl_array.add_untested_idls("[Exposed=(Window,Worker)] interface ArrayBuffer {};");

        idl_array.add_objects({
          FileList: [fileInput.files],
          File: [fileInput.files[0]],
        });
        idl_array.test();

        done();
      });
    </script>
  </body>
</html>
