blob: 4f71852940b38d736cfae08c4fe90eb489a36578 [file] [log] [blame]
<html>
<head>
<script src="../../http/tests/inspector/resources/protocol-test.js"></script>
<script>
// Put this here instead of on <body onload> to prevent an extra Debugger.scriptParsed event.
window.onload = runTest;
function test()
{
// This test sets a breakpoint on line:column in the <script> below.
// We set a breakpoint before evaluating 'sum += ...', and verify that
// call frame this values are what we expect.
InspectorProtocol.sendCommand("Debugger.enable", {});
InspectorProtocol.sendCommand("Debugger.setBreakpointsActive", {active: true});
InspectorProtocol.eventHandler["Debugger.scriptParsed"] = function(messageObject)
{
if (/call-frame-this-host\.html$/.test(messageObject.params.url) && messageObject.params.startLine > 10) {
ProtocolTest.log("Found <script>");
var scriptIdentifier = messageObject.params.scriptId;
var lineNumber = messageObject.params.startLine + 6;
var columnNumber = 12;
var location = {scriptId: scriptIdentifier, lineNumber: lineNumber, columnNumber: columnNumber};
InspectorProtocol.sendCommand("Debugger.setBreakpoint", {location: location}, function() {
ProtocolTest.log("Running testFunction");
InspectorProtocol.sendCommand("Runtime.evaluate", {expression: "testFunction()"});
});
}
}
InspectorProtocol.eventHandler["Debugger.paused"] = function(messageObject)
{
ProtocolTest.log("Hit Breakpoint!");
var thisValues = [ ];
var i;
for (i = 0; i < 3; i++)
thisValues[i] = messageObject.params.callFrames[i].this;
function assertThisValue(index, actual, expected) {
var success = true;
if (actual.type != expected.type) {
ProtocolTest.log('FAIL: frame[' + index + '] expect type "' + expected.type + '", actual "' + actual.type + '"');
success = false;
}
if (actual.className != expected.className) {
ProtocolTest.log('FAIL: frame[' + index + '] expect className "' + expected.className + '", actual "' + actual.className + '"');
success = false;
}
if (success)
ProtocolTest.log('PASS: frame[' + index + '] type "' + actual.type + '" className "' + actual.className + '"');
}
// frame 0 should be the anonymous inner function.
assertThisValue(0, thisValues[0], {
"type": "object",
"className": "Window"
});
// frame 1 should be "forEach" (an internal/host function).
assertThisValue(1, thisValues[1], {
"type": "object",
"className": "Array"
});
// frame 2 should be "testFunction".
assertThisValue(2, thisValues[2], {
"type": "object",
"className": "Window"
});
ProtocolTest.completeTest();
}
}
</script>
</head>
<body>
<p>Debugger.setBreakpoint on line:column in &lt;script&gt;</p>
<script>// Line 0
function testFunction() { // Line 1
try { // Line 2
var array = [2, 5, 7]; // Line 3
var sum = 0; // Line 4
array.forEach(function(value) { // Line 5
sum += array[value]; // Line 6
});
} catch (e) {
console.log("Exception: " + e);
}
}
</script>
</body>
</html>