<!doctype html>
<html>
<head>
<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
<script>
function test()
{
    // Each input is wrapped in the String constructor to force stringification.
    let testInputs = [
        {
            title: "ArrayKeys",
            input: "keys([3,4])",
        },
        {
            title: "ArrayValues",
            input: "values([3,4])",
        },
        {
            title: "DollarZero",
            input: "$0",
            setup: selectElementForDollarZero,
        },
        {
            title: "InvalidSelector",
            input: "$('foo')",
            setup: listenForConsoleWarning,
        },
        {
            title: "IdSelector",
            input: "$('#foo')",
        },
        {
            title: "IdSelectorWithContext",
            input: "$('#foo', document.body)",
        },
        {
            title: "IdSelectorWithInvalidContext",
            input: "$('#foo', 'non-node')",
        },
        {
            title: "IdSelectorDynamicContext",
            input: "$('#foo', $('#bar'))",
        },
        {
            title: "ElementSelectorAll",
            input: "$$('p')",
        },
        {
            title: "ElementSelectorAllWithContext",
            input: "$$('p', document.body)",
        },
    ];

    let suite = InspectorTest.createAsyncSuite("Console.TestCommandLineAPI");

    function addAPITestCase({title, input, setup}) {
        suite.addTestCase({
            name: `Evaluate${title}`,
            setup,
            test(resolve, reject) {
                InspectorTest.log(`Input: ${input}`);

                function callback(result, wasThrown) {
                    if (result) {
                        InspectorTest.log(`Output: ${result.description}`);
                        resolve();
                    } else
                        reject();
                }

                WI.runtimeManager.evaluateInInspectedWindow(`String(${input})`, {objectGroup: "test", includeCommandLineAPI: true}, callback);
            }
        })
    }

    for (let input of testInputs)
        addAPITestCase(input);

    suite.runTestCasesAndFinish();

    function listenForConsoleWarning(resolve, reject) {
        // Detect console warning for $('foo').
        WI.consoleManager.singleFireEventListener(WI.ConsoleManager.Event.MessageAdded, (event) => {
            let message = event.data.message;
            InspectorTest.assert(message instanceof WI.ConsoleMessage);
            InspectorTest.log(`CONSOLE: ${message.messageText}`);
        });

        resolve();
    }

    function selectElementForDollarZero(resolve, reject) {
        WI.domManager.requestDocument((documentNode) => {
            if (!documentNode) {
                InspectorTest.log("FAIL: DOM node not found.");
                return reject();
            }

            // Select div#foo for $0.
            documentNode.querySelector("#foo", (contentNodeId) => {
                if (!contentNodeId) {
                    InspectorTest.log("FAIL: DOM node not found.");
                    return reject();
                }

                DOMAgent.setInspectedNode(contentNodeId);
                resolve();
            });
        });
    }
}
</script>
</head>
<body onload="runTest();">
    <p id="foo">Tests that command line api works.</p>
    <p id="bar"></p>
</body>
</html>
