<!DOCTYPE html>
<html>
<body>
<style>
.select-all {
    border: 1px solid black;
    height: 100px;
    width: 100px;
    -webkit-user-select: all;
    -moz-user-select: all;
}
</style>
<p id="description">This tests shift + selecting two discontinuous elements with user-select: all. WebKit should select the both elements instead of moving the selection.
To manually test, click to select the first element and shift-click the second element. WebKit should select both elements.</p>
<div id="test">
<div id="first" class="select-all">First element</div>
Some other text.
<div id="second" class="select-all">Second element</div>
</div>
<script src="../../resources/dump-as-markup.js"></script>
<script>

Markup.description(document.getElementById('description').textContent);

function clickOnElement(element, keys) {
    eventSender.mouseMoveTo(element.offsetLeft + 10, element.offsetTop + 10);
    eventSender.mouseDown(0, keys);
    eventSender.mouseUp(0, keys);
}

function runTest(editingBehavior) {
    internals.settings.setEditingBehavior(editingBehavior);

    var postfix = ' (' + editingBehavior + ')';

    clickOnElement(document.getElementById('first'));
    Markup.dump('test', 'After clicking on the first element' + postfix);
    eventSender.leapForward(300);
    clickOnElement(document.getElementById('second'), ['shiftKey']);
    Markup.dump('test', 'After shift clicking on the second element' + postfix);

    getSelection().removeAllRanges();

    clickOnElement(document.getElementById('second'));
    Markup.dump('test', 'After clicking on the second element' + postfix);
    eventSender.leapForward(300);
    clickOnElement(document.getElementById('first'), ['shiftKey']);
    Markup.dump('test', 'After shift clicking on the first element' + postfix);
}

if (window.eventSender) {
    runTest('Mac');
    runTest('Win');
    runTest('Unix');

} else
    Markup.noAutoDump();

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