@@ -19,6 +19,15 @@ typealias ProcessID = TSCBasic.Process.ProcessID
19
19
typealias Process = TSCBasic . Process
20
20
21
21
class ProcessTests : XCTestCase {
22
+ func env( ) -> [ String : String ] {
23
+ var env = ProcessEnv . vars
24
+ #if os(macOS)
25
+ // Many of these tests use Python which might not be in the default `PATH` when running these tests from Xcode.
26
+ env [ " PATH " ] = " \( env [ " PATH " ] ?? " " ) :/usr/local/bin "
27
+ #endif
28
+ return env
29
+ }
30
+
22
31
func script( _ name: String ) -> String {
23
32
return AbsolutePath ( #file) . parentDirectory. appending ( components: " processInputs " , name) . pathString
24
33
}
@@ -255,7 +264,7 @@ class ProcessTests: XCTestCase {
255
264
256
265
func testStdin( ) throws {
257
266
var stdout = [ UInt8] ( )
258
- let process = Process ( args: script ( " in-to-out " ) , outputRedirection: . stream( stdout: { stdoutBytes in
267
+ let process = Process ( args: script ( " in-to-out " ) , environment : env ( ) , outputRedirection: . stream( stdout: { stdoutBytes in
259
268
stdout += stdoutBytes
260
269
} , stderr: { _ in } ) )
261
270
let stdinStream = try process. launch ( )
@@ -273,22 +282,22 @@ class ProcessTests: XCTestCase {
273
282
func testStdoutStdErr( ) throws {
274
283
// A simple script to check that stdout and stderr are captured separatly.
275
284
do {
276
- let result = try Process . popen ( args: script ( " simple-stdout-stderr " ) )
285
+ let result = try Process . popen ( args: script ( " simple-stdout-stderr " ) , environment : env ( ) )
277
286
XCTAssertEqual ( try result. utf8Output ( ) , " simple output \n " )
278
287
XCTAssertEqual ( try result. utf8stderrOutput ( ) , " simple error \n " )
279
288
}
280
289
281
290
// A long stdout and stderr output.
282
291
do {
283
- let result = try Process . popen ( args: script ( " long-stdout-stderr " ) )
292
+ let result = try Process . popen ( args: script ( " long-stdout-stderr " ) , environment : env ( ) )
284
293
let count = 16 * 1024
285
294
XCTAssertEqual ( try result. utf8Output ( ) , String ( repeating: " 1 " , count: count) )
286
295
XCTAssertEqual ( try result. utf8stderrOutput ( ) , String ( repeating: " 2 " , count: count) )
287
296
}
288
297
289
298
// This script will block if the streams are not read.
290
299
do {
291
- let result = try Process . popen ( args: script ( " deadlock-if-blocking-io " ) )
300
+ let result = try Process . popen ( args: script ( " deadlock-if-blocking-io " ) , environment : env ( ) )
292
301
let count = 16 * 1024
293
302
XCTAssertEqual ( try result. utf8Output ( ) , String ( repeating: " 1 " , count: count) )
294
303
XCTAssertEqual ( try result. utf8stderrOutput ( ) , String ( repeating: " 2 " , count: count) )
@@ -298,7 +307,7 @@ class ProcessTests: XCTestCase {
298
307
func testStdoutStdErrRedirected( ) throws {
299
308
// A simple script to check that stdout and stderr are captured in the same location.
300
309
do {
301
- let process = Process ( args: script ( " simple-stdout-stderr " ) , outputRedirection: . collect( redirectStderr: true ) )
310
+ let process = Process ( args: script ( " simple-stdout-stderr " ) , environment : env ( ) , outputRedirection: . collect( redirectStderr: true ) )
302
311
try process. launch ( )
303
312
let result = try process. waitUntilExit ( )
304
313
XCTAssertEqual ( try result. utf8Output ( ) , " simple error \n simple output \n " )
@@ -307,7 +316,7 @@ class ProcessTests: XCTestCase {
307
316
308
317
// A long stdout and stderr output.
309
318
do {
310
- let process = Process ( args: script ( " long-stdout-stderr " ) , outputRedirection: . collect( redirectStderr: true ) )
319
+ let process = Process ( args: script ( " long-stdout-stderr " ) , environment : env ( ) , outputRedirection: . collect( redirectStderr: true ) )
311
320
try process. launch ( )
312
321
let result = try process. waitUntilExit ( )
313
322
@@ -320,7 +329,7 @@ class ProcessTests: XCTestCase {
320
329
func testStdoutStdErrStreaming( ) throws {
321
330
var stdout = [ UInt8] ( )
322
331
var stderr = [ UInt8] ( )
323
- let process = Process ( args: script ( " long-stdout-stderr " ) , outputRedirection: . stream( stdout: { stdoutBytes in
332
+ let process = Process ( args: script ( " long-stdout-stderr " ) , environment : env ( ) , outputRedirection: . stream( stdout: { stdoutBytes in
324
333
stdout += stdoutBytes
325
334
} , stderr: { stderrBytes in
326
335
stderr += stderrBytes
@@ -336,7 +345,7 @@ class ProcessTests: XCTestCase {
336
345
func testStdoutStdErrStreamingRedirected( ) throws {
337
346
var stdout = [ UInt8] ( )
338
347
var stderr = [ UInt8] ( )
339
- let process = Process ( args: script ( " long-stdout-stderr " ) , outputRedirection: . stream( stdout: { stdoutBytes in
348
+ let process = Process ( args: script ( " long-stdout-stderr " ) , environment : env ( ) , outputRedirection: . stream( stdout: { stdoutBytes in
340
349
stdout += stdoutBytes
341
350
} , stderr: { stderrBytes in
342
351
stderr += stderrBytes
0 commit comments