Skip to content

Commit

Permalink
Test attachShadow() with disabledFeatures=['shadow']
Browse files Browse the repository at this point in the history
  • Loading branch information
tkent-google authored and domenic committed May 16, 2019
1 parent 2e292e7 commit 7e939f6
Showing 1 changed file with 72 additions and 0 deletions.
72 changes: 72 additions & 0 deletions shadow-dom/Element-interface-attachShadow-custom-element.html
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
}

Expand Down

0 comments on commit 7e939f6

Please sign in to comment.