api.html (2895B)
1 <!doctype html> 2 <meta charset=utf-8> 3 <title>textInput: API</title> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 <input class=test-el> 7 <textarea class=test-el></textarea> 8 <div contenteditable class=test-el></div> 9 <script src="support/common.js"></script> 10 <script> 11 test(() => { 12 assert_throws_js(TypeError, () => { 13 new TextEvent('textInput'); 14 }); 15 }, "No constructor"); 16 17 test(() => { 18 const e = document.createEvent('TextEvent'); 19 assert_equals(Object.getPrototypeOf(e), window.TextEvent.prototype); 20 assert_equals(Object.getPrototypeOf(Object.getPrototypeOf(e)), window.UIEvent.prototype); 21 assert_equals(Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(e))), window.Event.prototype); 22 }, "document.CreateEvent('TextEvent') prototype chain"); 23 24 test(() => { 25 const e = document.createEvent('TextEvent'); 26 assert_throws_js(TypeError, () => { e.initTextEvent(); }); 27 }, "initTextEvent() no arguments"); 28 29 test(() => { 30 const e = document.createEvent('TextEvent'); 31 e.initTextEvent('foo'); 32 assert_equals(e.type, 'foo'); 33 assert_equals(e.bubbles, false); 34 assert_equals(e.cancelable, false); 35 assert_equals(e.view, null); 36 assert_equals(e.data, 'undefined'); 37 }, "initTextEvent('foo')"); 38 39 test(() => { 40 const e = document.createEvent('TextEvent'); 41 e.initTextEvent('foo', true, true, window, 'bar'); 42 assert_equals(e.type, 'foo'); 43 assert_equals(e.bubbles, true); 44 assert_equals(e.cancelable, true); 45 assert_equals(e.view, window); 46 assert_equals(e.data, 'bar'); 47 }, "initTextEvent('foo', true, true, window, 'bar')"); 48 49 test(() => { 50 const div = document.createElement('div'); 51 let textinputCount = 0; 52 let textInputCount = 0; 53 div.addEventListener('textinput', e => { 54 assert_equals(e.type, 'textinput'); 55 textinputCount++; 56 }); 57 div.addEventListener('textInput', e => { 58 assert_equals(e.type, 'textInput'); 59 textInputCount++; 60 }); 61 const textinputEvent = document.createEvent('TextEvent'); 62 textinputEvent.initTextEvent('textinput'); 63 div.dispatchEvent(textinputEvent); 64 65 const textInputEvent = document.createEvent('TextEvent'); 66 textInputEvent.initTextEvent('textInput'); 67 div.dispatchEvent(textInputEvent); 68 69 assert_equals(textinputCount, 1); 70 assert_equals(textInputCount, 1); 71 }, "case sensitivity: textInput vs textinput"); 72 73 const els = document.querySelectorAll('.test-el'); 74 for (const el of els) { 75 promise_test(t => { 76 return new Promise((resolve, reject) => { 77 el.addEventListener('textInput', reject); 78 el.addEventListener('input', t.step_func(e => { 79 const actualValue = 'value' in el ? el.value : el.textContent; 80 assert_equals(actualValue, 'a'); 81 resolve(); 82 })); 83 el.focus(); 84 document.execCommand('insertText', false, 'a'); 85 }); 86 }, `execCommand('insertText', false, 'a'), ${elDesc(el)}` ); 87 } 88 </script>