summaryrefslogtreecommitdiff
path: root/deps/v8/test/inspector/debugger/wasm-side-effect-free-debug-evaluate.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/inspector/debugger/wasm-side-effect-free-debug-evaluate.js')
-rw-r--r--deps/v8/test/inspector/debugger/wasm-side-effect-free-debug-evaluate.js72
1 files changed, 72 insertions, 0 deletions
diff --git a/deps/v8/test/inspector/debugger/wasm-side-effect-free-debug-evaluate.js b/deps/v8/test/inspector/debugger/wasm-side-effect-free-debug-evaluate.js
new file mode 100644
index 0000000000..37aca4701c
--- /dev/null
+++ b/deps/v8/test/inspector/debugger/wasm-side-effect-free-debug-evaluate.js
@@ -0,0 +1,72 @@
+// Copyright 2021 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('Test side-effect-free evaluation of WebAssembly APIs');
+
+contextGroup.addScript(`
+var EMPTY_WASM_MODULE_BYTES = new Uint8Array([0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00]);
+var someGlobalGlobal = new WebAssembly.Global({value: "i64"}, 42n);
+var someGlobalMemory = new WebAssembly.Memory({initial: 1});
+var someGlobalModule = new WebAssembly.Module(EMPTY_WASM_MODULE_BYTES);
+var someGlobalInstance = new WebAssembly.Instance(someGlobalModule);
+var someGlobalTable = new WebAssembly.Table({element: 'anyfunc', initial: 1});
+someGlobalTable.set(0, x => x);
+`, 0, 0, 'foo.js');
+
+async function check(expression) {
+ const {result:{exceptionDetails}} = await Protocol.Runtime.evaluate({expression, throwOnSideEffect: true});
+ InspectorTest.log(`${expression}: ${exceptionDetails ? 'throws' : 'ok'}`);
+}
+
+InspectorTest.runAsyncTestSuite([
+ async function testWebAssemblyGlobal() {
+ await Protocol.Runtime.enable();
+ await check('someGlobalGlobal.value');
+ await check('someGlobalGlobal.valueOf()');
+ await check('new WebAssembly.Global({value: "f32", mutable: true}, 3.14)');
+ await check('new WebAssembly.Global({value: "f32", mutable: false}, 3.14)');
+ await check('new WebAssembly.Global({value: "f32", mutable: true}, 3.14).value');
+ await check('new WebAssembly.Global({value: "f32", mutable: true}, 3.14).valueOf()');
+ await Protocol.Runtime.disable();
+ },
+
+ async function testWebAssemblyInstance() {
+ await Protocol.Runtime.enable();
+ await check('someGlobalInstance.exports');
+ await check('new WebAssembly.Instance(someGlobalModule)');
+ await check('new WebAssembly.Instance(someGlobalModule).exports');
+ await Protocol.Runtime.disable();
+ },
+
+ async function testWebAssemblyMemory() {
+ await Protocol.Runtime.enable();
+ await check('someGlobalMemory.buffer');
+ await check('new WebAssembly.Memory({initial: 1})');
+ await check('new WebAssembly.Memory({initial: 1}).buffer');
+ await Protocol.Runtime.disable();
+ },
+
+ async function testWebAssemblyModule() {
+ await Protocol.Runtime.enable();
+ await check('WebAssembly.Module.customSections(someGlobalModule, ".debug_info")');
+ await check('WebAssembly.Module.exports(someGlobalModule)');
+ await check('WebAssembly.Module.imports(someGlobalModule)');
+ await check('new WebAssembly.Module(EMPTY_WASM_MODULE_BYTES)');
+ await check('WebAssembly.Module.customSections(new WebAssembly.Module(EMPTY_WASM_MODULE_BYTES), ".debug_info")');
+ await check('WebAssembly.Module.exports(new WebAssembly.Module(EMPTY_WASM_MODULE_BYTES))');
+ await check('WebAssembly.Module.imports(new WebAssembly.Module(EMPTY_WASM_MODULE_BYTES))');
+ await Protocol.Runtime.disable();
+ },
+
+ async function testWebAssemblyTable() {
+ await Protocol.Runtime.enable();
+ await check('someGlobalTable.get(0)');
+ await check('new WebAssembly.Table({element: "anyfunc", initial: 1})');
+ await check('new WebAssembly.Table({element: "anyfunc", initial: 1}).get(0)');
+ await Protocol.Runtime.disable();
+ }
+]);