Skip to content

Commit 5766063

Browse files
committed
refactor(empower): integrate decorateOneArg and decorateTwoArgs into decorateArgs function
1 parent 5e1b360 commit 5766063

File tree

1 file changed

+25
-50
lines changed

1 file changed

+25
-50
lines changed

lib/enhance.js

+25-50
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
'use strict';
22

33
var escallmatch = require('escallmatch'),
4+
slice = Array.prototype.slice,
45
isPhantom = typeof window !== 'undefined' && typeof window.callPhantom === 'function';
56

67

@@ -44,7 +45,8 @@ function enhance (target, formatter, config) {
4445
throw f;
4546
}
4647
},
47-
enhancement = (typeof target === 'function') ? decorateOneArg(target, target, doPowerAssert) : {},
48+
// check function signiture
49+
enhancement = (typeof target === 'function') ? decorateArgs(1, target, target, doPowerAssert) : {},
4850
events = [];
4951

5052
function buildPowerAssertText (message, context) {
@@ -78,10 +80,10 @@ function enhance (target, formatter, config) {
7880
if (methodName && typeof target[methodName] === 'function') {
7981
switch (len) {
8082
case 1:
81-
enhancement[methodName] = decorateOneArg(target, target[methodName], doPowerAssert);
83+
enhancement[methodName] = decorateArgs(len, target, target[methodName], doPowerAssert);
8284
break;
8385
case 2:
84-
enhancement[methodName] = decorateTwoArgs(target, target[methodName], doPowerAssert);
86+
enhancement[methodName] = decorateArgs(len, target, target[methodName], doPowerAssert);
8587
break;
8688
default:
8789
throw new Error('not supported');
@@ -108,65 +110,38 @@ function isEspoweredValue (value) {
108110
}
109111

110112

111-
function decorateOneArg (target, baseAssert, doPowerAssert) {
112-
return function (arg1, message) {
113-
var context, val1;
114-
if (! isEspoweredValue(arg1)) {
115-
return baseAssert.apply(target, [arg1, message]);
116-
}
117-
val1 = arg1.powerAssertContext.value;
118-
context = {
119-
source: arg1.source,
120-
args: []
121-
};
122-
context.args.push({
123-
value: val1,
124-
events: arg1.powerAssertContext.events
125-
});
126-
return doPowerAssert(baseAssert, [val1], message, context);
127-
};
128-
}
113+
function decorateArgs (numNonMessageArgs, target, baseAssert, doPowerAssert) {
114+
return function () {
115+
var context, message, args = slice.apply(arguments);
129116

130-
131-
function decorateTwoArgs (target, baseAssert, doPowerAssert) {
132-
return function (arg1, arg2, message) {
133-
var context, val1, val2;
134-
if (!(isEspoweredValue(arg1) || isEspoweredValue(arg2))) {
135-
return baseAssert.apply(target, [arg1, arg2, message]);
117+
if (args.every(function (arg) { return !isEspoweredValue(arg); })) {
118+
return baseAssert.apply(target, args);
136119
}
137120

138-
if (isEspoweredValue(arg1)) {
139-
context = {
140-
source: arg1.source,
141-
args: []
142-
};
143-
context.args.push({
144-
value: arg1.powerAssertContext.value,
145-
events: arg1.powerAssertContext.events
146-
});
147-
val1 = arg1.powerAssertContext.value;
148-
} else {
149-
val1 = arg1;
150-
}
151-
152-
if (isEspoweredValue(arg2)) {
153-
if (!isEspoweredValue(arg1)) {
121+
var values = args.slice(0, numNonMessageArgs).map(function (arg, idx) {
122+
if (!isEspoweredValue(arg)) {
123+
return arg;
124+
}
125+
if (!context) {
154126
context = {
155-
source: arg2.source,
127+
source: arg.source,
156128
args: []
157129
};
158130
}
159131
context.args.push({
160-
value: arg2.powerAssertContext.value,
161-
events: arg2.powerAssertContext.events
132+
value: arg.powerAssertContext.value,
133+
events: arg.powerAssertContext.events
162134
});
163-
val2 = arg2.powerAssertContext.value;
164-
} else {
165-
val2 = arg2;
135+
return arg.powerAssertContext.value;
136+
});
137+
138+
if (numNonMessageArgs === (args.length - 1)) {
139+
message = args[args.length - 1];
166140
}
167141

168-
return doPowerAssert(baseAssert, [val1, val2], message, context);
142+
return doPowerAssert(baseAssert, values, message, context);
169143
};
170144
}
171145

146+
172147
module.exports = enhance;

0 commit comments

Comments
 (0)