|
9 | 9 | <body>
|
10 | 10 |
|
11 | 11 | <script>
|
12 |
| -function testElementType(allowsShadowDom, elementType, runGetHTMLOnShadowRoot, declarativeShadowDom, mode, delegatesFocus, serializable) { |
| 12 | +function testElementType(allowsShadowDom, elementType, runGetHTMLOnShadowRoot, declarativeShadowDom, mode, delegatesFocus, serializable, clonable) { |
13 | 13 | const t = test(t => {
|
14 | 14 | // Create and attach element
|
15 | 15 | let wrapper;
|
|
27 | 27 |
|
28 | 28 | let shadowRoot;
|
29 | 29 | const isOpen = mode === 'open';
|
30 |
| - let initDict = {mode: mode, delegatesFocus: delegatesFocus}; |
| 30 | + let initDict = {mode: mode, delegatesFocus: delegatesFocus, clonable}; |
31 | 31 | let expectedSerializable = null;
|
32 | 32 | switch (serializable) {
|
33 | 33 | case undefined: expectedSerializable = false; break;
|
|
37 | 37 | }
|
38 | 38 | const delegatesAttr = delegatesFocus ? ' shadowrootdelegatesfocus=""' : '';
|
39 | 39 | const serializableAttr = expectedSerializable ? ' serializable=""' : '';
|
| 40 | + const clonableAttr = clonable ? ' shadowrootclonable=""' : ''; |
40 | 41 |
|
41 | 42 | if (allowsShadowDom && declarativeShadowDom) {
|
42 |
| - const html = `<${elementType}><template shadowrootmode=${mode}${delegatesAttr}${serializableAttr}>`; |
| 43 | + const html = `<${elementType}><template shadowrootmode=${mode}${delegatesAttr}${serializableAttr}${clonableAttr}>`; |
43 | 44 | wrapper.setHTMLUnsafe(html);
|
44 | 45 | if (isOpen) {
|
45 | 46 | shadowRoot = wrapper.firstElementChild.shadowRoot;
|
|
58 | 59 | assert_true(!allowsShadowDom || !!shadowRoot);
|
59 | 60 |
|
60 | 61 | if (allowsShadowDom) {
|
61 |
| - const correctShadowHtml = `<template shadowrootmode="${mode}"${delegatesAttr}${serializableAttr}><slot></slot></template>`; |
| 62 | + const correctShadowHtml = `<template shadowrootmode="${mode}"${delegatesAttr}${serializableAttr}${clonableAttr}><slot></slot></template>`; |
62 | 63 | const correctHtml = `<${elementType}>${correctShadowHtml}</${elementType}>`;
|
63 | 64 | assert_equals(shadowRoot.mode,mode);
|
64 | 65 | assert_equals(shadowRoot.delegatesFocus,delegatesFocus);
|
65 | 66 | assert_equals(shadowRoot.serializable,expectedSerializable);
|
| 67 | + assert_equals(shadowRoot.clonable,clonable); |
66 | 68 | shadowRoot.appendChild(document.createElement('slot'));
|
67 | 69 | const emptyElement = `<${elementType}></${elementType}>`;
|
68 | 70 | if (isOpen) {
|
|
91 | 93 | // ...and that the default for includeShadowRoots is false.
|
92 | 94 | assert_equals(wrapper.getHTML(),wrapper.innerHTML,'The default for includeShadowRoots should be false');
|
93 | 95 |
|
94 |
| - }, `${runGetHTMLOnShadowRoot ? 'ShadowRoot' : 'Element'}.getHTML() on <${elementType}>${allowsShadowDom ? `, with ${declarativeShadowDom ? 'declarative' : 'imperative'} shadow, mode=${mode}, delegatesFocus=${delegatesFocus}, serializable=${serializable}.` : ''}`); |
| 96 | + }, `${runGetHTMLOnShadowRoot ? 'ShadowRoot' : 'Element'}.getHTML() on <${elementType}>${allowsShadowDom ? `, with ${declarativeShadowDom ? 'declarative' : 'imperative'} shadow, mode=${mode}, delegatesFocus=${delegatesFocus}, serializable=${serializable}, clonable=${clonable}.` : ''}`); |
95 | 97 | }
|
96 | 98 |
|
97 | 99 | function runAllTests() {
|
|
103 | 105 | if (allowsShadowDom) {
|
104 | 106 | for (const declarativeShadowDom of [false, true]) {
|
105 | 107 | for (const delegatesFocus of [false, true]) {
|
106 |
| - for (const mode of ['open', 'closed']) { |
107 |
| - for (const serializable of [undefined, 'false', 'true']) { |
108 |
| - testElementType(true, elementName, runGetHTMLOnShadowRoot, declarativeShadowDom, mode, delegatesFocus, serializable); |
| 108 | + for (const clonable of [false, true]) { |
| 109 | + for (const mode of ['open', 'closed']) { |
| 110 | + for (const serializable of [undefined, 'false', 'true']) { |
| 111 | + testElementType(true, elementName, runGetHTMLOnShadowRoot, declarativeShadowDom, mode, delegatesFocus, serializable, clonable); |
| 112 | + } |
109 | 113 | }
|
110 | 114 | }
|
111 | 115 | }
|
|
0 commit comments