<!DOCTYPE html>
<html>
<body>
<p>This test ensures selectstart event fires when selection is created by arrow key and script can prevent the selection change.</p>
If running this test manually, click on the div ("Hello World") and try to select the text using arrow keys.<br>
Expected result: SelectStart event will fire when user starts extending the selection, but due to script preventDefault it prevents the selection change.<br>
<div contenteditable>Hello World</div>
<script>


var selectStartCount = 0;
var div = document.getElementsByTagName('div')[0];
div.addEventListener('selectstart', function (event) { event.preventDefault(); selectStartCount++; });
div.focus();
window.getSelection().setPosition(div.firstChild, 1);

if (window.testRunner) {
    testRunner.dumpAsText();
    eventSender.keyDown("rightArrow", ["shiftKey"]);
    logResult("Check Right arrow + Shift", 1);

    eventSender.keyDown("rightArrow", ["shiftKey"], ["ctrlKey"]);
    logResult("Check Right arrow + Shift + Control", 2);

    eventSender.keyDown("end", ["shiftKey"]);
    logResult("Check End + Shift", 3);
}

function logResult(title, expectedCount) {
    var range = window.getSelection().getRangeAt(0);
    document.write(title + ': ');
    if (selectStartCount != expectedCount)
        document.write('FAIL -  expected ' + expectedCount + ' events but got ' + selectStartCount + ' events');
    else if (range.startOffset != 1 || range.endOffset != 1)
        document.write('FAIL - selection changed');
    else
        document.write('PASS');
    document.write('<br>');
}

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