blob: f5af3fdf117b51a60a70e911afd4911308e5cbe9 [file] [log] [blame]
<!doctype html>
<title>A visible but unfocused selection should receive ClipboardEvent</title>
<link rel="help" href="https://www.w3.org/TR/clipboard-apis/#fire-a-clipboard-event">
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<input type="checkbox" id="checkbox">
<p contenteditable id="ce">HEY</p>
<script>
resetSelection = function(selectedElement) {
selectedElement.innerHTML = "SOMETEXT"
let range = document.createRange();
range.selectNodeContents(selectedElement);
window.getSelection().removeAllRanges();
window.getSelection().addRange(range);
}
// We use testRunner.execCommand() to test user-triggered (not scripted) clipboard events.
testClipboardEvent = function(eventName, selectedElement) {
let selectionHitCount = 0;
let documentHitCount = 0;
let lastTarget;
selectionLog = function(e) {
selectionHitCount++;
lastTarget = e.target;
}
documentLog = function(e) {
documentHitCount++;
lastTarget = e.target;
}
selectedElement.addEventListener(eventName, selectionLog);
document.addEventListener(eventName, documentLog);
selectedElement.focus();
resetSelection(selectedElement);
testRunner.execCommand(eventName);
assert_equals(selectionHitCount, 1, `The selection should receive a ${eventName}-event.`)
assert_equals(documentHitCount, 1, `The document should receive a bubbled ${eventName}-event.`)
assert_equals(lastTarget, selectedElement, `The selection should be the ${eventName}-event's target.`)
resetSelection(selectedElement);
checkbox.focus();
testRunner.execCommand(eventName);
assert_equals(selectionHitCount, 2, `The selection should receive a ${eventName}-event.`)
assert_equals(documentHitCount, 2, `The document should receive a bubbled ${eventName}-event.`)
assert_equals(lastTarget, selectedElement, `The selection should be the ${eventName}-event's target.`)
resetSelection(selectedElement);
checkbox.blur();
testRunner.execCommand(eventName);
assert_equals(selectionHitCount, 3, `The selection should receive a ${eventName}-event.`)
assert_equals(documentHitCount, 3, `The document should receive a bubbled ${eventName}-event.`)
assert_equals(lastTarget, selectedElement, `The selection should be the ${eventName}-event's target.`)
resetSelection(selectedElement);
document.body.focus();
testRunner.execCommand(eventName);
assert_equals(selectionHitCount, 4, `The selection should receive a ${eventName}-event.`)
assert_equals(documentHitCount, 4, `The document should receive a bubbled ${eventName}-event.`)
assert_equals(lastTarget, selectedElement, `The selection should be the ${eventName}-event's target.`)
resetSelection(selectedElement);
}
test(() => testClipboardEvent('copy', ce), 'Visible but unfocused selections are targeted by copy-events.');
test(() => testClipboardEvent('paste', ce), 'Visible but unfocused selections are targeted by paste-events.');
test(() => testClipboardEvent('cut', ce), 'Visible but unfocused selections are targeted by cut-events.');
</script>