@@ -181,16 +181,14 @@ describe('q', function() {
181
181
} ;
182
182
183
183
184
- function exceptionHandler ( reason ) {
185
- exceptionHandlerCalls . push ( reason ) ;
186
- }
187
-
188
-
189
- function exceptionHandlerStr ( ) {
190
- return exceptionHandlerCalls . join ( '; ' ) ;
184
+ function exceptionHandler ( exception , reason ) {
185
+ if ( typeof reason === 'undefined' ) {
186
+ exceptionHandlerCalls . push ( { reason : exception } ) ;
187
+ } else {
188
+ exceptionHandlerCalls . push ( { reason : reason , exception : exception } ) ;
189
+ }
191
190
}
192
191
193
-
194
192
beforeEach ( function ( ) {
195
193
q = qFactory ( mockNextTick . nextTick , exceptionHandler , true ) ;
196
194
q_no_error = qFactory ( mockNextTick . nextTick , exceptionHandler , false ) ;
@@ -2167,45 +2165,98 @@ describe('q', function() {
2167
2165
2168
2166
2169
2167
describe ( 'when exceptionHandler is called' , function ( ) {
2170
- it ( 'should log an unhandled rejected promise' , function ( ) {
2171
- var defer = q . defer ( ) ;
2172
- defer . reject ( 'foo' ) ;
2173
- mockNextTick . flush ( ) ;
2174
- expect ( exceptionHandlerStr ( ) ) . toBe ( 'Possibly unhandled rejection: foo' ) ;
2175
- } ) ;
2168
+ function CustomError ( ) { }
2169
+ CustomError . prototype = Object . create ( Error . prototype ) ;
2176
2170
2171
+ var errorEg = new Error ( 'Fail' ) ;
2172
+ var errorStr = toDebugString ( errorEg ) ;
2177
2173
2178
- it ( 'should not log an unhandled rejected promise if disabled' , function ( ) {
2179
- var defer = q_no_error . defer ( ) ;
2180
- defer . reject ( 'foo' ) ;
2181
- expect ( exceptionHandlerStr ( ) ) . toBe ( '' ) ;
2182
- } ) ;
2174
+ var customError = new CustomError ( 'Custom' ) ;
2175
+ var customErrorStr = toDebugString ( customError ) ;
2183
2176
2177
+ var nonErrorObj = { isATest : 'this is' } ;
2178
+ var nonErrorObjStr = toDebugString ( nonErrorObj ) ;
2184
2179
2185
- it ( 'should log a handled rejected promise on a promise without rejection callbacks' , function ( ) {
2186
- var defer = q . defer ( ) ;
2187
- defer . promise . then ( noop ) ;
2188
- defer . reject ( 'foo' ) ;
2189
- mockNextTick . flush ( ) ;
2190
- expect ( exceptionHandlerStr ( ) ) . toBe ( 'Possibly unhandled rejection: foo' ) ;
2191
- } ) ;
2180
+ var fixtures = [
2181
+ {
2182
+ type : 'Error object' ,
2183
+ value : errorEg ,
2184
+ expected : {
2185
+ exception : errorEg ,
2186
+ reason : 'Possibly unhandled rejection: ' + errorStr
2187
+ }
2188
+ } ,
2189
+ {
2190
+ type : 'custom Error object' ,
2191
+ value : customError ,
2192
+ expected : {
2193
+ exception : customError ,
2194
+ reason : 'Possibly unhandled rejection: ' + customErrorStr
2195
+ }
2196
+ } ,
2197
+ {
2198
+ type : 'non-Error object' ,
2199
+ value : nonErrorObj ,
2200
+ expected : {
2201
+ reason : 'Possibly unhandled rejection: ' + nonErrorObjStr
2202
+ }
2203
+ } ,
2204
+ {
2205
+ type : 'string primitive' ,
2206
+ value : 'foo' ,
2207
+ expected : {
2208
+ reason : 'Possibly unhandled rejection: foo'
2209
+ }
2210
+ }
2211
+ ] ;
2212
+ forEach ( fixtures , function ( fixture ) {
2213
+ var type = fixture . type ;
2214
+ var value = fixture . value ;
2215
+ var expected = fixture . expected ;
2192
2216
2217
+ describe ( 'with ' + type , function ( ) {
2193
2218
2194
- it ( 'should not log a handled rejected promise' , function ( ) {
2195
- var defer = q . defer ( ) ;
2196
- defer . promise . catch ( noop ) ;
2197
- defer . reject ( 'foo' ) ;
2198
- mockNextTick . flush ( ) ;
2199
- expect ( exceptionHandlerStr ( ) ) . toBe ( '' ) ;
2200
- } ) ;
2219
+ it ( 'should log an unhandled rejected promise' , function ( ) {
2220
+ var defer = q . defer ( ) ;
2221
+ defer . reject ( value ) ;
2222
+ mockNextTick . flush ( ) ;
2223
+ expect ( exceptionHandlerCalls ) . toEqual ( [ expected ] ) ;
2224
+ } ) ;
2201
2225
2202
2226
2203
- it ( 'should not log a handled rejected promise that is handled in a future tick' , function ( ) {
2204
- var defer = q . defer ( ) ;
2205
- defer . promise . catch ( noop ) ;
2206
- defer . resolve ( q . reject ( 'foo' ) ) ;
2207
- mockNextTick . flush ( ) ;
2208
- expect ( exceptionHandlerStr ( ) ) . toBe ( '' ) ;
2227
+ it ( 'should not log an unhandled rejected promise if disabled' , function ( ) {
2228
+ var defer = q_no_error . defer ( ) ;
2229
+ defer . reject ( value ) ;
2230
+ expect ( exceptionHandlerCalls ) . toEqual ( [ ] ) ;
2231
+ } ) ;
2232
+
2233
+
2234
+ it ( 'should log a handled rejected promise on a promise without rejection callbacks' , function ( ) {
2235
+ var defer = q . defer ( ) ;
2236
+ defer . promise . then ( noop ) ;
2237
+ defer . reject ( value ) ;
2238
+ mockNextTick . flush ( ) ;
2239
+ expect ( exceptionHandlerCalls ) . toEqual ( [ expected ] ) ;
2240
+ } ) ;
2241
+
2242
+
2243
+ it ( 'should not log a handled rejected promise' , function ( ) {
2244
+ var defer = q . defer ( ) ;
2245
+ defer . promise . catch ( noop ) ;
2246
+ defer . reject ( value ) ;
2247
+ mockNextTick . flush ( ) ;
2248
+ expect ( exceptionHandlerCalls ) . toEqual ( [ ] ) ;
2249
+ } ) ;
2250
+
2251
+
2252
+ it ( 'should not log a handled rejected promise that is handled in a future tick' , function ( ) {
2253
+ var defer = q . defer ( ) ;
2254
+ defer . promise . catch ( noop ) ;
2255
+ defer . resolve ( q . reject ( value ) ) ;
2256
+ mockNextTick . flush ( ) ;
2257
+ expect ( exceptionHandlerCalls ) . toEqual ( [ ] ) ;
2258
+ } ) ;
2259
+ } ) ;
2209
2260
} ) ;
2210
2261
} ) ;
2211
2262
} ) ;
0 commit comments