v8/test/inspector/debugger/wasm-stepping-out-from-js.js
Benedikt Meurer cad99884fb [inspector][wasm] Stop relying on //# sourceURL annotation.
These tests unnecessarily rely on the `//# sourceURL` annotation. This
is preparatory work to eventually move the treatment of `sourceURL` to
the DevTools front-end.

Bug: chromium:1183990
Change-Id: I934eb1580f503b7b9f8d97c250b7c798bc67e268
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2814568
Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
Commit-Queue: Yang Guo <yangguo@chromium.org>
Auto-Submit: Benedikt Meurer <bmeurer@chromium.org>
Reviewed-by: Yang Guo <yangguo@chromium.org>
Cr-Commit-Position: refs/heads/master@{#73878}
2021-04-09 09:43:53 +00:00

63 lines
2.3 KiB
JavaScript

// Copyright 2020 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
utils.load('test/inspector/wasm-inspector-test.js');
let {session, contextGroup, Protocol} =
InspectorTest.start('Tests stepping out from javascript to a wasm caller');
session.setupScriptMap();
let builder = new WasmModuleBuilder();
let pause = builder.addImport('imp', 'pause', kSig_v_v);
let func = builder.addFunction('wasm_main', kSig_v_v)
.addBody([kExprCallFunction, pause])
.exportAs('main');
let module_bytes = builder.toArray();
Protocol.Debugger.onPaused(async message => {
InspectorTest.log('Paused at:');
var frames = message.params.callFrames;
await session.logSourceLocation(frames[0].location);
await Protocol.Debugger.stepOut();
});
contextGroup.addScript(`
let pause = true;
function pauseAlternating() {
if (pause) debugger;
pause = !pause;
}
`);
InspectorTest.runAsyncTestSuite([
async function test() {
await Protocol.Runtime.enable();
await Protocol.Debugger.enable();
InspectorTest.log('Instantiating.');
const instantiate_code =
`const instance = (${WasmInspectorTest.instantiateFromBuffer})(${
JSON.stringify(module_bytes)}, {imp: {pause: pauseAlternating}});`;
WasmInspectorTest.evalWithUrl(instantiate_code, 'instantiate');
const [, {params: wasmScript}] = await Protocol.Debugger.onceScriptParsed(2);
const scriptId = wasmScript.scriptId;
InspectorTest.log('Running exports.main.');
InspectorTest.log('>>> First round');
await Protocol.Runtime.evaluate({expression: 'instance.exports.main()'});
InspectorTest.log('exports.main returned.');
InspectorTest.log('After stepping out of the last script, we should stop right at the beginning of the next script.');
InspectorTest.log('>>> Second round');
await Protocol.Runtime.evaluate({expression: 'instance.exports.main()'});
InspectorTest.log('exports.main returned.');
InspectorTest.log('The next cycle should work as before (stopping at the "debugger" statement), after stopping at script entry.');
InspectorTest.log('>>> Third round');
await Protocol.Runtime.evaluate({expression: 'instance.exports.main()'});
InspectorTest.log('exports.main returned.');
}
]);