<!doctype html>
<html>
    <head>
        <title>HTML5 Drag and Drop: files attribute returns a FileList</title>
        <meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/>
        <link rel="author" title="Microsoft" href="http://www.microsoft.com/"/>
        <link rel="help" href="http://dev.w3.org/html5/spec/dnd.html#datatransfer"/>
        <meta name="assert" content="files attribute returns a FileList"/>
        <script src="../resources/dragdrop_support.js" type="text/javascript"></script>
        <script type="text/javascript">
            var EVENT, TARGET;

            function DropEvent(evt)
            {
                if ((TARGET == evt.target) && (EVENT == evt.type))
                {
                    var files = evt.dataTransfer.files;
                    if(('[object FileList]' == files))
                    {
                        LogTestResult("PASS");
                    }
                    else
                    {
                        LogTestResult("FAIL");
                    }
                }
                else
                {
                    LogTestResult("FAIL");
                }
            }

            function DragenterEvent(evt)
            {
                evt.preventDefault();
            }

            function DragoverEvent(evt)
            {
                evt.preventDefault();
            }

            EVENT = "drop";

            window.onload = function()
            {
                TARGET = document.getElementById("target");
                AddEventListenersForElement(EVENT, DropEvent, false, TARGET);
                AddEventListenersForElement("dragenter", DragenterEvent, false, TARGET);
                AddEventListenersForElement("dragover", DragoverEvent, false, TARGET);
            }
        </script>
    </head>
    <body>
        <pre>Description: files attribute returns a FileList</pre>
        <table id='testtable' border='1'>
            <tr>
                <td>Test Result</td>
                <td>Test Assertion</td>
            </tr>
            <tr>
                <td id='test_result'>Manual</td>
                <td id='test_assertion'>Test passes if if the word "PASS" appears to the left after following the steps below.
                <div id="manualsteps">
                    Steps:
                    <ol>
                        <li> Drag a file and drop it in the green box
                    </ol>
                </div>
            </td>
            </tr>
        </table>
        <p>
        http://dev.w3.org/html5/spec/dnd.html#datatransfer
        </p>
        <p>
        The files attribute must return a live FileList sequence consisting of File objects representing the files.
        </p>
        <textarea type="text" id="target" style="border:2px green solid; width:200px; height:50px"></textarea>
    </body>
</html>
