82 lines
2.4 KiB
HTML
82 lines
2.4 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<body>
|
|
<p>This test ensures selectstart is fired exactly once when selecting text by a mouse drag.
|
|
</p><span style='font-size: 50px; padding: 10px;' contenteditable>hello
|
|
</span><pre><script>
|
|
|
|
var span = document.getElementsByTagName('span')[0];
|
|
span.focus();
|
|
|
|
var selectStartCount = 0;
|
|
span.addEventListener('selectstart', function (event) { selectStartCount++; });
|
|
|
|
function expect(title, expectedCount, expectedType) {
|
|
document.write(title + ': ');
|
|
var actualSelectionType = window.getSelection().isCollapsed ? 'caret' : 'range';
|
|
|
|
if (selectStartCount != expectedCount)
|
|
document.writeln('FAIL - expected ' + expectedCount + ' events but got ' + selectStartCount + ' events');
|
|
else if (actualSelectionType != expectedType)
|
|
document.writeln('FAIL - expected selection to be ' + expectedType + ' but was ' + actualSelectionType);
|
|
else
|
|
document.writeln('PASS');
|
|
}
|
|
|
|
if (window.testRunner && !window.eventSender)
|
|
document.write('This test requires eventSender');
|
|
else if (window.testRunner) {
|
|
testRunner.dumpAsText();
|
|
|
|
var y = span.offsetTop + span.offsetHeight / 2;
|
|
|
|
function leapForwardAndMove(x) {
|
|
eventSender.leapForward(200);
|
|
eventSender.mouseMoveTo(span.offsetLeft + x, y);
|
|
}
|
|
|
|
expect('Initial state', 0, 'caret');
|
|
eventSender.dragMode = false;
|
|
eventSender.mouseMoveTo(span.offsetLeft + 5, y);
|
|
eventSender.mouseDown();
|
|
expect('Mouse down', 1, 'caret');
|
|
|
|
leapForwardAndMove(5);
|
|
expect('Moving slightly to the right', 1, 'caret');
|
|
|
|
leapForwardAndMove(-5);
|
|
expect('Moving slightly to the left', 1, 'caret');
|
|
|
|
leapForwardAndMove(span.offsetWidth / 2);
|
|
expect('Moving to the right', 1, 'range');
|
|
|
|
leapForwardAndMove(span.offsetWidth);
|
|
expect('Moving further to the right', 1, 'range');
|
|
|
|
leapForwardAndMove(0);
|
|
expect('Moving back to the left', 1, 'caret');
|
|
|
|
leapForwardAndMove(span.offsetWidth);
|
|
expect('Moving to the right again', 1, 'range');
|
|
|
|
eventSender.mouseUp();
|
|
window.getSelection().setPosition(span, 0);
|
|
eventSender.leapForward(1000);
|
|
|
|
eventSender.mouseMoveTo(span.offsetLeft + span.offsetWidth - 5, y);
|
|
eventSender.mouseDown();
|
|
expect('Mouse down on the right', 2, 'caret');
|
|
|
|
leapForwardAndMove(span.offsetWidth / 2);
|
|
expect('Moving to the left', 2, 'range');
|
|
|
|
eventSender.mouseUp();
|
|
|
|
document.writeln('Done.');
|
|
span.parentNode.removeChild(span);
|
|
}
|
|
|
|
</script></pre>
|
|
</body>
|
|
</html>
|