summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/debug/wasm-step.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--js/src/jit-test/tests/debug/wasm-step.js65
1 files changed, 65 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/debug/wasm-step.js b/js/src/jit-test/tests/debug/wasm-step.js
new file mode 100644
index 0000000000..a7509facc7
--- /dev/null
+++ b/js/src/jit-test/tests/debug/wasm-step.js
@@ -0,0 +1,65 @@
+// |jit-test| test-also=--wasm-compiler=optimizing; skip-if: !wasmDebuggingEnabled()
+
+// Tests that wasm module scripts raises onEnterFrame and onLeaveFrame events.
+
+load(libdir + "wasm.js");
+
+// Checking if we stop at every wasm instruction during step.
+var onEnterFrameCalled, onLeaveFrameCalled, onStepCalled;
+wasmRunWithDebugger(
+ '(module (func (nop) (nop)) (export "test" (func 0)))',
+ undefined,
+ function ({dbg}) {
+ onEnterFrameCalled = 0;
+ onLeaveFrameCalled = 0;
+ onStepCalled = [];
+ dbg.onEnterFrame = function (frame) {
+ if (frame.type != 'wasmcall') return;
+ onEnterFrameCalled++;
+ frame.onStep = function () {
+ onStepCalled.push(frame.offset);
+ };
+ frame.onPop = function () {
+ onLeaveFrameCalled++;
+ };
+ };
+ },
+ function ({error}) {
+ assertEq(error, undefined);
+ assertEq(onEnterFrameCalled, 1);
+ assertEq(onLeaveFrameCalled, 1);
+ assertEq(onStepCalled.length, 3);
+ assertEq(onStepCalled[0] > 0, true);
+ // The onStepCalled offsets are in ascending order.
+ assertEq(onStepCalled[0] < onStepCalled[1], true);
+ assertEq(onStepCalled[1] < onStepCalled[2], true);
+ }
+);
+
+// Checking if step mode was disabled after debugger has been detached.
+wasmRunWithDebugger(
+ '(module (func (nop) (nop)) (export "test" (func 0)))',
+ undefined,
+ function ({dbg, g}) {
+ onEnterFrameCalled = 0;
+ onLeaveFrameCalled = 0;
+ onStepCalled = [];
+ dbg.onEnterFrame = function (frame) {
+ if (frame.type != 'wasmcall') return;
+ onEnterFrameCalled++;
+ frame.onStep = function () {
+ onStepCalled.push(frame.offset);
+ };
+ frame.onPop = function () {
+ onLeaveFrameCalled++;
+ };
+ dbg.removeDebuggee(g);
+ };
+ },
+ function ({error}) {
+ assertEq(error, undefined);
+ assertEq(onEnterFrameCalled, 1);
+ assertEq(onLeaveFrameCalled, 0);
+ assertEq(onStepCalled.length, 0);
+ }
+);