<head>
<style>
span:before {
    content: "<before> ";
}
span:after {
    content: " <after>";
}
</style>
<script>
    function nodeAsString(node)
    {
        if (node && node.nodeType == Node.TEXT_NODE)
            return "text in " + nodeAsString(node.parentNode);
        if (node && node.nodeType == Node.ELEMENT_NODE) {
            var id;
            if (id = node.getAttribute("id"))
                return id;
        }
        return node;
    }
    function selectionAsString()
    {
        return "(" + nodeAsString(getSelection().anchorNode)
            + ", " + getSelection().anchorOffset
            + "), (" + nodeAsString(getSelection().focusNode)
            + ", " + getSelection().focusOffset + ")";        
    }
    function checkSelection(step, expected)
    {
        if (selectionAsString() !== expected) {
            document.getElementById("result").innerHTML = "FAIL: After step " + step + " selection was " + selectionAsString();
            return true;
        }
        return false;
    }
    function runTest()
    {
        if (window.testRunner)
            testRunner.dumpAsText();

        var block = document.getElementById("block");
        var x = block.offsetLeft + 5;
        var y = block.offsetTop + 5;

        if (window.eventSender) {
            // Click in the anonymous content, check that cursor goes to
            // the start of the span.
            eventSender.mouseMoveTo(x, y);
            eventSender.mouseDown();
            eventSender.mouseUp();
        }

        if (checkSelection(1, "(text in span, 0), (text in span, 0)"))
            return;

        x = block.offsetLeft + 200;

        if (window.eventSender) {
            // Click in the regular text, make sure it goes into the span.
            eventSender.mouseMoveTo(x, y);
            eventSender.mouseDown();
            eventSender.mouseUp();
        }

        if (checkSelection(2, "(text in span, 7), (text in span, 7)"))
            return;

        document.getElementById("result").innerHTML = "SUCCESS";
    }
</script>
</head>
<body onload="runTest()">
<p>This tests clicking in anonymous content to see if a selection is successfully created.</p>
<p id="block" contentEditable style="border: 1px solid blue; font-size:30px"><span id="span">This is the selectable text.</span></div>
<p id="result">TEST DID NOT RUN</div>
</body>
