tor-browser

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

promise-basics.js (3226B)


      1 // |reftest| skip-if(!xulRuntime.shell) -- needs drainJobQueue
      2 
      3 let results = [];
      4 
      5 new Promise(res=>res('result'))
      6  .then(val=>{results.push('then ' + val); return 'first then rval';})
      7  .then(val=>results.push('chained then with val: ' + val));
      8 
      9 new Promise((res, rej)=>rej('rejection'))
     10  .catch(val=>{results.push('catch ' + val); return results.length;})
     11  .then(val=>results.push('then after catch with val: ' + val),
     12        val=>{throw new Error("mustn't be called")});
     13 
     14 new Promise((res, rej)=> {res('result');  rej('rejection'); })
     15  .catch(val=>{throw new Error("mustn't be called");})
     16  .then(val=>results.push('then after resolve+reject with val: ' + val),
     17        val=>{throw new Error("mustn't be called")});
     18 
     19 new Promise((res, rej)=> { rej('rejection'); res('result'); })
     20  .catch(val=>{results.push('catch after reject+resolve with val: ' + val);})
     21 
     22 
     23 drainJobQueue();
     24 
     25 assertEq(results.length, 6);
     26 assertEq(results[0], 'then result');
     27 assertEq(results[1], 'catch rejection');
     28 assertEq(results[2], 'catch after reject+resolve with val: rejection');
     29 assertEq(results[3], 'chained then with val: first then rval');
     30 assertEq(results[4], 'then after catch with val: 2');
     31 assertEq(results[5], 'then after resolve+reject with val: result');
     32 
     33 results = [];
     34 
     35 Promise.resolve('resolution').then(res=>results.push(res),
     36                                   rej=>{ throw new Error("mustn't be called"); });
     37 
     38 let thenCalled = false;
     39 Promise.reject('rejection').then(_=>{thenCalled = true},
     40                                 rej=>results.push(rej));
     41 
     42 drainJobQueue();
     43 
     44 assertEq(thenCalled, false);
     45 assertEq(results.length, 2);
     46 assertEq(results[0], 'resolution');
     47 assertEq(results[1], 'rejection');
     48 
     49 
     50 function callback() {}
     51 
     52 // Calling the executor function with content functions shouldn't assert:
     53 Promise.resolve.call(function(exec) { exec(callback, callback); });
     54 Promise.reject.call(function(exec) { exec(callback, callback); });
     55 Promise.all.call(function(exec) { exec(callback, callback); });
     56 Promise.race.call(function(exec) { exec(callback, callback); });
     57 
     58 let resolveResult = undefined;
     59 function resolveFun() {resolveResult = "resolveCalled";}
     60 Promise.resolve.call(function(exec) { exec(resolveFun, callback); });
     61 assertEq(resolveResult, "resolveCalled");
     62 
     63 let rejectResult = undefined;
     64 function rejectFun() {rejectResult = "rejectCalled";}
     65 Promise.reject.call(function(exec) { exec(callback, rejectFun); });
     66 assertEq(rejectResult, "rejectCalled");
     67 
     68 // These should throw:
     69 var wasCalled = false;
     70 var hasThrown = false;
     71 try {
     72    // Calling the executor function twice, providing a resolve callback both times.
     73    Promise.resolve.call(function(executor) {
     74        wasCalled = true;
     75        executor(callback, undefined);
     76        executor(callback, callback);
     77    });
     78 } catch (e) {
     79    hasThrown = true;
     80 }
     81 assertEq(wasCalled, true);
     82 assertEq(hasThrown, true);
     83 
     84 var hasThrown = false;
     85 try {
     86    // Calling the executor function twice, providing a reject callback both times.
     87    Promise.resolve.call(function(executor) {
     88        executor(undefined, callback);
     89        executor(callback, callback);
     90    });
     91 } catch (e) {
     92    hasThrown = true;
     93 }
     94 assertEq(hasThrown, true);
     95 
     96 this.reportCompare && reportCompare(0, 0, "ok");