summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/shadow-dom/declarative/getinnerhtml.tentative.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/shadow-dom/declarative/getinnerhtml.tentative.html')
-rw-r--r--testing/web-platform/tests/shadow-dom/declarative/getinnerhtml.tentative.html79
1 files changed, 79 insertions, 0 deletions
diff --git a/testing/web-platform/tests/shadow-dom/declarative/getinnerhtml.tentative.html b/testing/web-platform/tests/shadow-dom/declarative/getinnerhtml.tentative.html
new file mode 100644
index 0000000000..ad7734d51e
--- /dev/null
+++ b/testing/web-platform/tests/shadow-dom/declarative/getinnerhtml.tentative.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html>
+<title>getInnerHTML </title>
+<link rel='author' href='mailto:masonf@chromium.org'>
+<link rel='help' href='https://github.com/whatwg/dom/issues/831'>
+<script src='/resources/testharness.js'></script>
+<script src='/resources/testharnessreport.js'></script>
+<script src='../../html/resources/common.js'></script>
+
+<body>
+
+<script>
+function testElementType(allowsShadowDom, elementType, applyToShadow, mode, delegatesFocus) {
+ const t = test(t => {
+ // Create and attach element
+ let wrapper;
+ if (applyToShadow) {
+ const host = document.createElement('div');
+ t.add_cleanup(function() { host.remove(); });
+ document.body.appendChild(host);
+ wrapper = host.attachShadow({mode: 'open'});
+ } else {
+ wrapper = document.createElement('div');
+ t.add_cleanup(function() { wrapper.remove(); });
+ document.body.appendChild(wrapper);
+ }
+ const element = document.createElement(elementType);
+ wrapper.appendChild(element);
+
+ const isOpen = mode === 'open';
+ if (allowsShadowDom) {
+ const delegatesAttr = delegatesFocus ? ' shadowrootdelegatesfocus=""' : '';
+ const correctShadowHtml = `<template shadowrootmode="${mode}"${delegatesAttr}><slot></slot></template>`;
+ const correctHtml = `<${elementType}>${correctShadowHtml}</${elementType}>`;
+ const shadowRoot = element.attachShadow({mode: mode, delegatesFocus: delegatesFocus});
+ shadowRoot.appendChild(document.createElement('slot'));
+ if (isOpen) {
+ // We can only test this for open roots
+ assert_equals(wrapper.getInnerHTML(),correctHtml,'The default for includeShadowRoots should be true');
+ } else {
+ // Closed shadow roots should not be returned unless closedRoots contains the shadow root:
+ const emptyElement = `<${elementType}></${elementType}>`;
+ assert_equals(wrapper.getInnerHTML({includeShadowRoots: true}), emptyElement);
+ assert_equals(wrapper.getInnerHTML({includeShadowRoots: true, closedRoots: []}), emptyElement);
+ }
+ assert_equals(wrapper.getInnerHTML({includeShadowRoots: true, closedRoots: [shadowRoot]}),correctHtml);
+ } else {
+ // For non-shadow hosts, getInnerHTML() should also match .innerHTML
+ assert_equals(wrapper.getInnerHTML({includeShadowRoots: true}),wrapper.innerHTML);
+ assert_equals(wrapper.getInnerHTML(),wrapper.innerHTML);
+ }
+
+ // Either way, make sure getInnerHTML({includeShadowRoots: false}) matches .innerHTML
+ assert_equals(wrapper.getInnerHTML({includeShadowRoots: false}),wrapper.innerHTML,'getInnerHTML() with includeShadowRoots false should return the same as .innerHTML');
+
+ }, `${applyToShadow ? 'ShadowRoot' : 'Element'}.getInnerHTML() on <${elementType}>${allowsShadowDom ? `, with mode=${mode}, delegatesFocus=${delegatesFocus}.` : ''}`);
+}
+
+function runAllTests() {
+ const allElements = [...HTML5_ELEMENTS, 'htmlunknown'];
+ const safelisted = HTML5_SHADOW_ALLOWED_ELEMENTS;
+ for (const elementName of allElements) {
+ const allowsShadowDom = safelisted.includes(elementName);
+ for (const applyToShadow of [false, true]) {
+ if (allowsShadowDom) {
+ for (const delegatesFocus of [false, true]) {
+ for (const mode of ['open', 'closed']) {
+ testElementType(true, elementName, applyToShadow, mode, delegatesFocus);
+ }
+ }
+ } else {
+ testElementType(false, elementName, applyToShadow);
+ }
+ }
+ }
+}
+
+runAllTests();
+
+</script>