mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-05-03 13:02:09 +02:00
Tests: Import WPT custom-elements/registries tests
Includes reimporting the test we already had, which has changed significantly. Most of these fail, but importing them now to track progress.
This commit is contained in:
committed by
Tim Ledbetter
parent
86e1be123f
commit
fe3c6a1f9f
Notes:
github-actions[bot]
2026-03-27 19:51:35 +00:00
Author: https://github.com/AtkinsSJ Commit: https://github.com/LadybirdBrowser/ladybird/commit/fe3c6a1f9f9 Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/8613 Reviewed-by: https://github.com/tcl3 ✅
@@ -0,0 +1,193 @@
|
||||
<!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>
|
||||
<div id="host">
|
||||
<template shadowrootmode="open" shadowrootclonable="true" shadowrootcustomelementregistry>
|
||||
<a-b>
|
||||
<template shadowrootmode="open" shadowrootclonable="true" shadowrootcustomelementregistry>
|
||||
<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(() => {
|
||||
const document = new Document();
|
||||
assert_throws_dom("NotSupportedError", () => window.customElements.initialize(document));
|
||||
}, 'initialize throws when the registry scoped is false and the root is the document.');
|
||||
|
||||
test(() => {
|
||||
const document = new Document();
|
||||
const registry = new CustomElementRegistry;
|
||||
registry.initialize(document);
|
||||
assert_throws_dom("NotSupportedError", () => window.customElements.initialize(document));
|
||||
}, 'initialize throws when the registry scoped is false and the root document already has another registry');
|
||||
|
||||
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.customElementRegistry, null);
|
||||
assert_equals(shadowRoot.querySelector('a-b').customElementRegistry, null);
|
||||
assert_equals(shadowRoot.querySelector('ef').customElementRegistry, null);
|
||||
window.customElements.initialize(shadowRoot);
|
||||
assert_equals(shadowRoot.customElementRegistry, window.customElements);
|
||||
assert_equals(shadowRoot.querySelector('a-b').customElementRegistry, window.customElements);
|
||||
assert_equals(shadowRoot.querySelector('ef').customElementRegistry, window.customElements);
|
||||
}, 'initialize sets element.customElementRegistry to the global registry');
|
||||
|
||||
test(() => {
|
||||
const clone = host.cloneNode(true);
|
||||
const shadowRoot = clone.shadowRoot;
|
||||
assert_equals(shadowRoot.customElementRegistry, null);
|
||||
assert_equals(shadowRoot.querySelector('a-b').customElementRegistry, null);
|
||||
assert_equals(shadowRoot.querySelector('ef').customElementRegistry, null);
|
||||
window.customElements.initialize(shadowRoot);
|
||||
assert_equals(shadowRoot.customElementRegistry, window.customElements);
|
||||
assert_equals(shadowRoot.querySelector('a-b').customElementRegistry, window.customElements);
|
||||
assert_equals(shadowRoot.querySelector('ef').customElementRegistry, window.customElements);
|
||||
assert_equals(shadowRoot.querySelector('a-b').shadowRoot.customElementRegistry, null);
|
||||
assert_equals(shadowRoot.querySelector('a-b').shadowRoot.querySelector('c-d').customElementRegistry, 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.customElementRegistry, null);
|
||||
assert_equals(shadowRoot.querySelector('a-b').customElementRegistry, null);
|
||||
assert_equals(shadowRoot.querySelector('ef').customElementRegistry, null);
|
||||
const registry = new CustomElementRegistry;
|
||||
registry.initialize(shadowRoot);
|
||||
assert_equals(shadowRoot.customElementRegistry, registry);
|
||||
assert_equals(shadowRoot.querySelector('a-b').customElementRegistry, registry);
|
||||
assert_equals(shadowRoot.querySelector('ef').customElementRegistry, registry);
|
||||
}, 'initialize sets element.customElementRegistry to a scoped registry');
|
||||
|
||||
test(() => {
|
||||
const clone = host.cloneNode(true);
|
||||
const shadowRoot = clone.shadowRoot;
|
||||
assert_equals(shadowRoot.customElementRegistry, null);
|
||||
assert_equals(shadowRoot.querySelector('a-b').customElementRegistry, null);
|
||||
assert_equals(shadowRoot.querySelector('ef').customElementRegistry, null);
|
||||
const registry = new CustomElementRegistry;
|
||||
registry.initialize(shadowRoot);
|
||||
assert_equals(shadowRoot.customElementRegistry, registry);
|
||||
assert_equals(shadowRoot.querySelector('a-b').customElementRegistry, registry);
|
||||
assert_equals(shadowRoot.querySelector('ef').customElementRegistry, registry);
|
||||
window.customElements.initialize(shadowRoot);
|
||||
assert_equals(shadowRoot.customElementRegistry, registry);
|
||||
assert_equals(shadowRoot.querySelector('a-b').customElementRegistry, registry);
|
||||
assert_equals(shadowRoot.querySelector('ef').customElementRegistry, registry);
|
||||
}, 'initialize does not set descendants whose customElementRegistry already uses a different registry');
|
||||
|
||||
test(() => {
|
||||
const clone = host.cloneNode(true);
|
||||
const shadowRoot = clone.shadowRoot;
|
||||
assert_equals(shadowRoot.customElementRegistry, null);
|
||||
assert_equals(shadowRoot.querySelector('a-b').customElementRegistry, null);
|
||||
assert_equals(shadowRoot.querySelector('ef').customElementRegistry, null);
|
||||
const registry = new CustomElementRegistry;
|
||||
registry.initialize(shadowRoot);
|
||||
assert_equals(shadowRoot.customElementRegistry, registry);
|
||||
assert_equals(shadowRoot.querySelector('a-b').customElementRegistry, registry);
|
||||
assert_equals(shadowRoot.querySelector('ef').customElementRegistry, registry);
|
||||
assert_equals(shadowRoot.querySelector('a-b').shadowRoot.customElementRegistry, null);
|
||||
assert_equals(shadowRoot.querySelector('a-b').shadowRoot.querySelector('c-d').customElementRegistry, 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.customElementRegistry, null);
|
||||
assert_equals(shadowRoot.querySelector('a-b').customElementRegistry, null);
|
||||
assert_equals(shadowRoot.querySelector('ef').customElementRegistry, null);
|
||||
const registry = new CustomElementRegistry;
|
||||
registry.initialize(shadowRoot);
|
||||
assert_equals(shadowRoot.customElementRegistry, registry);
|
||||
assert_equals(shadowRoot.querySelector('a-b').customElementRegistry, registry);
|
||||
assert_equals(shadowRoot.querySelector('ef').customElementRegistry, registry);
|
||||
document.body.appendChild(clone);
|
||||
assert_equals(shadowRoot.customElementRegistry, registry);
|
||||
assert_equals(shadowRoot.querySelector('a-b').customElementRegistry, registry);
|
||||
assert_equals(shadowRoot.querySelector('ef').customElementRegistry, registry);
|
||||
}, 'initialize sets element.customElementRegistry permantently');
|
||||
|
||||
test(() => {
|
||||
const clone = document.getElementById('host-with-registry').cloneNode(true);
|
||||
const shadowRoot = clone.shadowRoot;
|
||||
assert_equals(shadowRoot.customElementRegistry, window.customElements);
|
||||
assert_equals(shadowRoot.querySelector('a-b').customElementRegistry, window.customElements);
|
||||
assert_equals(shadowRoot.querySelector('ef').customElementRegistry, window.customElements);
|
||||
const registry = new CustomElementRegistry;
|
||||
registry.initialize(shadowRoot);
|
||||
assert_equals(shadowRoot.customElementRegistry, window.customElements);
|
||||
assert_equals(shadowRoot.querySelector('a-b').customElementRegistry, window.customElements);
|
||||
assert_equals(shadowRoot.querySelector('ef').customElementRegistry, window.customElements);
|
||||
}, 'initialize is no-op on a subtree with a non-null registry');
|
||||
|
||||
test(() => {
|
||||
const doc = new Document();
|
||||
assert_equals(doc.customElementRegistry, null);
|
||||
const registry = new CustomElementRegistry();
|
||||
registry.initialize(doc);
|
||||
assert_equals(doc.customElementRegistry, registry);
|
||||
}, 'initialize works on Document');
|
||||
|
||||
test(() => {
|
||||
const doc = new Document();
|
||||
const df = doc.createDocumentFragment();
|
||||
const dummy = doc.createElement("dummy");
|
||||
df.append(dummy);
|
||||
assert_equals(dummy.customElementRegistry, null);
|
||||
assert_equals(df.customElementRegistry, undefined);
|
||||
const registry = new CustomElementRegistry();
|
||||
registry.initialize(df);
|
||||
assert_equals(dummy.customElementRegistry, registry);
|
||||
assert_equals(df.customElementRegistry, undefined);
|
||||
}, 'initialize works on DocumentFragment');
|
||||
|
||||
test(() => {
|
||||
const shadowRoot = document.getElementById('host').cloneNode(true).shadowRoot;
|
||||
const ab = shadowRoot.querySelector('a-b');
|
||||
const ef = shadowRoot.querySelector('ef');
|
||||
const registry = new CustomElementRegistry();
|
||||
ab.innerHTML = '<dummy></dummy><div></div>';
|
||||
registry.initialize(ab);
|
||||
assert_equals(ab.customElementRegistry, registry);
|
||||
assert_equals(ab.firstElementChild.customElementRegistry, registry);
|
||||
assert_equals(ab.lastElementChild.customElementRegistry, registry);
|
||||
ef.innerHTML = '<dummy></dummy><div></div>';
|
||||
registry.initialize(ef);
|
||||
assert_equals(ef.customElementRegistry, registry);
|
||||
assert_equals(ef.firstElementChild.customElementRegistry, registry);
|
||||
assert_equals(ef.lastElementChild.customElementRegistry, registry);
|
||||
registry.initialize(shadowRoot);
|
||||
assert_equals(ab.customElementRegistry, registry);
|
||||
assert_equals(ab.firstElementChild.customElementRegistry, registry);
|
||||
assert_equals(ab.lastElementChild.customElementRegistry, registry);
|
||||
assert_equals(ef.customElementRegistry, registry);
|
||||
assert_equals(ef.firstElementChild.customElementRegistry, registry);
|
||||
assert_equals(ef.lastElementChild.customElementRegistry, registry);
|
||||
}, 'initialize sets registry on shadow root descendants with no registry');
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user