67 lines
2.9 KiB
HTML
67 lines
2.9 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<body>
|
|
<meta name="author" href="mailto:dizhangg@chromium.org">
|
|
<meta name="assert" content="Selection's getComposedRanges should return a sequence of static ranges">
|
|
<link rel="help" href="https://w3c.github.io/selection-api/#dom-selection-getcomposedranges">
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
|
|
<div id="container">
|
|
<div id="host1">
|
|
<template shadowrootmode=open>C</template>
|
|
A - not slotted
|
|
</div>
|
|
<div id="host2">
|
|
<template shadowrootmode=open>D</template>
|
|
B - not slotted
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
|
|
const c = host1.shadowRoot;
|
|
const d = host2.shadowRoot;
|
|
|
|
test(() => {
|
|
const sel = getSelection();
|
|
sel.setBaseAndExtent(c, 0, d, 0);
|
|
|
|
assert_equals(sel.getRangeAt(0).startContainer, d);
|
|
assert_equals(sel.getRangeAt(0).startOffset, 0);
|
|
assert_equals(sel.getRangeAt(0).endContainer, d);
|
|
assert_equals(sel.getRangeAt(0).endOffset, 0);
|
|
|
|
assert_equals(sel.getComposedRanges()[0].startContainer, container);
|
|
assert_equals(sel.getComposedRanges()[0].startOffset, 1);
|
|
assert_equals(sel.getComposedRanges()[0].endContainer, container);
|
|
assert_equals(sel.getComposedRanges()[0].endOffset, 4);
|
|
|
|
assert_equals(sel.getComposedRanges({ shadowRoots: [c] })[0].startContainer, c);
|
|
assert_equals(sel.getComposedRanges({ shadowRoots: [c] })[0].startOffset, 0);
|
|
assert_equals(sel.getComposedRanges({ shadowRoots: [c] })[0].endContainer, container);
|
|
assert_equals(sel.getComposedRanges({ shadowRoots: [c] })[0].endOffset, 4);
|
|
|
|
assert_equals(sel.getComposedRanges({ shadowRoots: [d] })[0].startContainer, container);
|
|
assert_equals(sel.getComposedRanges({ shadowRoots: [d] })[0].startOffset, 1);
|
|
assert_equals(sel.getComposedRanges({ shadowRoots: [d] })[0].endContainer, d);
|
|
assert_equals(sel.getComposedRanges({ shadowRoots: [d] })[0].endOffset, 0);
|
|
|
|
assert_equals(sel.getComposedRanges({ shadowRoots: [c, d] })[0].startContainer, c);
|
|
assert_equals(sel.getComposedRanges({ shadowRoots: [c, d] })[0].startOffset, 0);
|
|
assert_equals(sel.getComposedRanges({ shadowRoots: [c, d] })[0].endContainer, d);
|
|
assert_equals(sel.getComposedRanges({ shadowRoots: [c, d] })[0].endOffset, 0);
|
|
|
|
// Re-setting the same range should never change the output
|
|
sel.setBaseAndExtent(c, 0, d, 0);
|
|
assert_equals(sel.getRangeAt(0).startContainer, d);
|
|
assert_equals(sel.getRangeAt(0).startOffset, 0);
|
|
assert_equals(sel.getRangeAt(0).endContainer, d);
|
|
assert_equals(sel.getRangeAt(0).endOffset, 0);
|
|
|
|
assert_equals(sel.getComposedRanges({ shadowRoots: [c, d] })[0].startContainer, c);
|
|
assert_equals(sel.getComposedRanges({ shadowRoots: [c, d] })[0].startOffset, 0);
|
|
assert_equals(sel.getComposedRanges({ shadowRoots: [c, d] })[0].endContainer, d);
|
|
assert_equals(sel.getComposedRanges({ shadowRoots: [c, d] })[0].endOffset, 0);
|
|
}, 'Setting the range to nodes in different shadow trees collapses ordinary ranges, but does not collapse composed ranges.');
|
|
</script>
|