Chromium Code Reviews| 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..f9f12bb34976081a387ffd927c558cbf42651a9a |
| --- /dev/null |
| +++ b/third_party/WebKit/LayoutTests/fast/events/inputevents/inputevent-cut-paste.html |
| @@ -0,0 +1,93 @@ |
| +<!DOCTYPE html> |
|
yosin_UTC9
2016/08/23 04:23:54
Could you add a test case which destroy a frame co
|
| +<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> |