77
88import Foundation
99import Rainbow
10- import Basic
11- import Utility
12- import POSIX
10+ import ShellOut
1311import Dispatch
1412
1513/// Specifies how to parallelize test runs.
@@ -38,7 +36,7 @@ public enum ParallelismLevel {
3836class TestRunner {
3937
4038 /// The test directory in which tests reside.
41- let testDir : Foundation . URL
39+ let testDir : URL
4240
4341 /// The set of substitutions to apply to each run line.
4442 let substitutor : Substitutor
@@ -94,7 +92,7 @@ class TestRunner {
9492 let enumerator = fm. enumerator ( at: testDir,
9593 includingPropertiesForKeys: nil ) !
9694 var files = [ TestFile] ( )
97- for case let file as Foundation . URL in enumerator {
95+ for case let file as URL in enumerator {
9896 guard pathExtensions. contains ( file. pathExtension) else { continue }
9997 let nsPath = NSString ( string: file. path)
10098 let matchesFilter = filters. contains {
@@ -252,26 +250,15 @@ class TestRunner {
252250 let exitCode : Int
253251 let bash = file. makeCommandLine ( line, substitutor: substitutor)
254252 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)
258254 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)
273260 } catch {
274- fatalError ( " \( error) " )
261+ fatalError ( " unhandled error" )
275262 }
276263 let end = Date ( )
277264 results. append ( TestResult ( line: line,
@@ -284,60 +271,3 @@ class TestRunner {
284271 return results
285272 }
286273}
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