summaryrefslogtreecommitdiffstats
path: root/dom/tests/mochitest/webcomponents/test_shadowroot.html
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--dom/tests/mochitest/webcomponents/test_shadowroot.html77
1 files changed, 77 insertions, 0 deletions
diff --git a/dom/tests/mochitest/webcomponents/test_shadowroot.html b/dom/tests/mochitest/webcomponents/test_shadowroot.html
new file mode 100644
index 0000000000..07bc8b3fcd
--- /dev/null
+++ b/dom/tests/mochitest/webcomponents/test_shadowroot.html
@@ -0,0 +1,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>