<!DOCTYPE html>
<html>
  <head>
    <meta charset='utf-8'>
    <title>FileAPI Test: filelist_multiple_selected_files</title>
    <link rel='author' title='Intel' href='http://www.intel.com'>
    <link rel='help' href='http://dev.w3.org/2006/webapi/FileAPI/#filelist-section'>
    <link rel="help" href="http://dev.w3.org/2006/webapi/FileAPI/#dfn-length">
    <link rel="help" href="http://dev.w3.org/2006/webapi/FileAPI/#dfn-item">
    <script src='/resources/testharness.js'></script>
    <script src='/resources/testharnessreport.js'></script>
  </head>

  <body>
    <form name='uploadData'>
      <input type='file' id='fileChooser' multiple>
    </form>
    <div>
      <p>Test steps:</p>
      <ol>
        <li>Download <a href='support/upload.txt'>upload.txt</a>, <a href="support/upload.zip">upload.zip</a> to local.</li>
        <li>Select the local two files (upload.txt, upload.zip) to run the test.</li>
      </ol>
    </div>

    <div id='log'></div>

    <script>
      var fileInput = document.querySelector('#fileChooser');
      var fileList;

      setup({explicit_done: true, explicit_timeout: true});

      on_event(fileInput, 'change', function(evt) {
        test(function() {
          fileList = document.querySelector('#fileChooser').files;
          assert_equals(fileList.length, 2, 'fileList length is 2');
        }, 'Check if the fileList length is 2 when selected two files');

        test(function() {
          fileList = document.querySelector('#fileChooser').files;
          assert_true(fileList.item(0) instanceof File, 'item method is instanceof File');
        }, 'Check if the item method returns the File interface when selected two files');

        test(function() {
          fileList = document.querySelector('#fileChooser').files;
          assert_not_equals(fileList.item(1), null, 'item(1) is not null');
        }, 'Check if item(1) is not null when selected two files. Index must be treated by user agents as value for the position of a File object in the FileList, with 0 representing the first file.');

        test(function() {
          fileList = document.querySelector('#fileChooser').files;
          assert_equals(fileList.item(2), null, 'item(2) is null');
        }, 'Check if item(2) is null when selected two files');

        test(function() {
          fileList = document.querySelector('#fileChooser').files;
          assert_array_equals([fileList.item(0).name, fileList.item(1).name], ['upload.txt', 'upload.zip'], 'file name string is the name of selected files "upload.txt", "upload.zip"');
        }, 'Check if the file name string is the name of selected files');

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