Code coverage report for promise/lib/es6-extensions.js

Statements: 86.67% (65 / 75)      Branches: 87.18% (34 / 39)      Functions: 71.43% (10 / 14)      Lines: 92.31% (60 / 65)      Ignored: none     

All files » promise/lib/ » es6-extensions.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109        1 1   1       1 1 1 1 1 1   1 407 407 407 407   1 460   444 444 441 441 441 441   441 433 433 429 36     4 4       401     1 7   7 7 6 1 29 28 12     12 3 3 1   3   16 16 2 2 1   2       15 15 3     6 18         1 393 393       1                   1      
'use strict';
 
//This file contains the ES6 extensions to the core Promises/A+ API
 
var Promise = require('./core.js');
var asap = require('asap/raw');
 
module.exports = Promise;
 
/* Static Functions */
 
var TRUE = valuePromise(true);
var FALSE = valuePromise(false);
var NULL = valuePromise(null);
var UNDEFINED = valuePromise(undefined);
var ZERO = valuePromise(0);
var EMPTYSTRING = valuePromise('');
 
function valuePromise(value) {
  var p = new Promise(Promise._72);
  p._14 = 1;
  p._34 = value;
  return p;
}
Promise.resolve = function (value) {
  if (value instanceof Promise) return value;
 
  Iif (value === null) return NULL;
  if (value === undefined) return UNDEFINED;
  Iif (value === true) return TRUE;
  Iif (value === false) return FALSE;
  Iif (value === 0) return ZERO;
  Iif (value === '') return EMPTYSTRING;
 
  if (typeof value === 'object' || typeof value === 'function') {
    try {
      var then = value.then;
      if (typeof then === 'function') {
        return new Promise(then.bind(value));
      }
    } catch (ex) {
      return new Promise(function (resolve, reject) {
        reject(ex);
      });
    }
  }
  return valuePromise(value);
};
 
Promise.all = function (arr) {
  var args = Array.prototype.slice.call(arr);
 
  return new Promise(function (resolve, reject) {
    if (args.length === 0) return resolve([]);
    var remaining = args.length;
    function res(i, val) {
      if (val && (typeof val === 'object' || typeof val === 'function')) {
        if (val instanceof Promise && val.then === Promise.prototype.then) {
          while (val._14 === 3) {
            val = val._34;
          }
          if (val._14 === 1) return res(i, val._34);
          if (val._14 === 2) reject(val._34);
          val.then(function (val) {
            res(i, val);
          }, reject);
          return;
        } else {
          var then = val.then;
          if (typeof then === 'function') {
            var p = new Promise(then.bind(val));
            p.then(function (val) {
              res(i, val);
            }, reject);
            return;
          }
        }
      }
      args[i] = val;
      if (--remaining === 0) {
        resolve(args);
      }
    }
    for (var i = 0; i < args.length; i++) {
      res(i, args[i]);
    }
  });
};
 
Promise.reject = function (value) {
  return new Promise(function (resolve, reject) {
    reject(value);
  });
};
 
Promise.race = function (values) {
  return new Promise(function (resolve, reject) {
    values.forEach(function(value){
      Promise.resolve(value).then(resolve, reject);
    });
  });
};
 
/* Prototype Methods */
 
Promise.prototype['catch'] = function (onRejected) {
  return this.then(null, onRejected);
};