From 386db1904b16bc81685f05bad61abcdd78ee1ed5 Mon Sep 17 00:00:00 2001 From: "TAMURA, Kent" Date: Thu, 13 Jun 2019 10:34:14 +0000 Subject: [PATCH] Bug 1552241 [wpt PR 16795] - shadow-dom: Add testcases for attachShadow() with disabledFeatures=['shadow'], a=testonly Automatic update from web-platform-tests Test attachShadow() with disabledFeatures=['shadow'] Follows https://github.com/whatwg/dom/pull/760. -- wp5At-commits: 7e939f6d8eac12d0830d8a47eb72e38097b12f9e wpt-pr: 16795 --- ...interface-attachShadow-custom-element.html | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/testing/web-platform/tests/shadow-dom/Element-interface-attachShadow-custom-element.html b/testing/web-platform/tests/shadow-dom/Element-interface-attachShadow-custom-element.html index b59460e17b973..5d862c49244b4 100644 --- a/testing/web-platform/tests/shadow-dom/Element-interface-attachShadow-custom-element.html +++ b/testing/web-platform/tests/shadow-dom/Element-interface-attachShadow-custom-element.html @@ -14,6 +14,78 @@ assert_true(document.createElement('my-custom').attachShadow({mode: "open"}) instanceof ShadowRoot); }, 'Element.attachShadow must create an instance of ShadowRoot for autonomous custom elements'); +test(() => { + assert_true(document.createElement('undefined-custom').attachShadow({mode: 'open'}) instanceof ShadowRoot); +}, 'Element.attachShadow must create an instance of ShadowRoot for undefined autonomous custom elements'); + +test(() => { + class ShadowDisabledElement extends HTMLElement { + static disabledFeatures = ['shadow']; + } + + // No definition. attachShadow() should succeed. + let element = document.createElement('shadow-disabled-element'); + element.attachShadow({mode: 'closed'}); + + // No definition and it's already a host. + assert_throws('NotSupportedError', () => { + element.attachShadow({mode: 'closed'}); + }, 'No definition, host'); + + // The element has a definition, and it's already a host. + customElements.define('shadow-disabled-element', ShadowDisabledElement); + assert_throws('NotSupportedError', () => { + element.attachShadow({mode: 'closed'}); + }, 'Definition, host'); + + // The element has a definition, and it's not a host. + assert_throws('NotSupportedError', () => { + document.createElement('shadow-disabled-element').attachShadow({mode: 'closed'}); + }, 'Definition, not a host'); +}, 'Element.attachShadow for an autonomous custom element with ' + + 'disabledFeatures=["shadow"] should throw a NotSupportedError'); + +test(() => { + class ShadowDisabledHeadingElement extends HTMLHeadingElement { + static disabledFeatures = ['shadow']; + } + + // No definition. attachShadow() should succeed. + let element = document.createElement('h2', + {is: 'shadow-disabled-heading-element'}); + element.attachShadow({mode: 'closed'}); + + // No definition and it's already a host. + assert_throws('NotSupportedError', () => { + element.attachShadow({mode: 'closed'}); + }, 'No definition, host.'); + + // The element has a definition, and it's already a host. + customElements.define('shadow-disabled-heading-element', + ShadowDisabledHeadingElement, {extends: 'h2'}); + assert_throws('NotSupportedError', () => { + element.attachShadow({mode: 'closed'}); + }, 'Definition, host'); + + // The element has a definition, and it's not a host. + let h2 = document.createElement('h2', {is: 'shadow-disabled-heading-element'}); + assert_throws('NotSupportedError', () => { + h2.attachShadow({mode: 'closed'}); + }, 'Definition, not a host'); +}, 'Element.attachShadow for a customized built-in element with ' + + 'disabledFeatures=["shadow"] should throw a NotSupportedError'); + +test(() => { + class CapitalShadowDisabledElement extends HTMLElement { + static disabledFeatures = ['SHADOW']; + } + + customElements.define('capital-shadow-disabled-element', CapitalShadowDisabledElement); + + // Test fails if this throws + document.createElement('capital-shadow-disabled-element').attachShadow({mode: 'open'}); +}, 'Element.attachShadow for a custom element with disabledFeatures=["SHADOW"] should not throw a NotSupportedError'); + class MyCustomizedBuiltinElement extends HTMLInputElement { }