basic.sub.js (1813B)
1 const els = document.querySelectorAll('.test-el'); 2 const key = "{{GET[key]}}"; 3 const keyRaw = keyMapping[key] || key; 4 const expectedData = key === "Enter" ? "\n" : key; 5 const selectionStart = {{GET[selectionStart]}}; 6 const selectionEnd = {{GET[selectionEnd]}}; 7 const expectedValue = "{{GET[expectedValue]}}"; 8 9 for (const el of els) { 10 promise_test(t => { 11 return new Promise((resolve, reject) => { 12 let beforeinputEvents = 0; 13 let textInputEvents = 0; 14 el.addEventListener('beforeinput', t.step_func(e => { 15 beforeinputEvents++; 16 })); 17 el.addEventListener('textInput', t.step_func(e => { 18 textInputEvents++; 19 assert_equals(beforeinputEvents, 1); 20 assert_equals(e.data, expectedData); 21 assert_true(e.bubbles); 22 assert_true(e.cancelable); 23 assert_equals(e.view, window); 24 assert_equals(e.detail, 0); 25 assert_true(e instanceof window.TextEvent); 26 })); 27 el.addEventListener('input', t.step_func(e => { 28 assert_equals(textInputEvents, 1); 29 if (expectedValue === "\n" && !(el instanceof HTMLInputElement) && !(el instanceof HTMLTextAreaElement)) { 30 // New paragraph in contenteditable during editing is weird. 31 // innerHTML is <div><br></div><div><br></div> 32 // ...but later changes to <br> 33 // So, check that there's at least one <br>. 34 assert_true(getValue(el).indexOf('<br>') > -1); 35 } else { 36 assert_equals(getValue(el), expectedValue); 37 } 38 resolve(); 39 })); 40 el.onfocus = t.step_func(e => { 41 if (window.test_driver) { 42 test_driver.send_keys(el, keyRaw); 43 } 44 }); 45 el.focus(); 46 setSelection(el, selectionStart, selectionEnd); 47 }); 48 }, `${document.title}, ${elDesc(el)}`); 49 }