onselectionchange-on-document.html (2795B)
1 <!DOCTYPE html> 2 <meta charset="utf-8"> 3 <link rel="help" href="https://w3c.github.io/selection-api/#selectionchange-event"> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 <body> 7 <div id="container"><br><br></div> 8 <script> 9 10 promise_test(() => { 11 return new Promise(resolve => { 12 let didFireSelectionChangeEvent = false; 13 document.addEventListener("selectionchange", () => { didFireSelectionChangeEvent = true; resolve(); }, {once: true}); 14 getSelection().setPosition(container, 1); 15 assert_false(didFireSelectionChangeEvent); 16 }); 17 }, "selectionchange event on document fires"); 18 19 promise_test(() => { 20 return (async function() { 21 let selectionChangeCount = 0; 22 document.addEventListener("selectionchange", () => ++selectionChangeCount); 23 container.innerHTML = '<span><br></span><span><br></span>'; 24 getSelection().setPosition(container, 1); 25 assert_equals(selectionChangeCount, 0); 26 getSelection().setPosition(container, 2); 27 assert_equals(selectionChangeCount, 0); 28 await new Promise(setTimeout); 29 assert_equals(selectionChangeCount, 1); 30 })(); 31 }, "selectionchange event on document fires once"); 32 33 promise_test(() => { 34 return (async function() { 35 let selectionChangeCount = 0; 36 document.addEventListener("selectionchange", () => ++selectionChangeCount); 37 container.innerHTML = '<span><br></span><span><br></span>'; 38 getSelection().setPosition(container, 1); 39 assert_equals(selectionChangeCount, 0); 40 getSelection().setPosition(container, 2); 41 assert_equals(selectionChangeCount, 0); 42 await new Promise(setTimeout); 43 assert_equals(selectionChangeCount, 1); 44 getSelection().setPosition(container, 0); 45 assert_equals(selectionChangeCount, 1); 46 getSelection().setPosition(container, 2); 47 assert_equals(selectionChangeCount, 1); 48 await new Promise(setTimeout); 49 assert_equals(selectionChangeCount, 2); 50 })(); 51 }, "task to fire selectionchange event gets queued each time selection is mutated"); 52 53 promise_test(() => { 54 return (async function() { 55 let selectionChangeCount = 0; 56 document.addEventListener("selectionchange", () => { 57 if (!selectionChangeCount) { 58 getSelection().setPosition(container, 2); 59 getSelection().setPosition(container, 0); 60 } 61 ++selectionChangeCount; 62 }); 63 container.innerHTML = '<b><br></b><b><br></b>'; 64 getSelection().setPosition(container, 1); 65 assert_equals(selectionChangeCount, 0); 66 await new Promise(setTimeout); 67 assert_equals(selectionChangeCount, 1); 68 await new Promise(setTimeout); 69 assert_equals(selectionChangeCount, 2); 70 })(); 71 }, "has scheduled selectionchange event is set to false at the beginning of a task to fire selectionchange event"); 72 73 </script>