<!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>
