tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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");