tor-browser

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

properties.any.js (1440B)


      1 // META: global=window,worker,shadowrealm
      2 'use strict';
      3 
      4 const sinkMethods = {
      5  start: {
      6    length: 1,
      7    trigger: () => Promise.resolve()
      8  },
      9  write: {
     10    length: 2,
     11    trigger: writer => writer.write()
     12  },
     13  close: {
     14    length: 0,
     15    trigger: writer => writer.close()
     16  },
     17  abort: {
     18    length: 1,
     19    trigger: writer => writer.abort()
     20  }
     21 };
     22 
     23 for (const method in sinkMethods) {
     24  const { length, trigger } = sinkMethods[method];
     25 
     26  // Some semantic tests of how sink methods are called can be found in general.js, as well as in the test files
     27  // specific to each method.
     28  promise_test(() => {
     29    let argCount;
     30    const ws = new WritableStream({
     31      [method](...args) {
     32        argCount = args.length;
     33      }
     34    });
     35    return Promise.resolve(trigger(ws.getWriter())).then(() => {
     36      assert_equals(argCount, length, `${method} should be called with ${length} arguments`);
     37    });
     38  }, `sink method ${method} should be called with the right number of arguments`);
     39 
     40  promise_test(() => {
     41    let methodWasCalled = false;
     42    function Sink() {}
     43    Sink.prototype = {
     44      [method]() {
     45        methodWasCalled = true;
     46      }
     47    };
     48    const ws = new WritableStream(new Sink());
     49    return Promise.resolve(trigger(ws.getWriter())).then(() => {
     50      assert_true(methodWasCalled, `${method} should be called`);
     51    });
     52  }, `sink method ${method} should be called even when it's located on the prototype chain`);
     53 }