// Test how stepping interacts with switch statements. var g = newGlobal(); g.eval('function bob() { return "bob"; }'); // Stepping into a sparse switch should not stop on literal cases. evaluate(`function lit(x) { // 1 debugger; // 2 switch(x) { // 3 case "nope": // 4 break; // 5 case "bob": // 6 break; // 7 } // 8 }`, {lineNumber: 1, global: g}); // Stepping into a sparse switch should stop on non-literal cases. evaluate(`function nonlit(x) { // 1 debugger; // 2 switch(x) { // 3 case bob(): // 4 break; // 5 } // 6 }`, {lineNumber: 1, global: g}); var dbg = Debugger(g); var badStep = false; function test(s, okLine) { dbg.onDebuggerStatement = function(frame) { frame.onStep = function() { let thisLine = this.script.getOffsetLocation(this.offset).lineNumber; // The stop at line 3 is the switch. if (thisLine > 3) { assertEq(thisLine, okLine) frame.onStep = undefined; } }; }; g.eval(s); } test("lit('bob');", 7); test("nonlit('bob');", 4);