| <!DOCTYPE html> | |
| <html> | |
| <head> | |
| <script src="../../http/tests/inspector/resources/inspector-test.js"></script> | |
| <script> | |
| customElements.define("test-element", class TestElement extends HTMLElement { | |
| connectedCallback() { | |
| let shadowRoot = this.attachShadow({ | |
| mode: "open", | |
| slotAssignment: this.id.substring(0, this.id.indexOf("-")), | |
| }); | |
| this._slotElement = shadowRoot.appendChild(document.createElement("slot")); | |
| this._slotElement.name = "test-slot"; | |
| } | |
| assign(...nodes) { | |
| this._slotElement.assign(...nodes); | |
| } | |
| }); | |
| function test() | |
| { | |
| let suite = InspectorTest.createAsyncSuite("CSS.nodeLayoutFlagsChanged.SlotFilled"); | |
| function addTestCase({name, selector, domNodeHandler}) | |
| { | |
| suite.addTestCase({ | |
| name, | |
| async test() { | |
| let documentNode = await WI.domManager.requestDocument(); | |
| let containerNodeId = await documentNode.querySelector(selector); | |
| let containerNode = WI.domManager.nodeForId(containerNodeId); | |
| InspectorTest.assert(containerNode, `Should find DOM Node for selector '${selector}'.`); | |
| let slotNodeId = await containerNode.shadowRoots()[0].querySelector("slot"); | |
| let slotNode = WI.domManager.nodeForId(slotNodeId); | |
| InspectorTest.assert(slotNode, `Should find <slot> inside DOM Node for selector '${selector}'.`); | |
| await domNodeHandler(slotNode); | |
| }, | |
| }); | |
| } | |
| addTestCase({ | |
| name: "CSS.nodeLayoutFlagsChanged.SlotFilled.Named.Empty", | |
| selector: "#named-empty", | |
| async domNodeHandler(domNode) { | |
| InspectorTest.expectFalse(domNode.layoutFlags.includes(WI.DOMNode.LayoutFlag.SlotFilled), "Should not be filled."); | |
| InspectorTest.log("Changing slot of child..."); | |
| await Promise.all([ | |
| domNode.awaitEvent(WI.DOMNode.Event.LayoutFlagsChanged), | |
| InspectorTest.evaluateInPage(`document.querySelector("#named-empty-1").slot = "test-slot"`), | |
| ]); | |
| InspectorTest.expectTrue(domNode.layoutFlags.includes(WI.DOMNode.LayoutFlag.SlotFilled), "Should be filled."); | |
| let listener = domNode.addEventListener(WI.DOMNode.Event.LayoutFlagsChanged, (event) => { | |
| InspectorTest.fail("Should not change layout flags."); | |
| }); | |
| InspectorTest.log("Adding child with slot..."); | |
| await InspectorTest.evaluateInPage(`document.querySelector("#named-empty").appendChild(document.querySelector("#named-empty-2"))`); | |
| InspectorTest.expectTrue(domNode.layoutFlags.includes(WI.DOMNode.LayoutFlag.SlotFilled), "Should be filled."); | |
| domNode.removeEventListener(WI.DOMNode.Event.LayoutFlagsChanged, listener); | |
| }, | |
| }); | |
| addTestCase({ | |
| name: "CSS.nodeLayoutFlagsChanged.SlotFilled.Named.Filled", | |
| selector: "#named-filled", | |
| async domNodeHandler(domNode) { | |
| InspectorTest.expectTrue(domNode.layoutFlags.includes(WI.DOMNode.LayoutFlag.SlotFilled), "Should be filled."); | |
| let listener = domNode.addEventListener(WI.DOMNode.Event.LayoutFlagsChanged, (event) => { | |
| InspectorTest.fail("Should not change layout flags."); | |
| }); | |
| InspectorTest.log("Removing first assigned node..."); | |
| await InspectorTest.evaluateInPage(`document.querySelector("#named-filled-1").remove()`); | |
| InspectorTest.expectTrue(domNode.layoutFlags.includes(WI.DOMNode.LayoutFlag.SlotFilled), "Should be filled."); | |
| domNode.removeEventListener(WI.DOMNode.Event.LayoutFlagsChanged, listener); | |
| InspectorTest.log("Removing last assigned node..."); | |
| await Promise.all([ | |
| domNode.awaitEvent(WI.DOMNode.Event.LayoutFlagsChanged), | |
| InspectorTest.evaluateInPage(`document.querySelector("#named-filled-2").slot = "invalid-slot"`), | |
| ]); | |
| InspectorTest.expectFalse(domNode.layoutFlags.includes(WI.DOMNode.LayoutFlag.SlotFilled), "Should not be filled."); | |
| }, | |
| }); | |
| addTestCase({ | |
| name: "CSS.nodeLayoutFlagsChanged.SlotFilled.Manual.Empty", | |
| selector: "#manual-empty", | |
| async domNodeHandler(domNode) { | |
| InspectorTest.expectFalse(domNode.layoutFlags.includes(WI.DOMNode.LayoutFlag.SlotFilled), "Should not be filled."); | |
| InspectorTest.log("Adding second child as assigned node..."); | |
| await Promise.all([ | |
| domNode.awaitEvent(WI.DOMNode.Event.LayoutFlagsChanged), | |
| InspectorTest.evaluateInPage(`document.querySelector("#manual-empty").assign(document.querySelector("#manual-empty-2"))`), | |
| ]); | |
| InspectorTest.expectTrue(domNode.layoutFlags.includes(WI.DOMNode.LayoutFlag.SlotFilled), "Should be filled."); | |
| let listener = domNode.addEventListener(WI.DOMNode.Event.LayoutFlagsChanged, (event) => { | |
| InspectorTest.fail("Should not change layout flags."); | |
| }); | |
| InspectorTest.log("Adding first child as assigned node..."); | |
| await InspectorTest.evaluateInPage(`document.querySelector("#manual-empty").assign(...document.querySelectorAll("#manual-empty > span"))`); | |
| InspectorTest.expectTrue(domNode.layoutFlags.includes(WI.DOMNode.LayoutFlag.SlotFilled), "Should be filled."); | |
| domNode.removeEventListener(WI.DOMNode.Event.LayoutFlagsChanged, listener); | |
| }, | |
| }); | |
| addTestCase({ | |
| name: "CSS.nodeLayoutFlagsChanged.SlotFilled.Manual.Filled", | |
| selector: "#manual-filled", | |
| async domNodeHandler(domNode) { | |
| InspectorTest.expectTrue(domNode.layoutFlags.includes(WI.DOMNode.LayoutFlag.SlotFilled), "Should be filled."); | |
| let listener = domNode.addEventListener(WI.DOMNode.Event.LayoutFlagsChanged, (event) => { | |
| InspectorTest.fail("Should not change layout flags."); | |
| }); | |
| InspectorTest.log("Removing first assigned node..."); | |
| await InspectorTest.evaluateInPage(`document.querySelector("#manual-filled").assign(document.querySelector("#manual-filled-2"))`); | |
| InspectorTest.expectTrue(domNode.layoutFlags.includes(WI.DOMNode.LayoutFlag.SlotFilled), "Should be filled."); | |
| domNode.removeEventListener(WI.DOMNode.Event.LayoutFlagsChanged, listener); | |
| InspectorTest.log("Removing last assigned node..."); | |
| await Promise.all([ | |
| domNode.awaitEvent(WI.DOMNode.Event.LayoutFlagsChanged), | |
| InspectorTest.evaluateInPage(`document.querySelector("#manual-filled").assign()`), | |
| ]); | |
| InspectorTest.expectFalse(domNode.layoutFlags.includes(WI.DOMNode.LayoutFlag.SlotFilled), "Should not be filled."); | |
| }, | |
| }); | |
| suite.runTestCasesAndFinish(); | |
| } | |
| </script> | |
| </head> | |
| <body onload="runTest()"> | |
| <test-element id="named-empty"> | |
| <span slot="invalid-slot" id="named-empty-1"></span> | |
| </test-element> | |
| <span slot="test-slot" id="named-empty-2"></span> | |
| <test-element id="named-filled"> | |
| <span slot="test-slot" id="named-filled-1"></span> | |
| <span slot="test-slot" id="named-filled-2"></span> | |
| </test-element> | |
| <test-element id="manual-empty"> | |
| <span slot="test-slot" id="manual-empty-1"></span> | |
| <span slot="test-slot" id="manual-empty-2"></span> | |
| </test-element> | |
| <test-element id="manual-filled"> | |
| <span slot="invalid-slot" id="manual-filled-1"></span> | |
| <span slot="invalid-slot" id="manual-filled-2"></span> | |
| </test-element> | |
| <script> | |
| document.querySelector("#manual-filled").assign(...document.querySelectorAll("#manual-filled > span")); | |
| </script> | |
| </body> | |
| </html> |