7
7
8
8
import Foundation
9
9
import Rainbow
10
- import Basic
11
- import Utility
12
- import POSIX
10
+ import ShellOut
13
11
import Dispatch
14
12
15
13
/// Specifies how to parallelize test runs.
@@ -38,7 +36,7 @@ public enum ParallelismLevel {
38
36
class TestRunner {
39
37
40
38
/// The test directory in which tests reside.
41
- let testDir : Foundation . URL
39
+ let testDir : URL
42
40
43
41
/// The set of substitutions to apply to each run line.
44
42
let substitutor : Substitutor
@@ -94,7 +92,7 @@ class TestRunner {
94
92
let enumerator = fm. enumerator ( at: testDir,
95
93
includingPropertiesForKeys: nil ) !
96
94
var files = [ TestFile] ( )
97
- for case let file as Foundation . URL in enumerator {
95
+ for case let file as URL in enumerator {
98
96
guard pathExtensions. contains ( file. pathExtension) else { continue }
99
97
let nsPath = NSString ( string: file. path)
100
98
let matchesFilter = filters. contains {
@@ -252,26 +250,15 @@ class TestRunner {
252
250
let exitCode : Int
253
251
let bash = file. makeCommandLine ( line, substitutor: substitutor)
254
252
do {
255
- let args = bash. split ( separator: " " ) . map { String ( $0 as Substring ) }
256
- let result = try Process . popen ( arguments: args)
257
- stdout = try result. utf8Output ( ) . chomp ( )
253
+ stdout = try shellOut ( to: bash)
258
254
stderr = " "
259
- switch result. exitStatus {
260
- case let . terminated( code: code) :
261
- exitCode = Int ( code)
262
- case let . signalled( signal: code) :
263
- exitCode = Int ( code)
264
- }
265
- } catch let error as SystemError {
266
- stderr = error. description
267
- stdout = " "
268
- exitCode = Int ( error. exitCode)
269
- } catch let error as Basic . Process . Error {
270
- stderr = error. description
271
- stdout = " "
272
- exitCode = Int ( EXIT_FAILURE)
255
+ exitCode = 0
256
+ } catch let error as ShellOutError {
257
+ stderr = error. message
258
+ stdout = error. output
259
+ exitCode = Int ( error. terminationStatus)
273
260
} catch {
274
- fatalError ( " \( error) " )
261
+ fatalError ( " unhandled error" )
275
262
}
276
263
let end = Date ( )
277
264
results. append ( TestResult ( line: line,
@@ -284,60 +271,3 @@ class TestRunner {
284
271
return results
285
272
}
286
273
}
287
-
288
- extension SystemError {
289
- var exitCode : Int32 {
290
- switch self {
291
- case . chdir( let errno, _) :
292
- return errno
293
- case . close( let errno) :
294
- return errno
295
- case . dirfd( let errno, _) :
296
- return errno
297
- case . exec( let errno, _, _) :
298
- return errno
299
- case . fgetc( let errno) :
300
- return errno
301
- case . fread( let errno) :
302
- return errno
303
- case . getcwd( let errno) :
304
- return errno
305
- case . mkdir( let errno, _) :
306
- return errno
307
- case . mkdtemp( let errno) :
308
- return errno
309
- case . pipe( let errno) :
310
- return errno
311
- case . posix_spawn( let errno, _) :
312
- return errno
313
- case . popen( let errno, _) :
314
- return errno
315
- case . read( let errno) :
316
- return errno
317
- case . readdir( let errno, _) :
318
- return errno
319
- case . realpath( let errno, _) :
320
- return errno
321
- case . rename( let errno, _, _) :
322
- return errno
323
- case . rmdir( let errno, _) :
324
- return errno
325
- case . setenv( let errno, _) :
326
- return errno
327
- case . stat( let errno, _) :
328
- return errno
329
- case . symlink( let errno, _, _) :
330
- return errno
331
- case . symlinkat( let errno, _) :
332
- return errno
333
- case . unlink( let errno, _) :
334
- return errno
335
- case . unsetenv( let errno, _) :
336
- return errno
337
- case . waitpid( let errno) :
338
- return errno
339
- case . usleep( let errno) :
340
- return errno
341
- }
342
- }
343
- }
0 commit comments