blob: 12cbd3f0bb63f2219b6f3bb28044509f0c2d6f0f [file] [log] [blame] [edit]
<!DOCTYPE html>
<html>
<head>
<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
<script>
function test()
{
let suite = InspectorTest.createAsyncSuite("CSS.nodeLayoutFlagsChanged.Event");
function addTestCase({name, description, selector, setup, domNodeHandler})
{
suite.addTestCase({
name,
description,
setup,
async test() {
let documentNode = await WI.domManager.requestDocument();
let nodeId = await documentNode.querySelector(selector);
let domNode = WI.domManager.nodeForId(nodeId);
InspectorTest.assert(domNode, `Should find DOM Node for selector '${selector}'.`);
await domNodeHandler(domNode);
},
});
}
addTestCase({
name: "CSS.nodeLayoutFlagsChanged.Event.Script.Initial",
description: "Test node with a JS event listener.",
selector: "#target",
async domNodeHandler(domNode) {
InspectorTest.expectTrue(domNode.layoutFlags.includes(WI.DOMNode.LayoutFlag.Event), "Should have Event layout flag.");
},
});
addTestCase({
name: "CSS.nodeLayoutFlagsChanged.Event.Script.Removed.Parent",
description: "Test that removing a JS event listener from a parent has no effect on the child.",
selector: "#target",
async domNodeHandler(domNode) {
InspectorTest.assert(domNode.layoutFlags.includes(WI.DOMNode.LayoutFlag.Event), "Should have Event layout flag.");
InspectorTest.log("Removing JS event listener from parent...");
let listener = domNode.singleFireEventListener(WI.DOMNode.Event.LayoutFlagsChanged, (event) => {
InspectorTest.fail("Should not change layout flags of child.");
});
await InspectorTest.evaluateInPage(`document.querySelector("#parent").removeEventListener("click", handler)`);
domNode.removeEventListener(WI.DOMNode.Event.LayoutFlagsChanged, listener);
InspectorTest.expectTrue(domNode.layoutFlags.includes(WI.DOMNode.LayoutFlag.Event), "Should have Event layout flag.");
},
});
addTestCase({
name: "CSS.nodeLayoutFlagsChanged.Event.Script.Removed.Child",
description: "Test that removing a JS event listener from a child has no effect on the parent.",
selector: "#target",
async domNodeHandler(domNode) {
InspectorTest.assert(domNode.layoutFlags.includes(WI.DOMNode.LayoutFlag.Event), "Should have Event layout flag.");
InspectorTest.log("Removing JS event listener from child...");
let listener = domNode.singleFireEventListener(WI.DOMNode.Event.LayoutFlagsChanged, (event) => {
InspectorTest.fail("Should not change layout flags of parent.");
});
await InspectorTest.evaluateInPage(`document.querySelector("#child").removeEventListener("click", handler)`);
domNode.removeEventListener(WI.DOMNode.Event.LayoutFlagsChanged, listener);
InspectorTest.expectTrue(domNode.layoutFlags.includes(WI.DOMNode.LayoutFlag.Event), "Should have Event layout flag.");
},
});
addTestCase({
name: "CSS.nodeLayoutFlagsChanged.Event.Script.Removed",
description: "Test removing a JS event listener.",
selector: "#target",
async domNodeHandler(domNode) {
InspectorTest.assert(domNode.layoutFlags.includes(WI.DOMNode.LayoutFlag.Event), "Should have Event layout flag.");
InspectorTest.log("Removing JS event listener...");
await Promise.all([
domNode.awaitEvent(WI.DOMNode.Event.LayoutFlagsChanged),
InspectorTest.evaluateInPage(`document.querySelector("#target").removeEventListener("click", handler)`),
]);
InspectorTest.expectFalse(domNode.layoutFlags.includes(WI.DOMNode.LayoutFlag.Event), "Should not have Event layout flag.");
},
});
addTestCase({
name: "CSS.nodeLayoutFlagsChanged.Event.Script.Added.Parent",
description: "Test that adding a JS event listener to a parent has no effect on the child.",
selector: "#target",
async domNodeHandler(domNode) {
InspectorTest.assert(!domNode.layoutFlags.includes(WI.DOMNode.LayoutFlag.Event), "Should not have Event layout flag.");
InspectorTest.log("Adding JS event listener to parent...");
let listener = domNode.singleFireEventListener(WI.DOMNode.Event.LayoutFlagsChanged, (event) => {
InspectorTest.fail("Should not change layout flags of child.");
});
await InspectorTest.evaluateInPage(`document.querySelector("#parent").addEventListener("click", handler)`);
domNode.removeEventListener(WI.DOMNode.Event.LayoutFlagsChanged, listener);
InspectorTest.expectFalse(domNode.layoutFlags.includes(WI.DOMNode.LayoutFlag.Event), "Should not have Event layout flag.");
},
});
addTestCase({
name: "CSS.nodeLayoutFlagsChanged.Event.Script.Added.Child",
description: "Test that adding a JS event listener to a child has no effect on the parent.",
selector: "#target",
async domNodeHandler(domNode) {
InspectorTest.assert(!domNode.layoutFlags.includes(WI.DOMNode.LayoutFlag.Event), "Should not have Event layout flag.");
InspectorTest.log("Adding JS event listener to child...");
let listener = domNode.singleFireEventListener(WI.DOMNode.Event.LayoutFlagsChanged, (event) => {
InspectorTest.fail("Should not change layout flags of parent.");
});
await InspectorTest.evaluateInPage(`document.querySelector("#child").addEventListener("click", handler)`);
domNode.removeEventListener(WI.DOMNode.Event.LayoutFlagsChanged, listener);
InspectorTest.expectFalse(domNode.layoutFlags.includes(WI.DOMNode.LayoutFlag.Event), "Should not have Event layout flag.");
},
});
addTestCase({
name: "CSS.nodeLayoutFlagsChanged.Event.Script.Added",
description: "Test adding a JS event listener.",
selector: "#target",
async domNodeHandler(domNode) {
InspectorTest.assert(!domNode.layoutFlags.includes(WI.DOMNode.LayoutFlag.Event), "Should not have Event layout flag.");
InspectorTest.log("Adding JS event listener...");
await Promise.all([
domNode.awaitEvent(WI.DOMNode.Event.LayoutFlagsChanged),
InspectorTest.evaluateInPage(`document.querySelector("#target").addEventListener("click", handler)`),
]);
InspectorTest.expectTrue(domNode.layoutFlags.includes(WI.DOMNode.LayoutFlag.Event), "Should have Event layout flag.");
},
});
addTestCase({
name: "CSS.nodeLayoutFlagsChanged.Event.Script.RapidChange",
description: "Test rapidly removing and adding a JS event listener.",
selector: "#target",
async domNodeHandler(domNode) {
InspectorTest.assert(domNode.layoutFlags.includes(WI.DOMNode.LayoutFlag.Event), "Should have Event layout flag.");
InspectorTest.log("Rapidly changing JS event listener...");
let listener = domNode.singleFireEventListener(WI.DOMNode.Event.LayoutFlagsChanged, (event) => {
InspectorTest.fail("Should not change layout flags.");
});
await InspectorTest.evaluateInPage(`for (let i = 0; i < 10; ++i) { document.querySelector("#target").removeEventListener("click", handler); document.querySelector("#target").addEventListener("click", handler); }`);
domNode.removeEventListener(WI.DOMNode.Event.LayoutFlagsChanged, listener);
InspectorTest.expectTrue(domNode.layoutFlags.includes(WI.DOMNode.LayoutFlag.Event), "Should have Event layout flag.");
},
});
suite.runTestCasesAndFinish();
}
</script>
</head>
<body onload="runTest()">
<p>Tests for the CSS.nodeLayoutFlagsChanged event with the Event enum.</p>
<div id="parent">
<div id="target">
<div id="child">
</div>
</div>
<script>
function handler() { }
document.querySelector("#parent").addEventListener("click", handler);
document.querySelector("#target").addEventListener("click", handler);
document.querySelector("#child").addEventListener("click", handler);
</script>
</body>
</html>