4 <script src="resources/shadow-dom.js"></script>
5 <script src="../../../resources/js-test.js"></script>
10 document.body.appendChild(
11 createDOM('div', {'id': 'foo-host'},
14 createDOM('span', {'id': 'not-top'})),
15 createDOM('span', {'id': 'top'}),
16 createDOM('div', {'id': 'bar-host'},
18 createDOM('span', {'id': 'nested'})),
19 createDOM('span', {'id': 'inner-host'}))),
20 createDOM('span', {'id': 'outer-host'})));
22 document.body.appendChild(
23 createDOM('pre', {'id': 'console'}));
25 description('crbug.com/337616: test for querySelectorAll with ::shadow and /deep/');
27 shouldBe('document.querySelectorAll("#foo-host::shadow span").length', '3');
28 shouldBe('document.querySelectorAll("#foo-host::shadow span")[0].id', '"not-top"');
29 shouldBe('document.querySelectorAll("#foo-host::shadow span")[1].id', '"top"');
30 shouldBe('document.querySelectorAll("#foo-host::shadow span")[2].id', '"inner-host"');
32 shouldBe('document.querySelectorAll("#foo-host /deep/ span").length', '5');
33 shouldBe('document.querySelectorAll("#foo-host /deep/ span")[0].id', '"not-top"');
34 shouldBe('document.querySelectorAll("#foo-host /deep/ span")[1].id', '"top"');
35 shouldBe('document.querySelectorAll("#foo-host /deep/ span")[2].id', '"nested"');
36 shouldBe('document.querySelectorAll("#foo-host /deep/ span")[3].id', '"inner-host"');
37 shouldBe('document.querySelectorAll("#foo-host /deep/ span")[4].id', '"outer-host"');
39 // FIXME: after making "*" in shadow tree not to match shadow host, rebaseline.
40 var fooShadowRoot = getNodeInTreeOfTrees('foo-host/');
41 shouldBe('fooShadowRoot.querySelectorAll("*::shadow span").length', '1');
42 shouldBe('fooShadowRoot.querySelectorAll("*::shadow span")[0].id', '"nested"');
44 shouldBe('fooShadowRoot.querySelectorAll("* /deep/ span").length', '3');
45 shouldBe('fooShadowRoot.querySelectorAll("* /deep/ span")[0].id', '"not-top"');
46 shouldBe('fooShadowRoot.querySelectorAll("* /deep/ span")[1].id', '"nested"');
47 shouldBe('fooShadowRoot.querySelectorAll("* /deep/ span")[2].id', '"inner-host"');
49 // #foo-host in foo's shadow tree cannot match div#foo-host.
50 shouldBe('fooShadowRoot.querySelectorAll("#foo-host /deep/ span").length', '0');
52 // :host in foo's shadow tree can match div#foo-host.
53 shouldBe('fooShadowRoot.querySelectorAll(":host(div#foo-host)::shadow span").length', '3');
54 shouldBe('fooShadowRoot.querySelectorAll(":host(div#foo-host)::shadow span")[0].id', '"not-top"');
55 shouldBe('fooShadowRoot.querySelectorAll(":host(div#foo-host)::shadow span")[1].id', '"top"');
56 shouldBe('fooShadowRoot.querySelectorAll(":host(div#foo-host)::shadow span")[2].id', '"inner-host"');
58 // :host-context in foo's shadow tree can match div#foo-host.
59 shouldBe('fooShadowRoot.querySelectorAll(":host-context(body)::shadow span").length', '3');
60 shouldBe('fooShadowRoot.querySelectorAll(":host-context(body)::shadow span")[0].id', '"not-top"');
61 shouldBe('fooShadowRoot.querySelectorAll(":host-context(body)::shadow span")[1].id', '"top"');
62 shouldBe('fooShadowRoot.querySelectorAll(":host-context(body)::shadow span")[2].id', '"inner-host"');
64 var barHost = fooShadowRoot.getElementById('bar-host');
65 shouldBe('barHost.querySelectorAll("#bar-host::shadow span").length', '1');
66 shouldBe('barHost.querySelectorAll("#bar-host::shadow span")[0].id', '"nested"');
67 shouldBe('barHost.querySelectorAll(":host :scope span").length', '1');
68 shouldBe('barHost.querySelectorAll(":host :scope span")[0].id', '"inner-host"');
69 shouldBe('barHost.querySelectorAll(":host /deep/ #bar-host span").length', '1');
70 shouldBe('barHost.querySelectorAll(":host /deep/ #bar-host span")[0].id', '"inner-host"');
72 var barShadowRoot = getNodeInTreeOfTrees('foo-host/bar-host/');
73 shouldBe('barShadowRoot.querySelectorAll("*::shadow span").length', '0');
74 shouldBe('barShadowRoot.querySelectorAll("* /deep/ span").length', '0');
76 shouldBe('barShadowRoot.querySelectorAll(":host(div#bar-host)::shadow span").length', '1');
77 shouldBe('barShadowRoot.querySelectorAll(":host(div#bar-host)::shadow span")[0].id', '"nested"');
78 shouldBe('barShadowRoot.querySelectorAll(":host(div#bar-host) /deep/ span").length', '1');
79 shouldBe('barShadowRoot.querySelectorAll(":host(div#bar-host) /deep/ span")[0].id', '"nested"');
81 shouldBe('barShadowRoot.querySelectorAll(":host-context(div#foo-host)::shadow span").length', '1');
82 shouldBe('barShadowRoot.querySelectorAll(":host-context(div#foo-host)::shadow span")[0].id', '"nested"');
83 shouldBe('barShadowRoot.querySelectorAll(":host-context(div#foo-host) /deep/ span").length', '1');
84 shouldBe('barShadowRoot.querySelectorAll(":host-context(div#foo-host) /deep/ span")[0].id', '"nested"');