<!doctype html>
<html>
<head>
<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
<script>
function test()
{
    function evaluate$0(callback) {
        WI.runtimeManager.evaluateInInspectedWindow("$0", {objectGroup: "test", includeCommandLineAPI: true}, callback);
    }

    let nodeA, nodeB;

    let suite = InspectorTest.createAsyncSuite("DOM.setInspectedNode");

    suite.addTestCase({
        name: "Check$0IsUndefined",
        description: "No inspected node yet, $0 should be undefined.",
        test(resolve, reject) {
            evaluate$0((remoteObject) => {
                InspectorTest.expectThat(remoteObject.isUndefined(), "$0 should be undefined.");
                resolve();
            });
        }
    });

    suite.addTestCase({
        name: "SetAndCheckNodeA",
        description: "Set the inspected node to be Node A and check that $0 is Node A.",
        test(resolve, reject) {
            DOMAgent.setInspectedNode(nodeA.id);
            evaluate$0((remoteObject) => {
                remoteObject.pushNodeToFrontend((nodeId) => {
                    InspectorTest.expectThat(remoteObject.isNode(), "$0 should be a node.");
                    InspectorTest.expectThat(nodeId === nodeA.id, "$0 should be Node A.");
                    resolve();
                });
            });
        }
    });

    suite.addTestCase({
        name: "SetBadNodeId",
        description: "If an invalid inspected node is set, it should not be bound to $0.",
        test(resolve, reject) {
            DOMAgent.setInspectedNode(999999, (error) => {
                InspectorTest.expectThat(error, "Should be an error");
            });
            evaluate$0((remoteObject) => {
                remoteObject.pushNodeToFrontend((nodeId) => {
                    InspectorTest.expectThat(remoteObject.isNode(), "$0 should be a node.");
                    InspectorTest.expectThat(nodeId === nodeA.id, "$0 should be Node A.");
                    resolve();
                });
            });
        }
    });

    suite.addTestCase({
        name: "SetAndCheckNodeB",
        description: "Set the inspected node to be Node B and check that $0 is Node B.",
        test(resolve, reject) {
            DOMAgent.setInspectedNode(nodeB.id);
            evaluate$0((remoteObject) => {
                remoteObject.pushNodeToFrontend((nodeId) => {
                    InspectorTest.expectThat(remoteObject.isNode(), "$0 should be a node.");
                    InspectorTest.expectThat(nodeId !== nodeA.id, "$0 should not be Node A.");
                    InspectorTest.expectThat(nodeId === nodeB.id, "$0 should be Node B.");
                    resolve();
                });
            });
        }
    });

    // FIXME: What should $0 be after reloading / navigating the page. Should it be cleared?

    WI.domManager.requestDocument((documentNode) => {
        documentNode.querySelector("#a", (contentNodeId) => {
            InspectorTest.assert(contentNodeId, "#a node should exist.");
            nodeA = WI.domManager.nodeForId(contentNodeId);
        });
        documentNode.querySelector("#b", (contentNodeId) => {
            InspectorTest.assert(contentNodeId, "#b node should exist.");
            nodeB = WI.domManager.nodeForId(contentNodeId);
            suite.runTestCasesAndFinish();
        });
    });
}
</script>
</head>
<body onload="runTest()">
<p>Test for the DOM.setInspectedNode command.</p>
<div style="display:none">
    <p id="a">Node A</p>
    <p id="b">Node B</p>
</div>
</body>
</html>
