Skip to content

Commit ae42bb2

Browse files
dizhang168moz-wptsync-bot
authored andcommitted
Bug 1931923 [wpt PR 49231] - [Selection API] Add DOM mutation removal test, a=testonly
Automatic update from web-platform-tests [Selection API] Add DOM mutation removal test Add nested shadow host case. Change-Id: Iebf8f6dfc52b7c5274b29946b6389f7ad717759f Bug: 40286116 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6026955 Auto-Submit: Di Zhang <[email protected]> Reviewed-by: Siye Liu <[email protected]> Commit-Queue: Siye Liu <[email protected]> Cr-Commit-Position: refs/heads/main@{#1384420} -- wpt-commits: bfd44a5a07a419124c9a9bbdb095510b6ecdb509 wpt-pr: 49231
1 parent 2f84b9f commit ae42bb2

File tree

1 file changed

+39
-11
lines changed

1 file changed

+39
-11
lines changed

testing/web-platform/tests/selection/shadow-dom/tentative/Selection-getComposedRanges-dom-mutations-removal.html

Lines changed: 39 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,16 @@
1515
const mode = (new URLSearchParams(document.location.search)).get("mode");
1616

1717
test(() => {
18+
const sel = getSelection();
19+
1820
container.innerHTML = 'a<div id="host"></div>b';
1921
const host = container.querySelector('#host');
2022
const shadowRoot = host.attachShadow({ mode });
2123
shadowRoot.innerHTML = 'hello, world';
22-
getSelection().setBaseAndExtent(shadowRoot.firstChild, 7, container, 2);
23-
const rangeBefore = getSelection().getComposedRanges({ shadowRoots: [shadowRoot] })[0];
24+
sel.setBaseAndExtent(shadowRoot.firstChild, 7, container, 2);
25+
const rangeBefore = sel.getComposedRanges({ shadowRoots: [shadowRoot] })[0];
2426
host.remove();
25-
const rangeAfter = getSelection().getComposedRanges({ shadowRoots: [shadowRoot] })[0];
27+
const rangeAfter = sel.getComposedRanges({ shadowRoots: [shadowRoot] })[0];
2628

2729
assert_equals(rangeBefore.startContainer, shadowRoot.firstChild, 'StaticRange does not update on new mutation.');
2830
assert_equals(rangeBefore.startOffset, 7);
@@ -36,26 +38,30 @@
3638
}, 'Range is fully in shadow tree. Removing shadow host collapses composed StaticRange. Note it does not update previously returned composed StaticRange.');
3739

3840
test(() => {
41+
const sel = getSelection();
42+
3943
container.innerHTML = '<div id="wrapper">a<div id="host"></div>b</div>';
4044
const wrapper = container.querySelector('#wrapper');
4145
const host = container.querySelector('#host');
4246
const shadowRoot = host.attachShadow({ mode });
4347
shadowRoot.innerHTML = 'hello, world';
44-
getSelection().setBaseAndExtent(shadowRoot.firstChild, 4, shadowRoot.firstChild, 7);
48+
sel.setBaseAndExtent(shadowRoot.firstChild, 4, shadowRoot.firstChild, 7);
4549
wrapper.remove();
4650

47-
const rangeAfter = getSelection().getComposedRanges({ shadowRoots: [shadowRoot] })[0];
51+
const rangeAfter = sel.getComposedRanges({ shadowRoots: [shadowRoot] })[0];
4852
assert_equals(rangeAfter.startContainer, container, 'collapsed to parent of removed node');
4953
assert_equals(rangeAfter.startOffset, 0);
5054
assert_equals(rangeAfter.endContainer, container);
5155
assert_equals(rangeAfter.endOffset, 0);
5256
}, 'Range is fully in shadow tree. Removing parent of shadow host collapses composed StaticRange.');
5357

5458
test(() => {
59+
const sel = getSelection();
60+
5561
container.innerHTML = '<div id="hello">Hello,</div><div id="world"> World</div>';
56-
getSelection().setBaseAndExtent(hello.firstChild, 1, world.firstChild, 3);
62+
sel.setBaseAndExtent(hello.firstChild, 1, world.firstChild, 3);
5763
hello.firstChild.remove();
58-
const rangeAfter = getSelection().getComposedRanges()[0];
64+
const rangeAfter = sel.getComposedRanges()[0];
5965

6066
assert_equals(rangeAfter.startContainer, hello);
6167
assert_equals(rangeAfter.startOffset, 0);
@@ -64,20 +70,42 @@
6470
}, 'Range is in light DOM. Removing startContainer rescopes new composed range to its parent.');
6571

6672
test(() => {
67-
container.innerHTML = 'a<div id="host"></div>b';
73+
const sel = getSelection();
74+
75+
container.innerHTML = 'a<div id="host"></div>b';
6876
const host = container.querySelector('#host');
6977
const shadowRoot = host.attachShadow({ mode });
7078
shadowRoot.innerHTML = 'hello, world';
71-
getSelection().setBaseAndExtent(shadowRoot.firstChild, 7, container, 2);
79+
sel.setBaseAndExtent(shadowRoot.firstChild, 7, container, 2);
7280
shadowRoot.innerHTML = '';
73-
const rangeAfter = getSelection().getComposedRanges({ shadowRoots: [shadowRoot] })[0];
81+
const rangeAfter = sel.getComposedRanges({ shadowRoots: [shadowRoot] })[0];
7482

7583
assert_equals(rangeAfter.startContainer, shadowRoot, 'collapsed to be at the parent shadow root');
7684
assert_equals(rangeAfter.startOffset, 0);
7785
assert_equals(rangeAfter.endContainer, container);
7886
assert_equals(rangeAfter.endOffset, 2);
7987
}, 'Range is across shadow trees. Replacing shadowRoot content rescopes new composed range to the shadowRoot.');
8088

89+
test(() => {
90+
const sel = getSelection();
91+
92+
container.innerHTML = 'a<div id="outerhost"></div>b';
93+
const outerHost = container.querySelector('#outerhost');
94+
const outerRoot = outerHost.attachShadow({ mode });
95+
outerRoot.innerHTML = 'c<div id="innerHost"></div>d';
96+
const innerHost = outerRoot.querySelector('#innerHost');
97+
const innerRoot = innerHost.attachShadow({ mode });
98+
innerRoot.innerHTML = 'hello, world';
99+
sel.setBaseAndExtent(container.firstChild, 0, innerRoot.firstChild, 4);
100+
outerHost.remove();
101+
const rangeAfter = sel.getComposedRanges({ shadowRoots: [innerRoot, outerRoot] })[0];
102+
103+
assert_equals(rangeAfter.startContainer, container.firstChild);
104+
assert_equals(rangeAfter.startOffset, 0);
105+
assert_equals(rangeAfter.endContainer, container);
106+
assert_equals(rangeAfter.endOffset, 1);
107+
}, 'Range is across shadow trees. Removing ancestor shadow host rescopes composed range end to parent.');
108+
81109
test(() => {
82110
container.innerHTML = [
83111
'<div id=host>',
@@ -98,7 +126,7 @@
98126
sel.setBaseAndExtent(div1.firstChild, 2, div2.firstChild, 2);
99127
div1.remove();
100128

101-
const rangeAfter = getSelection().getComposedRanges({ shadowRoots: [shadowRoot] })[0];
129+
const rangeAfter = sel.getComposedRanges({ shadowRoots: [shadowRoot] })[0];
102130
assert_equals(rangeAfter.startContainer, host);
103131
assert_equals(rangeAfter.startOffset, 0);
104132
assert_equals(rangeAfter.endContainer, div2.firstChild);

0 commit comments

Comments
 (0)