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