<html> 
<head>
<script>

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

    layoutTestController.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>
