blob: 1cf780030c35745556827bac1413b3865c8b017e [file] [log] [blame]
<!doctype html>
<title>A hidden carret should not 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">
<textarea id="textcontrol">HEY</textarea>
<script>
// 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();
testRunner.execCommand(eventName);
assert_equals(selectionHitCount, 1, `The <textarea> should receive one ${eventName}-event.`)
assert_equals(documentHitCount, 1, `The document should receive one bubbled ${eventName}-event.`)
assert_equals(lastTarget, selectedElement, `The <textarea> should be the ${eventName}-event's target.`)
checkbox.focus();
testRunner.execCommand(eventName);
assert_equals(selectionHitCount, 1, `The carret is hidden in the <textarea> so the <textarea> should not receive an ${eventName}-event.`)
assert_equals(documentHitCount, 2, `The document should receive one ${eventName}-event.`)
assert_equals(lastTarget, document.body, `The document should be the ${eventName}-event's target.`)
checkbox.blur();
testRunner.execCommand(eventName);
assert_equals(selectionHitCount, 1, `The carret is hidden in the <textarea> so the <textarea> should not receive an ${eventName}-event.`)
assert_equals(documentHitCount, 3, `The document should receive one ${eventName}-event.`)
assert_equals(lastTarget, document.body, `The document should be the ${eventName}-event's target.`)
document.body.focus();
testRunner.execCommand(eventName);
assert_equals(selectionHitCount, 1, `The carret is hidden in the <textarea> so the <textarea> should not receive an ${eventName}-event.`)
assert_equals(documentHitCount, 4, `The document should receive another ${eventName}-event.`)
assert_equals(lastTarget, document.body, `The document should be the ${eventName}-event's target.`)
}
test(() => testClipboardEvent('copy', textcontrol), 'Hidden carrets in textcontrols are not targeted by copy-events.');
test(() => testClipboardEvent('paste', textcontrol), 'Hidden carrets in textcontrols are not targeted by paste-events.');
test(() => testClipboardEvent('cut', textcontrol), 'Hidden carrets in textcontrols are not targeted by cut-events.');
</script>