| <!DOCTYPE html> |
| <script src="../../resources/js-test.js"></script> |
| <script> |
| description('This tests multiple shadow roots creation with createShadowRoot and mode parameter.'); |
| |
| function shouldBeV0ShadowRoot(root) { |
| shouldBeEqualToString('internals.shadowRootType(' + root + ')', 'V0ShadowRoot'); |
| } |
| |
| function shouldBeOpenShadowRoot(root) { |
| shouldBeEqualToString('internals.shadowRootType(' + root + ')', 'OpenShadowRoot'); |
| } |
| |
| function shouldBeClosedShadowRoot(root) { |
| shouldBeEqualToString('internals.shadowRootType(' + root + ')', 'ClosedShadowRoot'); |
| } |
| |
| function shouldBeUserAgentShadowRoot(root) { |
| shouldBeEqualToString('internals.shadowRootType(' + root + ')', 'UserAgentShadowRoot'); |
| } |
| |
| function youngestShadowRootShouldBe(host, root) { |
| shouldBe('internals.youngestShadowRoot(' + host + ')', root); |
| } |
| |
| debug('createShadowRoot() can still create multiple shadow roots.'); |
| |
| var div = document.createElement('div'); |
| var shadow1 = div.createShadowRoot(); |
| shouldBeV0ShadowRoot('shadow1'); |
| var shadow2 = div.createShadowRoot(); |
| shouldBeV0ShadowRoot('shadow2'); |
| youngestShadowRootShouldBe('div', 'shadow2'); |
| shouldBe('shadow2.olderShadowRoot', 'shadow1'); |
| |
| debug('Other attempts to create multiple shadow roots should fail'); |
| |
| div = document.createElement('div'); |
| shadow1 = div.createShadowRoot(); |
| shouldBeV0ShadowRoot('shadow1'); |
| shouldThrow('div.attachShadow({mode: "open"})'); |
| shouldThrow('div.attachShadow({mode: "closed"})'); |
| youngestShadowRootShouldBe('div', 'shadow1'); |
| |
| div = document.createElement('div'); |
| shadow1 = div.attachShadow({mode: "open"}); |
| shouldBeOpenShadowRoot('shadow1'); |
| shouldThrow('div.createShadowRoot()'); |
| shouldThrow('div.attachShadow({mode: "open"})'); |
| shouldThrow('div.attachShadow({mode: "closed"})'); |
| youngestShadowRootShouldBe('div', 'shadow1'); |
| |
| div = document.createElement('div'); |
| shadow1 = div.attachShadow({mode: "closed"}); |
| shouldBeClosedShadowRoot('shadow1'); |
| shouldThrow('div.createShadowRoot()'); |
| shouldThrow('div.attachShadow({mode: "open"})'); |
| shouldThrow('div.attachShadow({mode: "closed"})'); |
| youngestShadowRootShouldBe('div', 'shadow1'); |
| |
| |
| debug('V0 shadow root cannot be created on UA shadow root'); |
| var input = document.createElement('input'); |
| shouldBeUserAgentShadowRoot('internals.shadowRoot(input)'); |
| shouldThrow('input.createShadowRoot()'); |
| |
| input = document.createElement('input'); |
| shouldThrow('input.attachShadow({mode: "open"})'); |
| |
| input = document.createElement('input'); |
| shouldThrow('input.attachShadow({mode: "closed"})'); |
| </script> |