@@ -256,6 +256,57 @@ describe('integration', function () {
256256 ) ;
257257 } ) ;
258258
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+ 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 - s t r i n g \. j s / )
279+ assert . match ( ravenData . exception . values [ 0 ] . stacktrace . frames [ 0 ] [ 'function' ] , / \? | g l o b a l c o d e / ) ;
280+ }
281+ ) ;
282+ } ) ;
283+
284+ it ( 'should catch thrown errors' , function ( done ) {
285+ var iframe = this . iframe ;
286+
287+ iframeExecute ( iframe , done ,
288+ function ( ) {
289+ // intentionally loading this error via a script file to make
290+ // sure it is 1) not caught by instrumentation 2) doesn't trigger
291+ // "Script error"
292+ var script = document . createElement ( 'script' ) ;
293+ script . src = 'throw-error.js' ;
294+ script . onload = function ( ) {
295+ done ( ) ;
296+ } ;
297+ document . head . appendChild ( script ) ;
298+ } ,
299+ function ( ) {
300+ var ravenData = iframe . contentWindow . ravenData [ 0 ] ;
301+ assert . match ( ravenData . exception . values [ 0 ] . type , / ^ E r r o r / ) ;
302+ assert . match ( ravenData . exception . values [ 0 ] . value , / r e a l E r r o r $ / ) ;
303+ assert . isAbove ( ravenData . exception . values [ 0 ] . stacktrace . frames . length , 0 ) ; // 1 or 2 depending on platform
304+ 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 / )
305+ assert . match ( ravenData . exception . values [ 0 ] . stacktrace . frames [ 0 ] [ 'function' ] , / \? | g l o b a l c o d e / ) ;
306+ }
307+ ) ;
308+ } ) ;
309+
259310 it ( 'should NOT catch an exception already caught via Raven.wrap' , function ( done ) {
260311 var iframe = this . iframe ;
261312
0 commit comments