@@ -256,6 +256,89 @@ describe('integration', function () {
256
256
) ;
257
257
} ) ;
258
258
259
+ it ( 'should catch thrown strings' , function ( done ) {
260
+ var iframe = this . iframe ;
261
+
262
+ iframeExecute ( iframe , done ,
263
+ function ( ) {
264
+ // intentionally loading this error via a script file to make
265
+ // sure it is 1) not caught by instrumentation 2) doesn't trigger
266
+ // "Script error"
267
+ var script = document . createElement ( 'script' ) ;
268
+ script . src = 'throw-string.js' ;
269
+ script . onload = function ( ) {
270
+ done ( ) ;
271
+ } ;
272
+ document . head . appendChild ( script ) ;
273
+ } ,
274
+ function ( ) {
275
+ var ravenData = iframe . contentWindow . ravenData [ 0 ] ;
276
+ assert . match ( ravenData . exception . values [ 0 ] . value , / s t r i n g E r r o r $ / ) ;
277
+ assert . equal ( ravenData . exception . values [ 0 ] . stacktrace . frames . length , 1 ) ; // always 1 because thrown strings can't provide > 1 frame
278
+
279
+ // some browsers extract proper url, line, and column for thrown strings
280
+ // but not all - falls back to frame url
281
+ assert . match ( ravenData . exception . values [ 0 ] . stacktrace . frames [ 0 ] . filename , / \/ t e s t \/ i n t e g r a t i o n \/ / ) ;
282
+ assert . match ( ravenData . exception . values [ 0 ] . stacktrace . frames [ 0 ] [ 'function' ] , / \? | g l o b a l c o d e / ) ;
283
+ }
284
+ ) ;
285
+ } ) ;
286
+
287
+ it ( 'should catch thrown objects' , function ( done ) {
288
+ var iframe = this . iframe ;
289
+
290
+ iframeExecute ( iframe , done ,
291
+ function ( ) {
292
+ // intentionally loading this error via a script file to make
293
+ // sure it is 1) not caught by instrumentation 2) doesn't trigger
294
+ // "Script error"
295
+ var script = document . createElement ( 'script' ) ;
296
+ script . src = 'throw-object.js' ;
297
+ script . onload = function ( ) {
298
+ done ( ) ;
299
+ } ;
300
+ document . head . appendChild ( script ) ;
301
+ } ,
302
+ function ( ) {
303
+ var ravenData = iframe . contentWindow . ravenData [ 0 ] ;
304
+ assert . equal ( ravenData . exception . values [ 0 ] . type , undefined ) ;
305
+ assert . equal ( ravenData . exception . values [ 0 ] . value , '[object Object]' ) ;
306
+ assert . equal ( ravenData . exception . values [ 0 ] . stacktrace . frames . length , 1 ) ; // always 1 because thrown objects can't provide > 1 frame
307
+
308
+ // some browsers extract proper url, line, and column for thrown objects
309
+ // but not all - falls back to frame url
310
+ assert . match ( ravenData . exception . values [ 0 ] . stacktrace . frames [ 0 ] . filename , / \/ t e s t \/ i n t e g r a t i o n \/ / ) ;
311
+ assert . match ( ravenData . exception . values [ 0 ] . stacktrace . frames [ 0 ] [ 'function' ] , / \? | g l o b a l c o d e / ) ;
312
+ }
313
+ ) ;
314
+ } ) ;
315
+
316
+ it ( 'should catch thrown errors' , function ( done ) {
317
+ var iframe = this . iframe ;
318
+
319
+ iframeExecute ( iframe , done ,
320
+ function ( ) {
321
+ // intentionally loading this error via a script file to make
322
+ // sure it is 1) not caught by instrumentation 2) doesn't trigger
323
+ // "Script error"
324
+ var script = document . createElement ( 'script' ) ;
325
+ script . src = 'throw-error.js' ;
326
+ script . onload = function ( ) {
327
+ done ( ) ;
328
+ } ;
329
+ document . head . appendChild ( script ) ;
330
+ } ,
331
+ function ( ) {
332
+ var ravenData = iframe . contentWindow . ravenData [ 0 ] ;
333
+ assert . match ( ravenData . exception . values [ 0 ] . type , / ^ E r r o r / ) ;
334
+ assert . match ( ravenData . exception . values [ 0 ] . value , / r e a l E r r o r $ / ) ;
335
+ assert . isAbove ( ravenData . exception . values [ 0 ] . stacktrace . frames . length , 0 ) ; // 1 or 2 depending on platform
336
+ assert . match ( ravenData . exception . values [ 0 ] . stacktrace . frames [ 0 ] . filename , / \/ t e s t \/ i n t e g r a t i o n \/ t h r o w - e r r o r \. j s / )
337
+ assert . match ( ravenData . exception . values [ 0 ] . stacktrace . frames [ 0 ] [ 'function' ] , / \? | g l o b a l c o d e / ) ;
338
+ }
339
+ ) ;
340
+ } ) ;
341
+
259
342
it ( 'should NOT catch an exception already caught via Raven.wrap' , function ( done ) {
260
343
var iframe = this . iframe ;
261
344
0 commit comments