Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1714)

Unified Diff: third_party/WebKit/LayoutTests/fast/events/inputevents/inputevent-cut-paste.html

Issue 2258663003: [InputEvent] Support |deleteByCut|&|insertFromPaste| with |dataTransfer| field (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: yosin's review2, fix nits Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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>

Powered by Google App Engine
This is Rietveld 408576698