File: test_shadowroot.html

package info (click to toggle)
firefox-esr 140.5.0esr-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 4,538,920 kB
  • sloc: cpp: 7,381,527; javascript: 6,388,905; ansic: 3,710,087; python: 1,393,776; xml: 628,165; asm: 426,916; java: 184,004; sh: 65,744; makefile: 19,302; objc: 13,059; perl: 12,912; yacc: 4,583; cs: 3,846; pascal: 3,352; lex: 1,720; ruby: 1,226; exp: 762; php: 436; lisp: 258; awk: 247; sql: 66; sed: 54; csh: 10
file content (77 lines) | stat: -rw-r--r-- 3,877 bytes parent folder | download | duplicates (28)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=806506
-->
<head>
  <title>Test for ShadowRoot</title>
  <script type="text/javascript" src="head.js"></script>
  <script src="/tests/SimpleTest/SimpleTest.js"></script>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=806506">Bug 806506</a>
<script>

SimpleTest.waitForExplicitFinish();

var content = '<div id="movedtoshadow" class="testclass"></div>' +
              '<svg id="svgmovedtoshadow"></svg>';
createIframe(content)
  .then((aDocument) => {
    // Create ShadowRoot.
    var element = aDocument.createElement("div");
    ok(!element.shadowRoot, "div element should not have a shadow root.");
    var shadow = element.attachShadow({mode: "open"});
    is(element.shadowRoot, shadow, "shadowRoot property should return the same shadow root that was just created.");

    // Move an element from the document to the ShadowRoot.
    var inShadowEl = aDocument.getElementById("movedtoshadow");
    var inShadowSVGEl = aDocument.getElementById("svgmovedtoshadow");

    // Test getElementById
    ok(!shadow.getElementById("movedtoshadow"), "Element not in ShadowRoot should not be accessible from ShadowRoot API.");
    ok(!shadow.getElementById("svgmovedtoshadow"), "SVG element not in ShadowRoot should not be accessible from ShadowRoot API.");
    shadow.appendChild(inShadowEl);
    shadow.appendChild(inShadowSVGEl);
    is(shadow.getElementById("movedtoshadow"), inShadowEl, "Element appended to a ShadowRoot should be accessible from ShadowRoot API.");
    ok(!aDocument.getElementById("movedtoshadow"), "Element appended to a ShadowRoot should not be accessible from document.");
    is(shadow.getElementById("svgmovedtoshadow"), inShadowSVGEl, "SVG element appended to a ShadowRoot should be accessible from ShadowRoot API.");
    ok(!aDocument.getElementById("svgmovedtoshadow"), "SVG element appended to a ShadowRoot should not be accessible from document.");

    // Remove elements from ShadowRoot and make sure that they are no longer accessible via the ShadowRoot API.
    shadow.removeChild(inShadowEl);
    shadow.removeChild(inShadowSVGEl);
    ok(!shadow.getElementById("movedtoshadow"), "ShadowRoot API should not be able to access elements removed from ShadowRoot.");
    ok(!shadow.getElementById("svgmovedtoshadow"), "ShadowRoot API should not be able to access elements removed from ShadowRoot.");

    // Test querySelector on element in a ShadowRoot.
    element = aDocument.createElement("div");
    shadow = element.attachShadow({mode: "open"});
    var parentDiv = aDocument.createElement("div");
    var childSpan = aDocument.createElement("span");
    childSpan.id = "innerdiv";
    parentDiv.appendChild(childSpan);
    is(parentDiv.querySelector("#innerdiv"), childSpan, "ID query selector should work on element in ShadowRoot.");
    is(parentDiv.querySelector("span"), childSpan, "Tag query selector should work on element in ShadowRoot.");

    // Test that exception is thrown when trying to create a cycle with host node.
    element = aDocument.createElement("div");
    shadow = element.attachShadow({mode: "open"});
    try {
      shadow.appendChild(element);
      ok(false, "Excpetion should be thrown when creating a cycle with host content.");
    } catch (ex) {
      ok(true, "Excpetion should be thrown when creating a cycle with host content.");
    }

    // Basic innerHTML tests.
    shadow.innerHTML = '<span id="first"></span><div id="second"></div>';
    is(shadow.childNodes.length, 2, "There should be two children in the ShadowRoot.");
    is(shadow.getElementById("second").tagName, "DIV", "Elements created by innerHTML should be accessible by ShadowRoot API.");

    SimpleTest.finish();
  });
</script>
</body>
</html>