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

Side by Side 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: Support cut/paste with |dataTransfer| field and correct event order Created 4 years, 3 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 unified diff | Download patch
OLDNEW
(Empty)
1 <!DOCTYPE html>
yosin_UTC9 2016/08/23 04:23:54 Could you add a test case which destroy a frame co
2 <html>
3 <head>
4 <title>InputEvent: beforeinput for Cut and Paste</title>
5 <script src="../../../resources/testharness.js"></script>
6 <script src="../../../resources/testharnessreport.js"></script>
7 </head>
8 <body>
9 <p id="editable" contenteditable></p>
10 <script>
11 test(function() {
12 assert_not_equals(window.eventSender, undefined, 'This test requires eventSe nder.');
13
14 var editable = document.getElementById('editable');
15 var eventOrderRecorder = [];
16 editable.addEventListener('beforeinput', () => eventOrderRecorder.push('befo reinput'));
17 editable.addEventListener('input', () => eventOrderRecorder.push('input'));
18 ['cut', 'paste'].forEach(eventType => editable.addEventListener(
19 eventType, () => eventOrderRecorder.push(eventType)));
20
21 function testClipboardEventOrder(command, expectedOrder) {
22 eventOrderRecorder = [];
23 eventSender.keyDown(command);
24 assert_array_equals(eventOrderRecorder, expectedOrder, `Testing ${comman d} event orders`);
25 }
26
27 // Test Cut and Paste.
28 editable.innerHTML = 'abc';
29 var selection = window.getSelection();
30 selection.collapse(editable, 0);
31 selection.extend(editable, 1);
32 testClipboardEventOrder('Cut', ['cut', 'beforeinput', 'input']);
33 testClipboardEventOrder('Paste', ['paste', 'beforeinput', 'input']);
34 }, 'Testing Cut and Paste ordering');
35
36 test(function() {
37 assert_not_equals(window.eventSender, undefined, 'This test requires eventSe nder.');
38 var editable = document.getElementById('editable');
39
40 var lastPlainTextData = "";
41 var lastHTMLData = "";
42 editable.addEventListener('beforeinput', event => {
43 lastPlainTextData = event.dataTransfer ? event.dataTransfer.getData('tex t/plain') : null;
44 lastHTMLData = event.dataTransfer ? event.dataTransfer.getData('text/htm l') : null;
45 });
46 function testClipboardDataTransfer(command, expectedPlainText, expectedHTML) {
47 lastPlainTextData = "";
48 lastHTMLData = "";
49 eventSender.keyDown(command);
50 assert_equals(lastPlainTextData, expectedPlainText, `Testing ${command} getData('text/plain')`);
51 if (expectedHTML && expectedHTML.test) {
52 assert_regexp_match(lastHTMLData, expectedHTML, `Testing ${command} getData('text/html')`);
53 } else {
54 assert_equals(lastHTMLData, expectedHTML, `Testing ${command} getDat a('text/html')`);
55 }
56 }
57
58 // Test Cut and Paste.
59 editable.innerHTML = '<b>abc</b>';
60 var selection = window.getSelection();
61 selection.collapse(editable, 0);
62 selection.extend(editable, 1);
63 // Cut has null |dataTransfer|.
64 testClipboardDataTransfer('Cut', null, null);
65 // Paste has |dataTransfer| with additional inline styles.
66 testClipboardDataTransfer('Paste', 'abc', /^<b.*>abc<\/b>$/);
67 }, 'Testing Cut and Paste dataTransfer');
68
69 test(function() {
70 assert_not_equals(window.eventSender, undefined, 'This test requires eventSe nder.');
71 var editable = document.getElementById('editable');
72
73 editable.addEventListener('beforeinput', event => {
74 if (event.inputType == 'deleteByCut') {
75 // Prevents text deletion but not Clipboard update.
76 event.preventDefault();
77 }
78 });
79
80 // Test Cut and Paste.
81 editable.innerHTML = 'abc';
82 var selection = window.getSelection();
83 selection.collapse(editable, 0);
84 selection.extend(editable, 1);
85 // The text won't be removed but should still update Clipboard.
86 eventSender.keyDown('Cut');
87 selection.collapse(editable, 0);
88 eventSender.keyDown('Paste');
89 assert_equals(editable.innerHTML, 'abcabc', 'Testing Cut.preventDefault() an d Paste.')
90 }, 'Testing Cut and Paste preventDefault()');
91 </script>
92 </body>
93 </html>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698