<!DOCTYPE HTML>
<html>
<body>
<div contenteditable="true" id="editable">
<li id="li" style="border: 1px solid black;"><span><div id="contents" style="border: 1px solid red;">DropAboveMe</div></span></li>
<div><span id="drag">DragMe</span></div>
</div>

<ul id="console"></ul>
<script src="../../resources/dump-as-markup.js"></script>
<script>
function log(str) {
    var li = document.createElement("li");
    li.appendChild(document.createTextNode(str));
    var console = document.getElementById("console");
    console.appendChild(li);
}

function runTest() {
    if (!window.testRunner)
        log("This can only be run automatically using the layout test engine.  To run it manually, drag 'Dragme' and drop it above 'DropAboveMe'.");
    
    window.testRunner.waitUntilDone();

    var drag = document.getElementById("drag");
    var dragx = drag.offsetParent.offsetLeft + drag.offsetLeft + drag.offsetWidth / 2;
    var dragy = drag.offsetParent.offsetTop +  drag.offsetTop + drag.offsetHeight / 2;
    
    eventSender.mouseMoveTo(dragx, dragy);
    eventSender.mouseDown();
    eventSender.mouseUp();
    eventSender.mouseDown();
    eventSender.mouseUp();
    // Leap forward so that the next mouseDown doesn't trigger a triple click.
    eventSender.leapForward(1200);
    
    eventSender.mouseDown();
    // Leap forward so that the mouse movement causes a drag instead of selection creation.
    eventSender.leapForward(500);

    var li = document.getElementById("li");
    
    var dropx = li.offsetLeft + li.offsetWidth / 2;
    var dropy = li.offsetTop + 15;

    eventSender.mouseMoveTo(dropx, dropy);
    eventSender.mouseUp();
    
    window.testRunner.notifyDone();
    Markup.description("This tests dropping content onto a list items content when the content is wrapped in a span.  You should see 'DropAboveMe DragMe'. "
        + "See <rdar://4861080>, but note that the expected behavior is different than what's described there, since the rendering bug <rdar://4907469> has been fixed.");
    Markup.dump(editable);
}

runTest();
</script>
</body>
</html>
