<body onload="load()">
<p>This test checks that triggering the context menu selects/doesn't select using surround text as context (as platform-appropriate).</p>
<div id="text">New York</div>
<div id="resultmac">RUNNING</div>
<div id="resultwin">RUNNING</div>
<div id="resultunix">RUNNING</div>
</body>
<script>
function test(platform, selectionExpected, expectedText, result)
{
    // clear selection
    window.getSelection().removeAllRanges();

    internals.settings.setEditingBehavior(platform);

    var text = document.getElementById("text");

    var x = text.offsetParent.offsetLeft + text.offsetLeft + 4;
    var y = text.offsetParent.offsetTop + text.offsetTop + text.offsetHeight / 2;

    eventSender.mouseMoveTo(x, y);
    eventSender.contextClick();
    // esc key to kill the context menu
    eventSender.keyDown(String.fromCharCode(0x001B), null);

    var resultElement = document.getElementById(result);
    var selectionType = window.getSelection().type;
    if (selectionExpected) {
        if (selectionType == "Range") {
            var selectionText = window.getSelection().toString();
            if (selectionText == expectedText)
                resultElement.innerHTML = "SUCCESS";
            else
                resultElement.innerHTML = "FAILURE: We expected " + expectedText + ", but we got " + selectionText + ".";
        } else
            resultElement.innerHTML = "FAILURE: There should be a selection.";
    } else {
        if (selectionType == "Range")
            resultElement.innerHTML = "FAILURE: There shouldn't be a selection.";
        else
            resultElement.innerHTML = "SUCCESS";
    }
}

function load()
{
    if (!window.eventSender || !window.testRunner || !window.internals)
        return;

    testRunner.dumpAsText();

    test('mac', true, 'New York', 'resultmac');
    test('win', false, '', 'resultwin');
    test('unix', false, '', 'resultunix');
}
</script>
