@@ -53,17 +53,41 @@ namespace Harness.Parallel.Worker {
5353 const savedTestList = testList ;
5454
5555 testList = [ ] ;
56- callback . call ( fakeContext ) ;
57- beforeFunc && beforeFunc ( ) ;
58- beforeFunc = undefined ;
56+ try {
57+ callback . call ( fakeContext ) ;
58+ }
59+ catch ( e ) {
60+ errors . push ( { error : `Error executing suite: ${ e . message } ` , stack : e . stack , name : namestack . join ( " " ) } ) ;
61+ return cleanup ( ) ;
62+ }
63+ try {
64+ beforeFunc && beforeFunc ( ) ;
65+ }
66+ catch ( e ) {
67+ errors . push ( { error : `Error executing before function: ${ e . message } ` , stack : e . stack , name : namestack . join ( " " ) } ) ;
68+ return cleanup ( ) ;
69+ }
70+ finally {
71+ beforeFunc = undefined ;
72+ }
5973 testList . forEach ( ( { name, callback, kind } ) => executeCallback ( name , callback , kind ) ) ;
60- testList . length = 0 ;
61- testList = savedTestList ;
6274
63- afterFunc && afterFunc ( ) ;
64- afterFunc = undefined ;
65- beforeEachFunc = savedBeforeEach ;
66- namestack . pop ( ) ;
75+ try {
76+ afterFunc && afterFunc ( ) ;
77+ }
78+ catch ( e ) {
79+ errors . push ( { error : `Error executing after function: ${ e . message } ` , stack : e . stack , name : namestack . join ( " " ) } ) ;
80+ }
81+ finally {
82+ afterFunc = undefined ;
83+ cleanup ( ) ;
84+ }
85+ function cleanup ( ) {
86+ testList . length = 0 ;
87+ testList = savedTestList ;
88+ beforeEachFunc = savedBeforeEach ;
89+ namestack . pop ( ) ;
90+ }
6791 }
6892
6993 function executeCallback ( name : string , callback : Function , kind : "suite" | "test" ) {
@@ -82,13 +106,15 @@ namespace Harness.Parallel.Worker {
82106 retries ( ) { return this ; } ,
83107 slow ( ) { return this ; } ,
84108 } ;
85- name = [ ...namestack , name ] . join ( " " ) ;
109+ namestack . push ( name ) ;
110+ name = namestack . join ( " " ) ;
86111 if ( beforeEachFunc ) {
87112 try {
88113 beforeEachFunc ( ) ;
89114 }
90115 catch ( error ) {
91116 errors . push ( { error : error . message , stack : error . stack , name } ) ;
117+ namestack . pop ( ) ;
92118 return ;
93119 }
94120 }
@@ -101,6 +127,9 @@ namespace Harness.Parallel.Worker {
101127 errors . push ( { error : error . message , stack : error . stack , name } ) ;
102128 return ;
103129 }
130+ finally {
131+ namestack . pop ( ) ;
132+ }
104133 passing ++ ;
105134 }
106135 else {
@@ -124,6 +153,9 @@ namespace Harness.Parallel.Worker {
124153 errors . push ( { error : error . message , stack : error . stack , name } ) ;
125154 return ;
126155 }
156+ finally {
157+ namestack . pop ( ) ;
158+ }
127159 if ( ! completed ) {
128160 errors . push ( { error : "Test completes asynchronously, which is unsupported by the parallel harness" , stack : "" , name } ) ;
129161 }
@@ -172,7 +204,7 @@ namespace Harness.Parallel.Worker {
172204 }
173205 } ) ;
174206 process . on ( "uncaughtException" , error => {
175- const message : ParallelErrorMessage = { type : "error" , payload : { error : error . message , stack : error . stack } } ;
207+ const message : ParallelErrorMessage = { type : "error" , payload : { error : error . message , stack : error . stack , name : namestack . join ( " " ) } } ;
176208 try {
177209 process . send ( message ) ;
178210 }
0 commit comments