tor-browser

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

promise-subclassing.js (1650B)


      1 // |reftest| skip-if(!xulRuntime.shell) -- needs drainJobQueue
      2 
      3 let results = [];
      4 
      5 class SubPromise extends Promise {
      6  constructor(executor) {
      7    results.push('SubPromise ctor called');
      8    super(executor);
      9  }
     10  then(res, rej) {
     11    results.push('SubPromise#then called');
     12    return intermediatePromise = super.then(res, rej);
     13  }
     14 }
     15 
     16 let subPromise = new SubPromise(function(res, rej) {
     17  results.push('SubPromise ctor called executor');
     18  res('result');
     19 });
     20 
     21 let intermediatePromise;
     22 let allSubPromise = SubPromise.all([subPromise]);
     23 
     24 assertEq(subPromise instanceof SubPromise, true);
     25 assertEq(allSubPromise instanceof SubPromise, true);
     26 assertEq(intermediatePromise instanceof SubPromise, true);
     27 
     28 expected = [
     29 'SubPromise ctor called',
     30 'SubPromise ctor called executor',
     31 'SubPromise ctor called',
     32 'SubPromise#then called',
     33 'SubPromise ctor called',
     34 ];
     35 
     36 assertEq(results.length, expected.length);
     37 expected.forEach((expected,i) => assertEq(results[i], expected));
     38 
     39 subPromise.then(val=>results.push('subPromise.then with val ' + val));
     40 allSubPromise.then(val=>results.push('allSubPromise.then with val ' + val));
     41 
     42 expected.forEach((expected,i) => assertEq(results[i], expected));
     43 expected = expected.concat([
     44 'SubPromise#then called',
     45 'SubPromise ctor called',
     46 'SubPromise#then called',
     47 'SubPromise ctor called',
     48 ]);
     49 
     50 assertEq(results.length, expected.length);
     51 expected.forEach((expected,i) => assertEq(results[i], expected));
     52 
     53 drainJobQueue();
     54 
     55 expected = expected.concat([
     56 'subPromise.then with val result',
     57 'allSubPromise.then with val result',
     58 ]);
     59 
     60 assertEq(results.length, expected.length);
     61 
     62 this.reportCompare && reportCompare(0, 0, "ok");