1
1
'use strict' ;
2
2
3
3
var escallmatch = require ( 'escallmatch' ) ,
4
+ slice = Array . prototype . slice ,
4
5
isPhantom = typeof window !== 'undefined' && typeof window . callPhantom === 'function' ;
5
6
6
7
@@ -44,7 +45,8 @@ function enhance (target, formatter, config) {
44
45
throw f ;
45
46
}
46
47
} ,
47
- enhancement = ( typeof target === 'function' ) ? decorateOneArg ( target , target , doPowerAssert ) : { } ,
48
+ // check function signiture
49
+ enhancement = ( typeof target === 'function' ) ? decorateArgs ( 1 , target , target , doPowerAssert ) : { } ,
48
50
events = [ ] ;
49
51
50
52
function buildPowerAssertText ( message , context ) {
@@ -78,10 +80,10 @@ function enhance (target, formatter, config) {
78
80
if ( methodName && typeof target [ methodName ] === 'function' ) {
79
81
switch ( len ) {
80
82
case 1 :
81
- enhancement [ methodName ] = decorateOneArg ( target , target [ methodName ] , doPowerAssert ) ;
83
+ enhancement [ methodName ] = decorateArgs ( len , target , target [ methodName ] , doPowerAssert ) ;
82
84
break ;
83
85
case 2 :
84
- enhancement [ methodName ] = decorateTwoArgs ( target , target [ methodName ] , doPowerAssert ) ;
86
+ enhancement [ methodName ] = decorateArgs ( len , target , target [ methodName ] , doPowerAssert ) ;
85
87
break ;
86
88
default :
87
89
throw new Error ( 'not supported' ) ;
@@ -108,65 +110,38 @@ function isEspoweredValue (value) {
108
110
}
109
111
110
112
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 ) ;
129
116
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 ) ;
136
119
}
137
120
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 ) {
154
126
context = {
155
- source : arg2 . source ,
127
+ source : arg . source ,
156
128
args : [ ]
157
129
} ;
158
130
}
159
131
context . args . push ( {
160
- value : arg2 . powerAssertContext . value ,
161
- events : arg2 . powerAssertContext . events
132
+ value : arg . powerAssertContext . value ,
133
+ events : arg . powerAssertContext . events
162
134
} ) ;
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 ] ;
166
140
}
167
141
168
- return doPowerAssert ( baseAssert , [ val1 , val2 ] , message , context ) ;
142
+ return doPowerAssert ( baseAssert , values , message , context ) ;
169
143
} ;
170
144
}
171
145
146
+
172
147
module . exports = enhance ;
0 commit comments