1
1
'use strict' ;
2
2
3
+ var path = require ( 'path' ) ;
3
4
var mocha = require ( '../../lib/mocha' ) ;
4
5
var Suite = mocha . Suite ;
5
6
var Runner = mocha . Runner ;
6
7
var Test = mocha . Test ;
7
8
var Hook = mocha . Hook ;
8
- var path = require ( 'path' ) ;
9
- var fs = require ( 'fs' ) ;
10
9
var noop = mocha . utils . noop ;
11
10
12
11
describe ( 'Runner' , function ( ) {
@@ -452,9 +451,29 @@ describe('Runner', function() {
452
451
'at processImmediate [as _immediateCallback] (timers.js:321:17)'
453
452
] ;
454
453
454
+ before ( function ( ) {
455
+ // Only for Node running on Windows
456
+ if ( process . platform === 'win32' ) {
457
+ var addDrive = function ( str ) {
458
+ var drive = 'C:' ;
459
+ var pos = str . indexOf ( path . posix . sep ) ;
460
+ return pos !== - 1 ? str . slice ( 0 , pos ) + drive + str . slice ( pos ) : str ;
461
+ } ;
462
+
463
+ var useWinPathSep = function ( str ) {
464
+ return str . split ( path . posix . sep ) . join ( path . win32 . sep ) ;
465
+ } ;
466
+
467
+ // Fake Windows pathnames in stacktrace
468
+ stack = stack . map ( function ( line ) {
469
+ return useWinPathSep ( addDrive ( line ) ) ;
470
+ } ) ;
471
+ }
472
+ } ) ;
473
+
455
474
describe ( 'shortStackTrace' , function ( ) {
456
- beforeEach ( function ( ) {
457
- if ( path . sep !== '/' ) {
475
+ before ( function ( ) {
476
+ if ( process . browser ) {
458
477
this . skip ( ) ;
459
478
}
460
479
} ) ;
@@ -475,12 +494,6 @@ describe('Runner', function() {
475
494
} ) ;
476
495
477
496
describe ( 'longStackTrace' , function ( ) {
478
- beforeEach ( function ( ) {
479
- if ( path . sep !== '/' ) {
480
- this . skip ( ) ;
481
- }
482
- } ) ;
483
-
484
497
it ( 'should display the full stack-trace' , function ( done ) {
485
498
var hook = new Hook ( ) ;
486
499
hook . parent = suite ;
@@ -499,29 +512,47 @@ describe('Runner', function() {
499
512
} ) ;
500
513
501
514
describe ( 'hugeStackTrace' , function ( ) {
502
- beforeEach ( function ( ) {
503
- if ( path . sep !== '/' ) {
515
+ before ( function ( ) {
516
+ if ( process . browser ) {
504
517
this . skip ( ) ;
505
518
}
506
519
} ) ;
507
520
508
- it ( 'should not hang if the error message is ridiculously long single line' , function ( done ) {
521
+ // Generate 64k string
522
+ function genOverlongSingleLineMessage ( ) {
523
+ var n = 8200 ;
524
+ var data = [ ] ;
525
+ data . length = n ;
526
+ for ( var i = 0 ; i < n ; i ++ ) {
527
+ data [ i ] = { a : 1 } ;
528
+ }
529
+ return JSON . stringify ( data ) ;
530
+ }
531
+
532
+ // Generate 64k string
533
+ function genOverlongMultiLineMessage ( ) {
534
+ var n = 1150 ;
535
+ var data = [ ] ;
536
+ data . length = n ;
537
+ var str = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.' ;
538
+ for ( var i = 0 ; i < n ; i ++ ) {
539
+ data [ i ] = str ;
540
+ }
541
+ return data . join ( '\n' ) ;
542
+ }
543
+
544
+ it ( 'should not hang if overlong error message is single line' , function ( done ) {
509
545
var hook = new Hook ( ) ;
510
546
hook . parent = suite ;
511
- var data = [ ] ;
512
- // mock a long message
513
- for ( var i = 0 ; i < 10000 ; i ++ ) data [ i ] = { a : 1 } ;
514
- var message = JSON . stringify ( data ) ;
547
+ var message = genOverlongSingleLineMessage ( ) ;
515
548
var err = new Error ( ) ;
516
549
// Fake stack-trace
517
550
err . stack = [ message ] . concat ( stack ) . join ( '\n' ) ;
518
551
519
552
runner . on ( 'fail' , function ( hook , err ) {
553
+ var filteredErrStack = err . stack . split ( '\n' ) . slice ( 1 ) ;
520
554
expect (
521
- err . stack
522
- . split ( '\n' )
523
- . slice ( 1 )
524
- . join ( '\n' ) ,
555
+ filteredErrStack . join ( '\n' ) ,
525
556
'to be' ,
526
557
stack . slice ( 0 , 3 ) . join ( '\n' )
527
558
) ;
@@ -530,21 +561,18 @@ describe('Runner', function() {
530
561
runner . failHook ( hook , err ) ;
531
562
} ) ;
532
563
533
- it ( 'should not hang if error message is ridiculously long multiple lines either ' , function ( done ) {
564
+ it ( 'should not hang if overlong error message is multiple lines' , function ( done ) {
534
565
var hook = new Hook ( ) ;
535
566
hook . parent = suite ;
536
- var fpath = path . join ( __dirname , '../../mocha.js' ) ;
537
- var message = fs . readFileSync ( fpath , 'utf8' ) ;
567
+ var message = genOverlongMultiLineMessage ( ) ;
538
568
var err = new Error ( ) ;
539
569
// Fake stack-trace
540
570
err . stack = [ message ] . concat ( stack ) . join ( '\n' ) ;
541
571
542
572
runner . on ( 'fail' , function ( hook , err ) {
573
+ var filteredErrStack = err . stack . split ( '\n' ) . slice ( - 3 ) ;
543
574
expect (
544
- err . stack
545
- . split ( '\n' )
546
- . slice ( - 3 )
547
- . join ( '\n' ) ,
575
+ filteredErrStack . join ( '\n' ) ,
548
576
'to be' ,
549
577
stack . slice ( 0 , 3 ) . join ( '\n' )
550
578
) ;
0 commit comments