tor-browser

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

compile.any.js (2344B)


      1 // META: global=window,dedicatedworker,jsshell,shadowrealm
      2 // META: script=/wasm/jsapi/wasm-module-builder.js
      3 
      4 function assert_Module(module) {
      5  assert_equals(Object.getPrototypeOf(module), WebAssembly.Module.prototype,
      6                "Prototype");
      7  assert_true(Object.isExtensible(module), "Extensibility");
      8 }
      9 
     10 let emptyModuleBinary;
     11 setup(() => {
     12  emptyModuleBinary = new WasmModuleBuilder().toBuffer();
     13 });
     14 
     15 promise_test(t => {
     16  return promise_rejects_js(t, TypeError, WebAssembly.compile());
     17 }, "Missing argument");
     18 
     19 promise_test(t => {
     20  const invalidArguments = [
     21    undefined,
     22    null,
     23    true,
     24    "",
     25    Symbol(),
     26    1,
     27    {},
     28    ArrayBuffer,
     29    ArrayBuffer.prototype,
     30    Array.from(emptyModuleBinary),
     31  ];
     32  return Promise.all(invalidArguments.map(argument => {
     33    return promise_rejects_js(t, TypeError, WebAssembly.compile(argument),
     34                           `compile(${format_value(argument)})`);
     35  }));
     36 }, "Invalid arguments");
     37 
     38 promise_test(() => {
     39  const fn = WebAssembly.compile;
     40  const thisValues = [
     41    undefined,
     42    null,
     43    true,
     44    "",
     45    Symbol(),
     46    1,
     47    {},
     48    WebAssembly,
     49  ];
     50  return Promise.all(thisValues.map(thisValue => {
     51    return fn.call(thisValue, emptyModuleBinary).then(assert_Module);
     52  }));
     53 }, "Branding");
     54 
     55 test(() => {
     56  const promise = WebAssembly.compile(emptyModuleBinary);
     57  assert_equals(Object.getPrototypeOf(promise), Promise.prototype, "prototype");
     58  assert_true(Object.isExtensible(promise), "extensibility");
     59 }, "Promise type");
     60 
     61 promise_test(t => {
     62  const buffer = new Uint8Array();
     63  return promise_rejects_js(t, WebAssembly.CompileError, WebAssembly.compile(buffer));
     64 }, "Empty buffer");
     65 
     66 promise_test(t => {
     67  const buffer = new Uint8Array(Array.from(emptyModuleBinary).concat([0, 0]));
     68  return promise_rejects_js(t, WebAssembly.CompileError, WebAssembly.compile(buffer));
     69 }, "Invalid code");
     70 
     71 promise_test(() => {
     72  return WebAssembly.compile(emptyModuleBinary).then(assert_Module);
     73 }, "Result type");
     74 
     75 promise_test(() => {
     76  return WebAssembly.compile(emptyModuleBinary, {}).then(assert_Module);
     77 }, "Stray argument");
     78 
     79 promise_test(() => {
     80  const buffer = new WasmModuleBuilder().toBuffer();
     81  assert_equals(buffer[0], 0);
     82  const promise = WebAssembly.compile(buffer);
     83  buffer[0] = 1;
     84  return promise.then(assert_Module);
     85 }, "Changing the buffer");