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

Side by Side Diff: third_party/WebKit/LayoutTests/fast/events/inputevents/inputevent-cancelable.html

Issue 2704613002: [InputEvent] Make typing and IME related input types non-cancelable (Closed)
Patch Set: yosin's review: Replace == with === Created 3 years, 10 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
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/editing/EditingUtilities.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title>InputEvent: cancelable</title>
5 <script src="../../../resources/testharness.js"></script>
6 <script src="../../../resources/testharnessreport.js"></script>
7 <style>
8 div {
9 width: 100px;
10 height: 100px;
11 }
12 </style>
13 </head>
14 <body>
15 <div id="editable" contenteditable></div>
16 <div id="editable1" contenteditable>EditableText</div>
17 <div id="editable2" contenteditable></div>
18 <script>
19 function simulateDragDrop(dragElement, dropElement) {
20 if (dragElement.select) {
21 dragElement.select();
22 } else {
23 var selection = window.getSelection();
24 selection.collapse(dragElement, 0);
25 selection.extend(dragElement, 1);
26 }
27
28 eventSender.mouseMoveTo(dragElement.offsetLeft + dragElement.offsetWidth / 2 ,
29 dragElement.offsetTop + dragElement.offsetHeight / 2 );
30 eventSender.mouseDown();
31 eventSender.leapForward(600);
32 eventSender.mouseMoveTo(dropElement.offsetLeft + dropElement.offsetWidth / 2 ,
33 dropElement.offsetTop + dropElement.offsetHeight / 2 );
34 eventSender.mouseUp();
35 }
36
37 async_test(t => {
38 assert_not_equals(window.eventSender, undefined, 'This test requires eventSe nder.');
39 assert_not_equals(window.testRunner, undefined, 'This test requires testRunn er.');
40 assert_not_equals(internals, undefined, 'This test requires internals.');
41 assert_not_equals(textInputController, undefined, 'This test requires textIn putController.');
42
43 const editable = document.getElementById('editable');
44 const editable1 = document.getElementById('editable1');
45 const editable2 = document.getElementById('editable2');
46 const kNoncancelableInputTypes = [
47 'insertText', 'insertLineBreak', 'insertParagraph',
48 'insertCompositionText', 'insertReplacementText',
49 'deleteWordBackward', 'deleteWordForward',
50 'deleteLineBackward', 'deleteLineForward',
51 'deleteContentBackward', 'deleteContentForward',
52 ];
53
54 let lastBeforeInputType = '';
55 document.addEventListener('beforeinput', t.step_func(event => {
56 lastBeforeInputType = event.inputType;
57 assert_equals(kNoncancelableInputTypes.indexOf(event.inputType) === -1, event.cancelable);
58 }));
59
60 function testKeyDown(key, modifiers, inputType) {
61 lastBeforeInputType = '';
62 eventSender.keyDown(key, modifiers);
63 assert_equals(inputType, lastBeforeInputType, `${modifiers.toString()}+$ {key} should produce input type: ${inputType}`);
64 }
65
66 function testCommand(command, inputType) {
67 lastBeforeInputType = '';
68 testRunner.execCommand(command);
69 assert_equals(inputType, lastBeforeInputType, `${command} should produce input type: ${inputType}`);
70 }
71
72 // Typing
73 editable.focus();
74 testKeyDown('a', [], 'insertText');
75 testKeyDown('6', [], 'insertText');
76 testKeyDown('l', ['shiftKey'], 'insertText');
77 testKeyDown('w', ['shiftKey'], 'insertText');
78 testKeyDown('Enter', [], 'insertParagraph');
79 testKeyDown('Enter', ['shiftKey'], 'insertLineBreak');
80
81 // Deletion
82 const isMacOS = navigator.platform.indexOf('Mac') === 0;
83 const deleteWordModifier = isMacOS ? 'altKey' : 'ctrlKey';
84 editable.innerHTML = 'abc def</br>123 456';
85 const selection = window.getSelection();
86 selection.collapse(editable, 1); // End of first line.
87 testKeyDown('Backspace', [], 'deleteContentBackward');
88 testKeyDown('Delete', [], 'deleteContentForward');
89 testKeyDown('Backspace', [deleteWordModifier], 'deleteWordBackward');
90 testKeyDown('Delete', [deleteWordModifier], 'deleteWordForward');
91
92 // Format
93 editable.innerHTML = 'abc';
94 selection.collapse(editable, 0);
95 selection.extend(editable, 1);
96 testCommand('bold', 'formatBold');
97 testCommand('italic', 'formatItalic');
98 testCommand('underline', 'formatUnderline');
99 testCommand('strikeThrough', 'formatStrikeThrough');
100 testCommand('superscript', 'formatSuperscript');
101 testCommand('subscript', 'formatSubscript');
102
103 // Cut and paste
104 editable.innerHTML = 'abc';
105 selection.collapse(editable, 0);
106 selection.extend(editable, 1);
107 testKeyDown('Cut', [], 'deleteByCut');
108 testKeyDown('Paste', [], 'insertFromPaste');
109
110 // Drag and drop
111 simulateDragDrop(editable1, editable2);
112 assert_equals('insertFromDrop', lastBeforeInputType);
113
114 // Undo and redo
115 testCommand('undo', 'historyUndo');
116 testCommand('redo', 'historyRedo');
117
118 // Spell-checker
119 editable.innerHTML = 'appla';
120 selection.collapse(editable, 0);
121 selection.extend(editable, 1);
122 internals.setMarker(document, selection.getRangeAt(0), 'Spelling');
123 internals.replaceMisspelled(document, 'apple');
124 assert_equals('insertReplacementText', lastBeforeInputType);
125
126 // IME
127 editable.innerHTML = 'wo';
128 selection.collapse(editable, 0);
129 selection.extend(editable, 1);
130 textInputController.setComposition('word');
131 assert_equals('insertCompositionText', lastBeforeInputType);
132
133 t.done();
134 }, 'Text input and IME related input types are non-cancelable.');
135
136 </script>
137 </body>
138 </html>
OLDNEW
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/editing/EditingUtilities.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698