<!doctype html>
<html>
    <head>
        <title>HTML5 Drag and Drop: types attribute returns a DOMStringList</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="types attribute returns a DOMStringList"/>
        <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 types = evt.dataTransfer.types;
                    if(('[object DOMStringList]' == types))
                    {
                        LogTestResult("PASS");
                    }
                    else
                    {
                        LogTestResult("FAIL");
                    }
                }
                else
                {
                    LogTestResult("FAIL");
                }
            }                
            
            EVENT = "drop";
            
            window.onload = function()
            {
                TARGET = document.getElementById("target");
                AddEventListenersForElement(EVENT, DropEvent, false, TARGET);
            }
        </script>
    </head>
    <body>
        <pre>Description: types attribute returns a DOMStringList</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> Select the text inside the red box
                        <li> Drag 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 types attribute must return a live DOMStringList.
        </p>
        <div style="border:2px red solid; width:200px; height:50px">SampleText</div>        
        <br /><br />
        <input type="text" id="target" style="border:2px green solid; width:200px; height:50px"></input>
    </body>
</html>