| Index: third_party/WebKit/LayoutTests/fast/events/inputevents/inputevent-cut-paste.html
|
| diff --git a/third_party/WebKit/LayoutTests/fast/events/inputevents/inputevent-cut-paste.html b/third_party/WebKit/LayoutTests/fast/events/inputevents/inputevent-cut-paste.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..8d481895c957d27b7da0cd6dc8ec0dbf9489a715
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/fast/events/inputevents/inputevent-cut-paste.html
|
| @@ -0,0 +1,93 @@
|
| +<!DOCTYPE html>
|
| +<html>
|
| +<head>
|
| +<title>InputEvent: beforeinput for Cut and Paste</title>
|
| +<script src="../../../resources/testharness.js"></script>
|
| +<script src="../../../resources/testharnessreport.js"></script>
|
| +</head>
|
| +<body>
|
| +<p id="editable" contenteditable></p>
|
| +<script>
|
| +test(function() {
|
| + assert_not_equals(window.eventSender, undefined, 'This test requires eventSender.');
|
| +
|
| + var editable = document.getElementById('editable');
|
| + var eventOrderRecorder = [];
|
| + editable.addEventListener('beforeinput', () => eventOrderRecorder.push('beforeinput'));
|
| + editable.addEventListener('input', () => eventOrderRecorder.push('input'));
|
| + ['cut', 'paste'].forEach(eventType => editable.addEventListener(
|
| + eventType, () => eventOrderRecorder.push(eventType)));
|
| +
|
| + function testClipboardEventOrder(command, expectedOrder) {
|
| + eventOrderRecorder = [];
|
| + eventSender.keyDown(command);
|
| + assert_array_equals(eventOrderRecorder, expectedOrder, `Testing ${command} event orders`);
|
| + }
|
| +
|
| + // Test Cut and Paste.
|
| + editable.innerHTML = 'abc';
|
| + var selection = window.getSelection();
|
| + selection.collapse(editable, 0);
|
| + selection.extend(editable, 1);
|
| + testClipboardEventOrder('Cut', ['cut', 'beforeinput', 'input']);
|
| + testClipboardEventOrder('Paste', ['paste', 'beforeinput', 'input']);
|
| +}, 'Testing Cut and Paste ordering');
|
| +
|
| +test(function() {
|
| + assert_not_equals(window.eventSender, undefined, 'This test requires eventSender.');
|
| + var editable = document.getElementById('editable');
|
| +
|
| + var lastPlainTextData = "";
|
| + var lastHTMLData = "";
|
| + editable.addEventListener('beforeinput', event => {
|
| + lastPlainTextData = event.dataTransfer ? event.dataTransfer.getData('text/plain') : null;
|
| + lastHTMLData = event.dataTransfer ? event.dataTransfer.getData('text/html') : null;
|
| + });
|
| + function testClipboardDataTransfer(command, expectedPlainText, expectedHTML) {
|
| + lastPlainTextData = "";
|
| + lastHTMLData = "";
|
| + eventSender.keyDown(command);
|
| + assert_equals(lastPlainTextData, expectedPlainText, `Testing ${command} getData('text/plain')`);
|
| + if (expectedHTML && expectedHTML.test) {
|
| + assert_regexp_match(lastHTMLData, expectedHTML, `Testing ${command} getData('text/html')`);
|
| + } else {
|
| + assert_equals(lastHTMLData, expectedHTML, `Testing ${command} getData('text/html')`);
|
| + }
|
| + }
|
| +
|
| + // Test Cut and Paste.
|
| + editable.innerHTML = '<b>abc</b>';
|
| + var selection = window.getSelection();
|
| + selection.collapse(editable, 0);
|
| + selection.extend(editable, 1);
|
| + // Cut has null |dataTransfer|.
|
| + testClipboardDataTransfer('Cut', null, null);
|
| + // Paste has |dataTransfer| with additional inline styles.
|
| + testClipboardDataTransfer('Paste', 'abc', /^<b.*>abc<\/b>$/);
|
| +}, 'Testing Cut and Paste dataTransfer');
|
| +
|
| +test(function() {
|
| + assert_not_equals(window.eventSender, undefined, 'This test requires eventSender.');
|
| + var editable = document.getElementById('editable');
|
| +
|
| + editable.addEventListener('beforeinput', event => {
|
| + if (event.inputType == 'deleteByCut') {
|
| + // Prevents text deletion but not Clipboard update.
|
| + event.preventDefault();
|
| + }
|
| + });
|
| +
|
| + // Test Cut and Paste.
|
| + editable.innerHTML = 'abc';
|
| + var selection = window.getSelection();
|
| + selection.collapse(editable, 0);
|
| + selection.extend(editable, 1);
|
| + // The text won't be removed but should still update Clipboard.
|
| + eventSender.keyDown('Cut');
|
| + selection.collapse(editable, 0);
|
| + eventSender.keyDown('Paste');
|
| + assert_equals(editable.innerHTML, 'abcabc', 'Testing Cut.preventDefault() and Paste.')
|
| +}, 'Testing Cut and Paste preventDefault()');
|
| +</script>
|
| +</body>
|
| +</html>
|
|
|