| <!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.Attribute.Initial", |
| description: "Test node with an attribute 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.Attribute.Removed.Parent", |
| description: "Test that removing an attribute 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 attribute 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").onclick = null`); |
| 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.Attribute.Removed.Child", |
| description: "Test that removing an attribute 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 attribute 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").onclick = null`); |
| 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.Attribute.Removed", |
| description: "Test removing an attribute event listener.", |
| selector: "#target", |
| async domNodeHandler(domNode) { |
| InspectorTest.assert(domNode.layoutFlags.includes(WI.DOMNode.LayoutFlag.Event), "Should have Event layout flag."); |
| |
| InspectorTest.log("Removing attribute event listener..."); |
| await Promise.all([ |
| domNode.awaitEvent(WI.DOMNode.Event.LayoutFlagsChanged), |
| InspectorTest.evaluateInPage(`document.querySelector("#target").onclick = null`), |
| ]); |
| |
| InspectorTest.expectFalse(domNode.layoutFlags.includes(WI.DOMNode.LayoutFlag.Event), "Should not have Event layout flag."); |
| }, |
| }); |
| |
| addTestCase({ |
| name: "CSS.nodeLayoutFlagsChanged.Event.Attribute.Added.Parent", |
| description: "Test that adding an attribute 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 attribute 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").onclick = (function parentClick2() { })`); |
| 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.Attribute.Added.Child", |
| description: "Test that adding an attribute 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 attribute 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").onclick = (function childClick2() { })`); |
| 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.Attribute.Added", |
| description: "Test adding an attribute 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 attribute event listener..."); |
| await Promise.all([ |
| domNode.awaitEvent(WI.DOMNode.Event.LayoutFlagsChanged), |
| InspectorTest.evaluateInPage(`document.querySelector("#target").onclick = (function targetClick2() { })`), |
| ]); |
| |
| InspectorTest.expectTrue(domNode.layoutFlags.includes(WI.DOMNode.LayoutFlag.Event), "Should have Event layout flag."); |
| }, |
| }); |
| |
| addTestCase({ |
| name: "CSS.nodeLayoutFlagsChanged.Event.Attribute.RapidChange", |
| description: "Test rapidly removing and adding an attribute 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 attribute 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) { let old = document.querySelector("#target").onclick; document.querySelector("#target").onclick = null; document.querySelector("#target").onclick = old; }`); |
| 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" onclick="(function parentClick(event) { })()"> |
| <div id="target" onclick="(function targetClick(event) { })()"> |
| <div id="child" onclick="(function childClick(event) { })()"> |
| </div> |
| </div> |
| </body> |
| </html> |