tor-browser

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

exports.any.js (1892B)


      1 // META: global=window,dedicatedworker,jsshell,shadowrealm
      2 // META: script=/wasm/jsapi/wasm-module-builder.js
      3 
      4 let emptyModuleBinary;
      5 setup(() => {
      6  emptyModuleBinary = new WasmModuleBuilder().toBuffer();
      7 });
      8 
      9 test(() => {
     10  const thisValues = [
     11    undefined,
     12    null,
     13    true,
     14    "",
     15    Symbol(),
     16    1,
     17    {},
     18    WebAssembly.Instance,
     19    WebAssembly.Instance.prototype,
     20  ];
     21 
     22  const desc = Object.getOwnPropertyDescriptor(WebAssembly.Instance.prototype, "exports");
     23  assert_equals(typeof desc, "object");
     24 
     25  const getter = desc.get;
     26  assert_equals(typeof getter, "function");
     27 
     28  assert_equals(typeof desc.set, "undefined");
     29 
     30  for (const thisValue of thisValues) {
     31    assert_throws_js(TypeError, () => getter.call(thisValue), `this=${format_value(thisValue)}`);
     32  }
     33 }, "Branding");
     34 
     35 test(() => {
     36  const module = new WebAssembly.Module(emptyModuleBinary);
     37  const instance = new WebAssembly.Instance(module);
     38  const exports = instance.exports;
     39 
     40  const desc = Object.getOwnPropertyDescriptor(WebAssembly.Instance.prototype, "exports");
     41  assert_equals(typeof desc, "object");
     42 
     43  const getter = desc.get;
     44  assert_equals(typeof getter, "function");
     45 
     46  assert_equals(getter.call(instance, {}), exports);
     47 }, "Stray argument");
     48 
     49 test(() => {
     50  const module = new WebAssembly.Module(emptyModuleBinary);
     51  const instance = new WebAssembly.Instance(module);
     52  const exports = instance.exports;
     53  instance.exports = {};
     54  assert_equals(instance.exports, exports, "Should not change the exports");
     55 }, "Setting (sloppy mode)");
     56 
     57 test(() => {
     58  const module = new WebAssembly.Module(emptyModuleBinary);
     59  const instance = new WebAssembly.Instance(module);
     60  const exports = instance.exports;
     61  assert_throws_js(TypeError, () => {
     62    "use strict";
     63    instance.exports = {};
     64  });
     65  assert_equals(instance.exports, exports, "Should not change the exports");
     66 }, "Setting (strict mode)");