@@ -72,6 +72,7 @@ function runTests(taskConfigsFolder, run, options, cb) {
72
72
current : undefined ,
73
73
start : undefined ,
74
74
end : undefined ,
75
+ catastrophicError : "" ,
75
76
failures : [ ]
76
77
} ;
77
78
partitions [ index ] = partition ;
@@ -86,9 +87,20 @@ function runTests(taskConfigsFolder, run, options, cb) {
86
87
input : p . stdout ,
87
88
terminal : false
88
89
} ) ;
90
+
91
+ var rlError = readline . createInterface ( {
92
+ input : p . stderr ,
93
+ terminal : false
94
+ } ) ;
95
+
89
96
rl . on ( "line" , onmessage ) ;
97
+ rlError . on ( "line" , onErrorMessage ) ;
90
98
p . on ( "exit" , onexit )
91
99
100
+ function onErrorMessage ( line ) {
101
+ partition . catastrophicError += line + os . EOL ;
102
+ }
103
+
92
104
function onmessage ( line ) {
93
105
if ( partition . start === undefined ) {
94
106
partition . start = Date . now ( ) ;
@@ -153,15 +165,17 @@ function runTests(taskConfigsFolder, run, options, cb) {
153
165
}
154
166
}
155
167
156
- function onexit ( ) {
168
+ function onexit ( code ) {
157
169
if ( partition . end === undefined ) {
158
170
partition . end = Date . now ( ) ;
159
171
}
160
172
161
173
partition . duration = partition . end - partition . start ;
162
- var summaryColor = partition . failed ? "fail" : "green" ;
163
- var summarySymbol = partition . failed ? Base . symbols . err : Base . symbols . ok ;
164
- var summaryTests = ( partition . passed === partition . tests ? partition . passed : partition . passed + "/" + partition . tests ) + " passing" ;
174
+ var isPartitionFail = partition . failed || code !== 0 ;
175
+ var summaryColor = isPartitionFail ? "fail" : "green" ;
176
+ var summarySymbol = isPartitionFail ? Base . symbols . err : Base . symbols . ok ;
177
+
178
+ var summaryTests = ( isPartitionFail ? partition . passed + "/" + partition . tests : partition . passed ) + " passing" ;
165
179
var summaryDuration = "(" + ms ( partition . duration ) + ")" ;
166
180
var savedUseColors = Base . useColors ;
167
181
Base . useColors = ! options . noColors ;
@@ -198,12 +212,34 @@ function runTests(taskConfigsFolder, run, options, cb) {
198
212
failures = reporter . failures ;
199
213
200
214
var duration = 0 ;
215
+ var catastrophicError = "" ;
201
216
for ( var i = 0 ; i < numPartitions ; i ++ ) {
202
217
var partition = partitions [ i ] ;
203
218
stats . passes += partition . passed ;
204
219
stats . failures += partition . failed ;
205
220
stats . tests += partition . tests ;
206
221
duration += partition . duration ;
222
+ if ( partition . catastrophicError !== "" ) {
223
+ // Partition is written out to a temporary file as a JSON object.
224
+ // Below is an example of how the partition JSON object looks like
225
+ // {
226
+ // "light":false,
227
+ // "tasks":[
228
+ // {
229
+ // "runner":"compiler",
230
+ // "files":["tests/cases/compiler/es6ImportNamedImportParsingError.ts"]
231
+ // }
232
+ // ],
233
+ // "runUnitTests":false
234
+ // }
235
+ var jsonText = fs . readFileSync ( partition . file ) ;
236
+ var configObj = JSON . parse ( jsonText ) ;
237
+ if ( configObj . tasks && configObj . tasks [ 0 ] ) {
238
+ catastrophicError += "Error from one or more of these files: " + configObj . tasks [ 0 ] . files + os . EOL ;
239
+ catastrophicError += partition . catastrophicError ;
240
+ catastrophicError += os . EOL ;
241
+ }
242
+ }
207
243
for ( var j = 0 ; j < partition . failures . length ; j ++ ) {
208
244
var failure = partition . failures [ j ] ;
209
245
failures . push ( makeMochaTest ( failure ) ) ;
@@ -223,6 +259,9 @@ function runTests(taskConfigsFolder, run, options, cb) {
223
259
reporter . epilogue ( ) ;
224
260
}
225
261
262
+ if ( catastrophicError !== "" ) {
263
+ return cb ( new Error ( catastrophicError ) ) ;
264
+ }
226
265
if ( stats . failures ) {
227
266
return cb ( new Error ( "Test failures reported: " + stats . failures ) ) ;
228
267
}
0 commit comments