blob: c289c993dc7041597ee057183528494e09a1912a [file] [log] [blame]
<!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;'>hello world</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, expectedString) {
document.write(title + ': ');
var actualSelectionType = window.getSelection().isCollapsed ? 'caret' : 'range';
var actualString = window.getSelection().toString().trim();
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 if (actualString && actualString != expectedString)
document.writeln('FAIL - expected selection to be "' + expectedString + '" but was "' + actualString + '"');
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;
expect('Initial state', 0, 'caret');
eventSender.mouseMoveTo(span.offsetLeft + 5, y);
eventSender.mouseDown();
expect('Mouse down', 1, 'caret');
eventSender.leapForward(200);
eventSender.mouseUp();
expect('Mouse up', 1, 'caret');
eventSender.leapForward(200);
eventSender.mouseDown();
expect('Second mouse down', 2, 'range', 'hello');
eventSender.leapForward(200);
eventSender.mouseUp();
expect('Second mouse up', 2, 'range', 'hello');
eventSender.leapForward(200);
eventSender.mouseDown();
expect('Third mouse down', 3, 'range', 'hello world');
eventSender.leapForward(200);
eventSender.mouseUp();
expect('Third mouse up', 3, 'range', 'hello world');
document.writeln('Done.');
span.parentNode.removeChild(span);
}
</script></pre>
</body>
</html>