<!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="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>