blob: 878499d1feaa658299924a98e1855f7775d9d0ce [file] [log] [blame]
// Copyright 2016 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
let {session, contextGroup, Protocol} = InspectorTest.start('Tests Debugger.continueToLocation');
contextGroup.addScript(
`function statementsExample()
{
var self = arguments.callee;
debugger;
self.step = 1;
self.step = 2;
void [
self.step = 3,
self.step = 4,
self.step = 5,
self.step = 6
];
self.step = 7;
}`);
var scenario = [
// requested line number, expected control parameter 'step', expected line number
[ 8, 1, 8 ],
[ 8, 1, 8 ],
[ 12, 6, 17 ],
[ 13, 6, 17 ],
[ 17, 6, 17 ],
[ 17, 6, 17 ],
];
Protocol.Debugger.enable();
Protocol.Runtime.evaluate({ "expression": "statementsExample" }).then(callbackEvalFunctionObject);
function callbackEvalFunctionObject(response)
{
var functionObjectId = response.result.result.objectId;
Protocol.Runtime.getProperties({ objectId: functionObjectId }).then(callbackFunctionDetails);
}
function callbackFunctionDetails(response)
{
var result = response.result;
var scriptId;
for (var prop of result.internalProperties) {
if (prop.name === "[[FunctionLocation]]")
scriptId = prop.value.value.scriptId;
}
nextScenarioStep(0);
function nextScenarioStep(pos)
{
if (pos < scenario.length)
gotoSinglePassChain(scriptId, scenario[pos][0], scenario[pos][1], scenario[pos][2], nextScenarioStep.bind(this, pos + 1));
else
InspectorTest.completeTest();
}
}
function gotoSinglePassChain(scriptId, lineNumber, expectedResult, expectedLineNumber, next)
{
Protocol.Debugger.oncePaused().then(handleDebuggerPausedOne);
Protocol.Runtime.evaluate({ "expression": "setTimeout(statementsExample, 0)" });
function handleDebuggerPausedOne(messageObject)
{
InspectorTest.log("Paused on debugger statement");
Protocol.Debugger.oncePaused().then(handleDebuggerPausedTwo);
Protocol.Debugger.continueToLocation({ location: { scriptId: scriptId, lineNumber: lineNumber, columnNumber: 0} }).then(logContinueToLocation);
function logContinueToLocation(response)
{
if (response.error) {
InspectorTest.log("Failed to execute continueToLocation " + JSON.stringify(response.error));
InspectorTest.completeTest();
}
}
}
function handleDebuggerPausedTwo(messageObject)
{
InspectorTest.log("Paused after continueToLocation");
var actualLineNumber = messageObject.params.callFrames[0].location.lineNumber;
InspectorTest.log("Stopped on line " + actualLineNumber + ", expected " + expectedLineNumber + ", requested " + lineNumber + ", (0-based numbers).");
Protocol.Debugger.oncePaused(handleDebuggerPausedUnexpected);
Protocol.Runtime.evaluate({ "expression": "statementsExample.step" }).then(callbackStepEvaluate);
}
function callbackStepEvaluate(response)
{
var resultValue = response.result.result.value;
InspectorTest.log("Control parameter 'step' calculation result: " + resultValue + ", expected: " + expectedResult);
InspectorTest.log(resultValue === expectedResult ? "SUCCESS" : "FAIL");
Protocol.Debugger.resume();
next();
}
function handleDebuggerPausedUnexpected(messageObject)
{
InspectorTest.log("Unexpected debugger pause");
InspectorTest.completeTest();
}
}