summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/debug/Frame-onStep-14.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/debug/Frame-onStep-14.js')
-rw-r--r--js/src/jit-test/tests/debug/Frame-onStep-14.js46
1 files changed, 46 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/debug/Frame-onStep-14.js b/js/src/jit-test/tests/debug/Frame-onStep-14.js
new file mode 100644
index 0000000000..a7139adb09
--- /dev/null
+++ b/js/src/jit-test/tests/debug/Frame-onStep-14.js
@@ -0,0 +1,46 @@
+// Test how stepping interacts with switch statements.
+
+var g = newGlobal({newCompartment: true});
+
+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);