<html> 
<head>
<script>

function runTest()
{
    if (!window.testRunner)
        return;

    testRunner.dumpAsText();

    var target = document.getElementById("test");
    
    x = target.offsetLeft + target.offsetWidth - 10;
    y = target.offsetTop + target.offsetHeight - 10;

    eventSender.mouseMoveTo(x, y);
    eventSender.mouseDown();
    eventSender.mouseUp();
}

function setTestResultMessage()
{
    var line2Text = document.getElementById("line2").firstChild;

    var result = "FAILED";
    if (getSelection().rangeCount !== 1)
        result = "FAILED: Selection had range count of " + getSelection().rangeCount;
    else if (getSelection().getRangeAt(0).startContainer !== line2Text)
        result = "FAILED: Selection was not within second line of text.";
    else if (getSelection().getRangeAt(0).endContainer !== line2Text)
        result = "FAILED: Selection end was not within second line of text.";
    else if (getSelection().getRangeAt(0).startOffset !== getSelection().getRangeAt(0).endOffset)
        result = "FAILED: Selection was not a caret.";
    else if (getSelection().getRangeAt(0).startOffset !== 6)
        result = "FAILED: Selection was not at the end of the line.";
    else
        result = "SUCCESS";

    document.getElementById("message").firstChild.data = result;
}

</script>
</head>
<body onload="runTest()" onclick="setTestResultMessage()">
<p>
    This is a test for a bug where clicking below a block didn't work right if
    the block was nested inside an inline.
</p>
<p>
    To test interactively, click below and to the right of the 2 in line 2.
    The caret should appear after the 2.
</p>
<p id="message">TEST HAS NOT RUN YET</p>
<hr>
<div contenteditable id="test" style="font-size: 48px; width: 250px; height: 250px"><div>line 1</div><div><span><div id="line2">line 2</div></span></div></div>
</body>
