123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- 'use strict';
- var some = require('core-js/library/fn/array/some');
- var map = require('core-js/library/fn/array/map');
- function decorate (callSpec, decorator) {
- var numArgsToCapture = callSpec.numArgsToCapture;
- return function decoratedAssert () {
- var context, message, hasMessage = false;
- // see: https://github.com/twada/empower-core/pull/8#issue-127859465
- // see: https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments
- var args = new Array(arguments.length);
- for(var i = 0; i < args.length; ++i) {
- args[i] = arguments[i];
- }
- if (numArgsToCapture === (args.length - 1)) {
- message = args.pop();
- hasMessage = true;
- }
- var invocation = {
- thisObj: this,
- values: args,
- message: message,
- hasMessage: hasMessage
- };
- if (some(args, isCaptured)) {
- invocation.values = map(args.slice(0, numArgsToCapture), function (arg) {
- if (isNotCaptured(arg)) {
- return arg;
- }
- if (!context) {
- context = {
- source: arg.source,
- args: []
- };
- }
- context.args.push({
- value: arg.powerAssertContext.value,
- events: arg.powerAssertContext.events
- });
- return arg.powerAssertContext.value;
- });
- return decorator.concreteAssert(callSpec, invocation, context);
- } else {
- return decorator.concreteAssert(callSpec, invocation);
- }
- };
- }
- function isNotCaptured (value) {
- return !isCaptured(value);
- }
- function isCaptured (value) {
- return (typeof value === 'object') &&
- (value !== null) &&
- (typeof value.powerAssertContext !== 'undefined');
- }
- module.exports = decorate;
|