@@ -53,17 +53,41 @@ namespace Harness.Parallel.Worker {
53
53
const savedTestList = testList ;
54
54
55
55
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
+ }
59
73
testList . forEach ( ( { name, callback, kind } ) => executeCallback ( name , callback , kind ) ) ;
60
- testList . length = 0 ;
61
- testList = savedTestList ;
62
74
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
+ }
67
91
}
68
92
69
93
function executeCallback ( name : string , callback : Function , kind : "suite" | "test" ) {
@@ -82,13 +106,15 @@ namespace Harness.Parallel.Worker {
82
106
retries ( ) { return this ; } ,
83
107
slow ( ) { return this ; } ,
84
108
} ;
85
- name = [ ...namestack , name ] . join ( " " ) ;
109
+ namestack . push ( name ) ;
110
+ name = namestack . join ( " " ) ;
86
111
if ( beforeEachFunc ) {
87
112
try {
88
113
beforeEachFunc ( ) ;
89
114
}
90
115
catch ( error ) {
91
116
errors . push ( { error : error . message , stack : error . stack , name } ) ;
117
+ namestack . pop ( ) ;
92
118
return ;
93
119
}
94
120
}
@@ -101,6 +127,9 @@ namespace Harness.Parallel.Worker {
101
127
errors . push ( { error : error . message , stack : error . stack , name } ) ;
102
128
return ;
103
129
}
130
+ finally {
131
+ namestack . pop ( ) ;
132
+ }
104
133
passing ++ ;
105
134
}
106
135
else {
@@ -124,6 +153,9 @@ namespace Harness.Parallel.Worker {
124
153
errors . push ( { error : error . message , stack : error . stack , name } ) ;
125
154
return ;
126
155
}
156
+ finally {
157
+ namestack . pop ( ) ;
158
+ }
127
159
if ( ! completed ) {
128
160
errors . push ( { error : "Test completes asynchronously, which is unsupported by the parallel harness" , stack : "" , name } ) ;
129
161
}
@@ -172,7 +204,7 @@ namespace Harness.Parallel.Worker {
172
204
}
173
205
} ) ;
174
206
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 ( " " ) } } ;
176
208
try {
177
209
process . send ( message ) ;
178
210
}
0 commit comments