blob: 273b9e618904ee19118d6e918a82ab82c632b82e [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="../../../http/tests/inspector/resources/inspector-test.js"></script>
<script src="../resources/log-pause-location.js"></script>
<script>
function a() {
return 1;
}
function entryDebuggerStatement() {
debugger;
debugger;
debugger;
}
function entryBlockStatement() {
debugger;
{
let x = 1;
}
}
function entryWithStatement() {
let o = {x:1, y:2};
debugger;
with (o)
a();
with (o) {
a();
}
}
function entryLabeledStatement() {
let arr = [];
debugger;
label:
{
arr.push(1);
break label;
arr.push(2);
}
}
function entryLabelBreakLoop() {
debugger;
outer:
for (let i = 0; ; ++i) {
for (let j = 0; j < 2; ++j) {
if (i === 1 && j === 0)
break outer;
a();
}
}
}
function entryVariableDeclaration() {
debugger;
var a = 1,
x = 1;
let b = 2,
y = 2;
const c = 3,
z = 3;
}
function entryDestructuring() {
var o = {x:1, y:2};
var arr = [1, 2];
debugger;
var {x, y} = o;
var [w, z] = arr;
}
function entryIfWithDotExpression() {
var o = {condition: true};
debugger;
if (o.condition)
a();
}
function entryIfWithBracketExpression() {
var o = {condition: true};
debugger;
if (o["condition"])
a();
}
function entryIfWithTaggedTemplate() {
debugger;
if (String.raw`test`)
a();
}
// FIXME: Not Yet Tested
// - Iterators
// - Spread (...)
// - Generators (function*, yield)
// - Import / Export statements
// ---------
function test()
{
let suite = InspectorTest.createAsyncSuite("Debugger.stepping.misc");
window.initializeSteppingTestSuite(suite);
addSteppingTestCase({
name: "Debugger.stepping.DebuggerStatement",
description: "Should be able to step through debugger statements.",
expression: "setTimeout(entryDebuggerStatement)",
steps: [
"over",
"in", // debugger
"over", // debugger
"resume",
]
});
addSteppingTestCase({
name: "Debugger.stepping.BlockStatement",
description: "Should be able to step through debugger statements.",
expression: "setTimeout(entryBlockStatement)",
steps: [
"over",
"over", // let x = 1
"resume",
]
});
addSteppingTestCase({
name: "Debugger.stepping.WithStatement",
description: "Should be able to step through with statements.",
expression: "setTimeout(entryWithStatement)",
steps: [
"over",
"over", // with (o)
"over", // a()
"over", // with (o)
"over", // a()
"resume",
]
});
addSteppingTestCase({
name: "Debugger.stepping.LabeledStatement",
description: "Should be able to step through label statements.",
expression: "setTimeout(entryLabeledStatement)",
steps: [
"over",
"over", // arr.push(1)
"over", // break outer
"resume",
]
});
addSteppingTestCase({
name: "Debugger.stepping.LabelBreakLoop",
description: "Should be able to step through loops with break label.",
expression: "setTimeout(entryLabelBreakLoop)",
steps: [
"over",
"in", // let i = 0 - before inner for
"in", // let j = 0 - before condition
"in", // (j < 2) [j=0] - before if
"over", // if [false] - before a()
"over", // a();
"over", // ++j
"over", // (j < 2) [j=1] - before if
"over", // if [false] - before a()
"over", // a();
"over", // ++j
"over", // (j < 2) [j=2] - before ++i
"in", // ++i - before let j = 0
"in", // j = 0 - before condition
"in", // (j < 2) - before if
"in", // if [true] - before break
"in", // break - leaving entry
"resume",
]
});
addSteppingTestCase({
name: "Debugger.stepping.VariableDeclaration",
description: "Should be able to step through variable declarations.",
expression: "setTimeout(entryVariableDeclaration)",
steps: [
"over",
// FIXME: Opportunity to pause at assignment expressions.
"in", // a = 1, x = 1
"in", // b = 2, y = 2
"in", // c = 3, z = 3
"resume",
]
});
addSteppingTestCase({
name: "Debugger.stepping.Destructuring",
description: "Should be able to step through destructuring assignment.",
expression: "setTimeout(entryDestructuring)",
steps: [
"over",
"in", // var {x, y} = o;
"in", // var [w, z] = arr
"resume",
]
});
addSteppingTestCase({
name: "Debugger.stepping.IfWithDotExpression",
description: "Should step to the entire expression, not the dot.",
expression: "setTimeout(entryIfWithDotExpression)",
steps: [
"over",
"in", // o.condition
"over", // a
"resume",
]
});
addSteppingTestCase({
name: "Debugger.stepping.IfWithBracketExpression",
description: "Should step to the entire expression, not the bracket dot.",
expression: "setTimeout(entryIfWithBracketExpression)",
steps: [
"over",
"in", // o["condition"]
"over", // a
"resume",
]
});
addSteppingTestCase({
name: "Debugger.stepping.IfWithTaggedTemplate",
description: "Should step to the entire expression, not the template.",
expression: "setTimeout(entryIfWithTaggedTemplate)",
steps: [
"over",
"in", // String.raw`test`
"over", // a
"resume",
]
});
loadMainPageContent().then(() => {
suite.runTestCasesAndFinish();
});
}
</script>
</head>
<body onload="runTest()">
<p>Checking pause locations when stepping in, out, and over misc statements.</p>
</body>
</html>