| <!DOCTYPE html> |
| <html> |
| <head> |
| <meta name="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org"> |
| <link rel="help" href="https://github.com/whatwg/html/issues/10854"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| </head> |
| <body> |
| <script> |
| |
| test(() => { |
| class ABElement extends HTMLElement { }; |
| const scopedRegistry = new CustomElementRegistry; |
| scopedRegistry.define('a-b', ABElement); |
| assert_throws_js(TypeError, () => new ABElement); |
| }, 'A constructor with only a scoped custom element registry definition should fail upon construction'); |
| |
| test(() => { |
| class CElement extends HTMLElement { }; |
| const scopedRegistry = new CustomElementRegistry; |
| scopedRegistry.define('scoped-c', CElement); |
| customElements.define('global-c', CElement); |
| const cElement = new CElement; |
| assert_equals(cElement.localName, 'global-c'); |
| }, 'A constructor uses the global registry to create an element'); |
| |
| test(() => { |
| let fgElement; |
| let hiElement; |
| class DEElement extends HTMLElement { |
| constructor() { |
| fgElement = document.createElement('f-g', {customElementRegistry: scopedRegistry2}); |
| super(); |
| hiElement = document.createElement('h-i', {customElementRegistry: scopedRegistry2}); |
| } |
| }; |
| class FGElement extends HTMLElement { } |
| class HIElement extends HTMLElement { } |
| const scopedRegistry1 = new CustomElementRegistry; |
| scopedRegistry1.define('d-e', DEElement); |
| const scopedRegistry2 = new CustomElementRegistry; |
| scopedRegistry2.define('f-g', FGElement); |
| scopedRegistry2.define('h-i', HIElement); |
| |
| const deElement = document.createElement('d-e', {customElementRegistry: scopedRegistry1}); |
| assert_true(deElement instanceof DEElement); |
| assert_equals(deElement.customElementRegistry, scopedRegistry1); |
| assert_true(fgElement instanceof FGElement); |
| assert_equals(fgElement.customElementRegistry, scopedRegistry2); |
| assert_true(hiElement instanceof HIElement); |
| assert_equals(hiElement.customElementRegistry, scopedRegistry2); |
| }, 'A constructor creating an element from another registry before or after super call should work'); |
| |
| </script> |
| </body> |
| </html> |