OLD | NEW |
1 <title>InputEvent: macOS Transpose</title> | 1 <title>InputEvent: macOS Transpose</title> |
2 <script src="../../../resources/testharness.js"></script> | 2 <script src="../../../resources/testharness.js"></script> |
3 <script src="../../../resources/testharnessreport.js"></script> | 3 <script src="../../../resources/testharnessreport.js"></script> |
| 4 <script src='../../../editing/assert_selection.js'></script> |
4 <div id="editable" contenteditable></div> | 5 <div id="editable" contenteditable></div> |
5 <textarea id="txt"></textarea> | 6 <textarea id="txt"></textarea> |
6 <script> | 7 <script> |
7 test(() => { | 8 test(() => { |
8 assert_not_equals(window.testRunner, undefined, 'This test requires testRunn
er.'); | 9 assert_not_equals(window.testRunner, undefined, 'This test requires testRunn
er.'); |
9 | 10 |
10 let eventRecorder = ''; | 11 let eventRecorder = ''; |
11 document.addEventListener('beforeinput', event => { | 12 document.addEventListener('beforeinput', event => { |
12 eventRecorder += `beforeinput-${event.inputType}-${event.data}-`; | 13 const range = event.getTargetRanges()[0]; |
| 14 eventRecorder += `beforeinput-${event.inputType}-${event.data}-${range.s
tartOffset}-${range.endOffset}-`; |
13 }); | 15 }); |
14 document.addEventListener('input', event => { | 16 document.addEventListener('input', event => { |
15 eventRecorder += `input-${event.inputType}`; | 17 eventRecorder += `input-${event.inputType}`; |
16 }); | 18 }); |
17 | 19 |
18 const editable = document.getElementById('editable'); | 20 const editable = document.getElementById('editable'); |
19 editable.innerHTML = 'abc'; | 21 editable.innerHTML = 'abc'; |
20 editable.focus(); | 22 editable.focus(); |
21 const selection = window.getSelection(); | 23 const selection = window.getSelection(); |
22 selection.collapse(editable, 1); // End of first line. | 24 selection.collapse(editable, 1); // End of first line. |
23 | 25 |
24 // Test Transpose. | 26 // Test Transpose. |
25 eventRecorder = ''; | 27 eventRecorder = ''; |
26 testRunner.execCommand('transpose'); | 28 testRunner.execCommand('transpose'); |
27 assert_equals(editable.innerHTML, 'acb'); | 29 assert_equals(editable.innerHTML, 'acb'); |
28 assert_equals(eventRecorder, 'beforeinput-insertTranspose-cb-input-insertTra
nspose'); | 30 assert_equals(eventRecorder, 'beforeinput-insertTranspose-cb-1-3-input-inser
tTranspose'); |
29 }, 'Transpose on contenteditable'); | 31 }, 'Transpose on contenteditable'); |
30 | 32 |
31 test(() => { | 33 test(() => { |
32 assert_not_equals(window.testRunner, undefined, 'This test requires testRunn
er.'); | 34 assert_not_equals(window.testRunner, undefined, 'This test requires testRunn
er.'); |
33 | 35 |
34 let eventRecorder = ''; | 36 let eventRecorder = ''; |
35 document.addEventListener('beforeinput', event => { | 37 document.addEventListener('beforeinput', event => { |
36 eventRecorder += `beforeinput-${event.inputType}-${event.data}-`; | 38 eventRecorder += `beforeinput-${event.inputType}-${event.data}-`; |
37 }); | 39 }); |
38 document.addEventListener('input', event => { | 40 document.addEventListener('input', event => { |
39 eventRecorder += `input-${event.inputType}`; | 41 eventRecorder += `input-${event.inputType}`; |
40 }); | 42 }); |
41 | 43 |
42 const txt = document.getElementById('txt'); | 44 const txt = document.getElementById('txt'); |
43 txt.value = 'abc'; | 45 txt.value = 'abc'; |
44 txt.focus(); | 46 txt.focus(); |
45 txt.setSelectionRange(3, 3); // End of first line. | 47 txt.setSelectionRange(3, 3); // End of first line. |
46 | 48 |
47 // Test Transpose. | 49 // Test Transpose. |
48 eventRecorder = ''; | 50 eventRecorder = ''; |
49 testRunner.execCommand('transpose'); | 51 testRunner.execCommand('transpose'); |
50 assert_equals(txt.value, 'acb'); | 52 assert_equals(txt.value, 'acb'); |
51 assert_equals(eventRecorder, 'beforeinput-insertTranspose-cb-input-insertTra
nspose'); | 53 assert_equals(eventRecorder, 'beforeinput-insertTranspose-cb-input-insertTra
nspose'); |
52 }, 'Transpose on <textarea>'); | 54 }, 'Transpose on <textarea>'); |
| 55 |
| 56 test(() => { |
| 57 assert_not_equals(window.testRunner, undefined, 'This test requires testRunn
er.'); |
| 58 |
| 59 assert_selection( |
| 60 '<div contenteditable id="editable1">a|bc</div>', |
| 61 selection => { |
| 62 const editable1 = selection.document.getElementById('editable1'); |
| 63 editable1.addEventListener('beforeinput', event => { |
| 64 event.preventDefault(); |
| 65 }); |
| 66 testRunner.execCommand('transpose'); |
| 67 }, |
| 68 '<div contenteditable id="editable1">a|bc</div>'); |
| 69 }, 'Transpose should not modify selection when canceled'); |
| 70 |
| 71 test(() => { |
| 72 assert_not_equals(window.testRunner, undefined, 'This test requires testRunn
er.'); |
| 73 |
| 74 assert_selection( |
| 75 '<div contenteditable id="editable1">a|bc</div>', |
| 76 selection => { |
| 77 const editable1 = selection.document.getElementById('editable1'); |
| 78 editable1.addEventListener('beforeinput', event => { |
| 79 selection.collapse(editable1, 1); // End of first line. |
| 80 }); |
| 81 testRunner.execCommand('transpose'); |
| 82 }, |
| 83 '<div contenteditable id="editable1">acb|</div>'); |
| 84 }, 'Transpose should still apply when selection changed'); |
53 </script> | 85 </script> |
OLD | NEW |