Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test has a WPT meta file that expects 7 subtest issues.
- This WPT test may be referenced by the following Test IDs:
- /custom-elements/revamped-scoped-registry/CustomElementRegistry-initialize.tentative.html - WPT Dashboard Interop Dashboard
<!DOCTYPE html>
<html>
<head>
<meta name="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<div id="host">
<template shadowrootmode="open" shadowrootclonable="true" shadowrootcustomelements>
<a-b>
<template shadowrootmode="open" shadowrootclonable="true" shadowrootcustomelements>
<c-d/><c-d>
</template>
</a-b>
<ef></ef>
</template>
</div>
<div id="host-with-registry">
<template shadowrootmode="open" shadowrootclonable="true">
<a-b></a-b>
<ef></ef>
</template>
</div>
<script>
test(() => {
assert_equals(typeof(window.customElements.initialize), 'function');
assert_equals(typeof((new CustomElementRegistry).initialize), 'function');
}, 'initialize is a function on both global and scoped CustomElementRegistry');
test(() => {
const clone = host.cloneNode(true);
const shadowRoot = clone.shadowRoot;
assert_equals(shadowRoot.customElements, null);
assert_equals(shadowRoot.querySelector('a-b').customElements, null);
assert_equals(shadowRoot.querySelector('ef').customElements, null);
window.customElements.initialize(shadowRoot);
assert_equals(shadowRoot.customElements, window.customElements);
assert_equals(shadowRoot.querySelector('a-b').customElements, window.customElements);
assert_equals(shadowRoot.querySelector('ef').customElements, window.customElements);
}, 'initialize sets element.customElements to the global registry');
test(() => {
const clone = host.cloneNode(true);
const shadowRoot = clone.shadowRoot;
assert_equals(shadowRoot.customElements, null);
assert_equals(shadowRoot.querySelector('a-b').customElements, null);
assert_equals(shadowRoot.querySelector('ef').customElements, null);
window.customElements.initialize(shadowRoot);
assert_equals(shadowRoot.customElements, window.customElements);
assert_equals(shadowRoot.querySelector('a-b').customElements, window.customElements);
assert_equals(shadowRoot.querySelector('ef').customElements, window.customElements);
assert_equals(shadowRoot.querySelector('a-b').shadowRoot.customElements, null);
assert_equals(shadowRoot.querySelector('a-b').shadowRoot.querySelector('c-d').customElements, null);
}, 'initialize does not set the registry of nested shadow tree to the global registry');
test(() => {
const clone = host.cloneNode(true);
const shadowRoot = clone.shadowRoot;
assert_equals(shadowRoot.customElements, null);
assert_equals(shadowRoot.querySelector('a-b').customElements, null);
assert_equals(shadowRoot.querySelector('ef').customElements, null);
const registry = new CustomElementRegistry;
registry.initialize(shadowRoot);
assert_equals(shadowRoot.customElements, registry);
assert_equals(shadowRoot.querySelector('a-b').customElements, registry);
assert_equals(shadowRoot.querySelector('ef').customElements, registry);
}, 'initialize sets element.customElements to a scoped registry');
test(() => {
const clone = host.cloneNode(true);
const shadowRoot = clone.shadowRoot;
assert_equals(shadowRoot.customElements, null);
assert_equals(shadowRoot.querySelector('a-b').customElements, null);
assert_equals(shadowRoot.querySelector('ef').customElements, null);
const registry = new CustomElementRegistry;
registry.initialize(shadowRoot);
assert_equals(shadowRoot.customElements, registry);
assert_equals(shadowRoot.querySelector('a-b').customElements, registry);
assert_equals(shadowRoot.querySelector('ef').customElements, registry);
assert_equals(shadowRoot.querySelector('a-b').shadowRoot.customElements, null);
assert_equals(shadowRoot.querySelector('a-b').shadowRoot.querySelector('c-d').customElements, null);
}, 'initialize does not set the registry of nested shadow tree to a scoped registry');
test(() => {
const clone = host.cloneNode(true);
const shadowRoot = clone.shadowRoot;
assert_equals(shadowRoot.customElements, null);
assert_equals(shadowRoot.querySelector('a-b').customElements, null);
assert_equals(shadowRoot.querySelector('ef').customElements, null);
const registry = new CustomElementRegistry;
registry.initialize(shadowRoot);
assert_equals(shadowRoot.customElements, registry);
assert_equals(shadowRoot.querySelector('a-b').customElements, registry);
assert_equals(shadowRoot.querySelector('ef').customElements, registry);
document.body.appendChild(clone);
assert_equals(shadowRoot.customElements, registry);
assert_equals(shadowRoot.querySelector('a-b').customElements, registry);
assert_equals(shadowRoot.querySelector('ef').customElements, registry);
}, 'initialize sets element.customElements permantently');
test(() => {
const clone = document.getElementById('host-with-registry').cloneNode(true);
const shadowRoot = clone.shadowRoot;
assert_equals(shadowRoot.customElements, window.customElements);
assert_equals(shadowRoot.querySelector('a-b').customElements, window.customElements);
assert_equals(shadowRoot.querySelector('ef').customElements, window.customElements);
const registry = new CustomElementRegistry;
registry.initialize(shadowRoot);
assert_equals(shadowRoot.customElements, window.customElements);
assert_equals(shadowRoot.querySelector('a-b').customElements, window.customElements);
assert_equals(shadowRoot.querySelector('ef').customElements, window.customElements);
}, 'initialize is no-op on a subtree with a non-null registry');
</script>
</body>
</html>