<!DOCTYPE html>
<html>
<head>
<script src="../../http/tests/inspector/resources/protocol-test.js"></script>
<script>
function triggerPause() {
    debugger;
}

function test()
{
    InspectorProtocol.sendCommand("Debugger.enable");
    InspectorProtocol.sendCommand("Debugger.setBreakpointsActive", {active: true});

    let suite = ProtocolTest.createAsyncSuite("Debugger.evaluateOnCallFrame.errors");

    suite.addTestCase({
        name: "EvaluateOnCallFrameNotPaused",
        description: "Triggering evaluate on call frame when not paused should issue an error.",
        test(resolve, reject) {
            ProtocolTest.evaluateInPage("triggerPause()");

            let callFrameIdentifier;

            InspectorProtocol.eventHandler["Debugger.paused"] = (messageObject) => {
                ProtocolTest.pass("Paused");
                InspectorProtocol.sendCommand("Debugger.resume");
                callFrameIdentifier = messageObject.params.callFrames[0].callFrameId;
            };

            InspectorProtocol.eventHandler["Debugger.resumed"] = (messageObject) => {
                ProtocolTest.pass("Resumed");
                InspectorProtocol.sendCommand("Debugger.evaluateOnCallFrame", {callFrameId: callFrameIdentifier, expression: "this"}, (messageObject) => {
                    ProtocolTest.expectThat(messageObject.error, `Should be an error: ${messageObject.error ? messageObject.error.message : ""}`);
                    resolve();
                });
            };
        }
    });

    suite.addTestCase({
        name: "EvaluateOnCallFrameBadCallFrameIdentifier",
        description: "Triggering evaluate on call frame with a bad call frame identifier should issue an error.",
        test(resolve, reject) {
            ProtocolTest.evaluateInPage("triggerPause()");

            InspectorProtocol.eventHandler["Debugger.paused"] = (messageObject) => {
                ProtocolTest.pass("Paused");

                InspectorProtocol.sendCommand("Debugger.evaluateOnCallFrame", {callFrameId: "BAD-CALL-FRAME-ID", expression: "this"}, (messageObject) => {
                    ProtocolTest.expectThat(messageObject.error, `Should be an error: ${messageObject.error ? messageObject.error.message : ""}`);
                    InspectorProtocol.sendCommand("Debugger.resume");
                });
            };

            InspectorProtocol.eventHandler["Debugger.resumed"] = (messageObject) => {
                ProtocolTest.pass("Resumed");
                resolve();
            };
        }
    });

    suite.runTestCasesAndFinish();
}
</script>
</head>
<body onload="runTest()">
<p>Calling Debugger.evaluateOnCallFrame protocol error cases.</p>
</body>
</html>
