<!DOCTYPE html>
<html>
<body>
<p>This test ensures selectstart event fires when selecting a word by right click and script can prevent the selection change.</p>
<div id="test">Select a <span id="target">word</span> in this paragraph by a right-click</div>
<script>

if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.dumpEditingCallbacks();
}

var handlerWasCalled = false;
document.body.onselectstart = function () { handlerWasCalled = true; return false; }

var test = document.getElementById('test');

if (window.testRunner && !window.eventSender)
    test.textContent = 'This test requires eventSender';
else {
    window.getSelection().setPosition(document.body, 0);
    var baseNode = getSelection().baseNode;
    var baseOffset = getSelection().baseOffset;

    var target = document.getElementById('target');
    eventSender.mouseMoveTo(target.offsetLeft + target.offsetWidth / 2, target.offsetTop + target.offsetHeight / 2);
    eventSender.contextClick();

    if (!handlerWasCalled)
        test.textContent = 'FAIL - handler was never called';
    else if (!getSelection().isCollapsed || getSelection().baseNode != baseNode || getSelection().baseOffset != baseOffset)
        test.textContent = 'FAIL - selection changed';
    else
        test.textContent = 'PASS';
}

</script>
</body>
</html>
