namespace-instance.tentative.any.js (2477B)
1 // META: global=window,dedicatedworker,jsshell,shadowrealm 2 3 promise_test(async () => { 4 const wasmNamespace = await import("./resources/mutable-global-export.wasm"); 5 const instance = WebAssembly.namespaceInstance(wasmNamespace); 6 7 const wasmNamespace2 = await import("./resources/mutable-global-export.wasm"); 8 const instance2 = WebAssembly.namespaceInstance(wasmNamespace2); 9 assert_equals(instance, instance2); 10 11 assert_true(instance instanceof WebAssembly.Instance); 12 13 wasmNamespace.setGlobal(999); 14 assert_equals(instance.exports.getGlobal(), 999); 15 16 instance.exports.setGlobal(888); 17 assert_equals(wasmNamespace.getGlobal(), 888); 18 }, "WebAssembly.namespaceInstance() should return the underlying instance with shared state"); 19 20 promise_test(async () => { 21 assert_throws_js(TypeError, () => WebAssembly.namespaceInstance({})); 22 assert_throws_js(TypeError, () => WebAssembly.namespaceInstance(null)); 23 assert_throws_js(TypeError, () => WebAssembly.namespaceInstance(undefined)); 24 assert_throws_js(TypeError, () => WebAssembly.namespaceInstance(42)); 25 assert_throws_js(TypeError, () => 26 WebAssembly.namespaceInstance("not a namespace") 27 ); 28 assert_throws_js(TypeError, () => WebAssembly.namespaceInstance([])); 29 assert_throws_js(TypeError, () => 30 WebAssembly.namespaceInstance(function () {}) 31 ); 32 33 const jsModule = await import("./resources/globals.js"); 34 assert_throws_js(TypeError, () => WebAssembly.namespaceInstance(jsModule)); 35 }, "WebAssembly.namespaceInstance() should throw TypeError for non-WebAssembly namespaces"); 36 37 promise_test(async () => { 38 const exportsModule = await import("./resources/exports.wasm"); 39 const globalsModule = await import("./resources/globals.wasm"); 40 41 const exportsInstance = WebAssembly.namespaceInstance(exportsModule); 42 const globalsInstance = WebAssembly.namespaceInstance(globalsModule); 43 44 assert_not_equals(exportsInstance, globalsInstance); 45 assert_true(exportsInstance.exports.func instanceof Function); 46 assert_true(globalsInstance.exports.getLocalMutI32 instanceof Function); 47 48 globalsModule.setLocalMutI32(12345); 49 assert_equals(globalsInstance.exports.getLocalMutI32(), 12345); 50 51 globalsInstance.exports.setLocalMutI32(54321); 52 assert_equals(globalsModule.getLocalMutI32(), 54321); 53 54 const exportsInstance2 = WebAssembly.namespaceInstance(exportsModule); 55 assert_equals(exportsInstance, exportsInstance2); 56 }, "WebAssembly.namespaceInstance() should work correctly with multiple modules");