blob: 0f243f4326ef2e0b4fedbc01e9d65e90815ceeae [file] [log] [blame] [edit]
<!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>