Selection-getComposedRanges-collapsed.html (2995B)
1 <!DOCTYPE html> 2 <html> 3 <body> 4 <meta name="author" href="mailto:dizhangg@chromium.org"> 5 <meta name="assert" content="Selection's getComposedRanges should return a sequence of static ranges"> 6 <link rel="help" href="https://w3c.github.io/selection-api/#dom-selection-getcomposedranges"> 7 <script src="/resources/testharness.js"></script> 8 <script src="/resources/testharnessreport.js"></script> 9 10 <div id="container"> 11 <div id="host1"> 12 <template shadowrootmode=open>C</template> 13 A - not slotted 14 </div> 15 <div id="host2"> 16 <template shadowrootmode=open>D</template> 17 B - not slotted 18 </div> 19 </div> 20 21 <script> 22 23 const c = host1.shadowRoot; 24 const d = host2.shadowRoot; 25 26 test(() => { 27 const sel = getSelection(); 28 sel.setBaseAndExtent(c, 0, d, 0); 29 30 assert_equals(sel.getRangeAt(0).startContainer, d); 31 assert_equals(sel.getRangeAt(0).startOffset, 0); 32 assert_equals(sel.getRangeAt(0).endContainer, d); 33 assert_equals(sel.getRangeAt(0).endOffset, 0); 34 35 assert_equals(sel.getComposedRanges()[0].startContainer, container); 36 assert_equals(sel.getComposedRanges()[0].startOffset, 1); 37 assert_equals(sel.getComposedRanges()[0].endContainer, container); 38 assert_equals(sel.getComposedRanges()[0].endOffset, 4); 39 40 assert_equals(sel.getComposedRanges({ shadowRoots: [c] })[0].startContainer, c); 41 assert_equals(sel.getComposedRanges({ shadowRoots: [c] })[0].startOffset, 0); 42 assert_equals(sel.getComposedRanges({ shadowRoots: [c] })[0].endContainer, container); 43 assert_equals(sel.getComposedRanges({ shadowRoots: [c] })[0].endOffset, 4); 44 45 assert_equals(sel.getComposedRanges({ shadowRoots: [d] })[0].startContainer, container); 46 assert_equals(sel.getComposedRanges({ shadowRoots: [d] })[0].startOffset, 1); 47 assert_equals(sel.getComposedRanges({ shadowRoots: [d] })[0].endContainer, d); 48 assert_equals(sel.getComposedRanges({ shadowRoots: [d] })[0].endOffset, 0); 49 50 assert_equals(sel.getComposedRanges({ shadowRoots: [c, d] })[0].startContainer, c); 51 assert_equals(sel.getComposedRanges({ shadowRoots: [c, d] })[0].startOffset, 0); 52 assert_equals(sel.getComposedRanges({ shadowRoots: [c, d] })[0].endContainer, d); 53 assert_equals(sel.getComposedRanges({ shadowRoots: [c, d] })[0].endOffset, 0); 54 55 // Re-setting the same range should never change the output 56 sel.setBaseAndExtent(c, 0, d, 0); 57 assert_equals(sel.getRangeAt(0).startContainer, d); 58 assert_equals(sel.getRangeAt(0).startOffset, 0); 59 assert_equals(sel.getRangeAt(0).endContainer, d); 60 assert_equals(sel.getRangeAt(0).endOffset, 0); 61 62 assert_equals(sel.getComposedRanges({ shadowRoots: [c, d] })[0].startContainer, c); 63 assert_equals(sel.getComposedRanges({ shadowRoots: [c, d] })[0].startOffset, 0); 64 assert_equals(sel.getComposedRanges({ shadowRoots: [c, d] })[0].endContainer, d); 65 assert_equals(sel.getComposedRanges({ shadowRoots: [c, d] })[0].endOffset, 0); 66 }, 'Setting the range to nodes in different shadow trees collapses ordinary ranges, but does not collapse composed ranges.'); 67 </script>