Code coverage report for debug\finally.js

Statements: 96.23% (51 / 53)      Branches: 96.43% (27 / 28)      Functions: 84.62% (11 / 13)      Lines: 96.15% (50 / 52)      Ignored: none     

All files » debug\ » finally.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  8 8 8 8 8   8 10   8 6   8 7 5     8         8 36 36 7   29   36     8 98 98   98       92 33 33 27 27         65 6 6   59       8 21 21   21       18 12 12 9 9     9     8 140   128         128           8   110     8 30          
(function () { "use strict";
module.exports = function(Promise, NEXT_FILTER, tryConvertToPromise) {
var util = require("./util.js");
var wrapsPrimitiveReceiver = util.wrapsPrimitiveReceiver;
var isPrimitive = util.isPrimitive;
var thrower = util.thrower;
 
function returnThis() {
    return this;
}
function throwThis() {
    throw this;
}
function return$(r) {
    return function() {
        return r;
    };
}
function throw$(r) {
    return function() {
        throw r;
    };
}
function promisedFinally(ret, reasonOrValue, isFulfilled) {
    var then;
    if (wrapsPrimitiveReceiver && isPrimitive(reasonOrValue)) {
        then = isFulfilled ? return$(reasonOrValue) : throw$(reasonOrValue);
    } else {
        then = isFulfilled ? returnThis : throwThis;
    }
    return ret._then(then, thrower, undefined, reasonOrValue, undefined);
}
 
function finallyHandler(reasonOrValue) {
    var promise = this.promise;
    var handler = this.handler;
 
    var ret = promise._isBound()
                    ? handler.call(promise._boundTo)
                    : handler();
 
    if (ret !== undefined) {
        var maybePromise = tryConvertToPromise(ret, promise);
        if (maybePromise instanceof Promise) {
            maybePromise = maybePromise._target();
            return promisedFinally(maybePromise, reasonOrValue,
                                    promise.isFulfilled());
        }
    }
 
    if (promise.isRejected()) {
        NEXT_FILTER.e = reasonOrValue;
        return NEXT_FILTER;
    } else {
        return reasonOrValue;
    }
}
 
function tapHandler(value) {
    var promise = this.promise;
    var handler = this.handler;
 
    var ret = promise._isBound()
                    ? handler.call(promise._boundTo, value)
                    : handler(value);
 
    if (ret !== undefined) {
        var maybePromise = tryConvertToPromise(ret, promise);
        if (maybePromise instanceof Promise) {
            maybePromise = maybePromise._target();
            return promisedFinally(maybePromise, value, true);
        }
    }
    return value;
}
 
Promise.prototype._passThroughHandler = function (handler, isFinally) {
    if (typeof handler !== "function") return this.then();
 
    var promiseAndHandler = {
        promise: this,
        handler: handler
    };
 
    return this._then(
            isFinally ? finallyHandler : tapHandler,
            isFinally ? finallyHandler : undefined, undefined,
            promiseAndHandler, undefined);
};
 
Promise.prototype.lastly =
Promise.prototype["finally"] = function (handler) {
    return this._passThroughHandler(handler, true);
};
 
Promise.prototype.tap = function (handler) {
    return this._passThroughHandler(handler, false);
};
};
 
}());