<!doctype html>
<html>
  <head>
    <title>text/uri-list conversion</title>
    <style type="text/css">
div { height: 100px; width: 100px; background: orange; }
    </style>
    <script type="text/javascript">
window.onload = function () {
  var drag = document.getElementsByTagName('div')[0], fails = [];
  drag.ondragstart = function (e) {
    e.dataTransfer.setData('url','http://example.com/');
    if( !e.dataTransfer.getData('url') ) {
      document.getElementsByTagName('p')[0].innerHTML = "FAIL - getData('url') returned nothing";
    } else if( e.dataTransfer.getData('url') != e.dataTransfer.getData('text/uri-list') ) {
      document.getElementsByTagName('p')[0].innerHTML = 'FAIL - text/uri-list is not the same as url';
    } else {

      e.dataTransfer.setData('url','#foo\r\n http://example.com/#bar \r\n http://example.org/');
      if( e.dataTransfer.getData('url') != 'http://example.com/#bar' ) {
        document.getElementsByTagName('p')[0].innerHTML = 'FAIL - only the first URL should be returned - "'+e.dataTransfer.getData('url')+'"';
      } else if( e.dataTransfer.getData('text/uri-list') != '#foo\r\n http://example.com/#bar \r\n http://example.org/' ) {
        document.getElementsByTagName('p')[0].innerHTML = 'FAIL - text/uri-list should return the full data';
      } else {

        e.dataTransfer.setData('url',' ');
        if( e.dataTransfer.getData('url') ) {
          document.getElementsByTagName('p')[0].innerHTML = 'FAIL - space was not a valid URL so an empty string should have been returned';
        } else {
          document.getElementsByTagName('p')[0].innerHTML = 'PASS';
        }

      }

    }
    e.preventDefault();
  };
};
    </script>
  </head>
  <body>
    <div draggable="true"></div>
    <p>Attempt to drag the orange square.</p>
    <noscript><p>Enable JavaScript and reload</p></noscript>
  </body>
</html>
