@@ -724,6 +724,46 @@ class TestProcess : XCTestCase {
724
724
}
725
725
}
726
726
727
+ func test_multiProcesses( ) {
728
+ let source = Process ( )
729
+ source. executableURL = xdgTestHelperURL ( )
730
+ source. arguments = [ " --getcwd " ]
731
+
732
+ let cat1 = Process ( )
733
+ cat1. executableURL = xdgTestHelperURL ( )
734
+ cat1. arguments = [ " --cat " ]
735
+
736
+ let cat2 = Process ( )
737
+ cat2. executableURL = xdgTestHelperURL ( )
738
+ cat2. arguments = [ " --cat " ]
739
+
740
+ let pipe1 = Pipe ( )
741
+ source. standardOutput = pipe1
742
+ cat1. standardInput = pipe1
743
+
744
+ let pipe2 = Pipe ( )
745
+ cat1. standardOutput = pipe2
746
+ cat2. standardInput = pipe2
747
+
748
+ let pipe3 = Pipe ( )
749
+ cat2. standardOutput = pipe3
750
+
751
+ XCTAssertNoThrow ( try source. run ( ) )
752
+ XCTAssertNoThrow ( try cat1. run ( ) )
753
+ XCTAssertNoThrow ( try cat2. run ( ) )
754
+ cat2. waitUntilExit ( )
755
+ cat1. waitUntilExit ( )
756
+ source. waitUntilExit ( )
757
+
758
+ do {
759
+ let data = try XCTUnwrap ( pipe3. fileHandleForReading. readToEnd ( ) )
760
+ let pwd = String . init ( decoding: data, as: UTF8 . self) . trimmingCharacters ( in: CharacterSet ( [ " \n " , " \r " ] ) )
761
+ XCTAssertEqual ( pwd, FileManager . default. currentDirectoryPath. standardizePath ( ) )
762
+ } catch {
763
+ XCTFail ( " \( error) " )
764
+ }
765
+ }
766
+
727
767
static var allTests : [ ( String , ( TestProcess ) -> ( ) throws -> Void ) ] {
728
768
var tests = [
729
769
( " test_exit0 " , test_exit0) ,
@@ -751,7 +791,8 @@ class TestProcess : XCTestCase {
751
791
( " test_redirect_all_using_nil " , test_redirect_all_using_nil) ,
752
792
( " test_plutil " , test_plutil) ,
753
793
( " test_currentDirectory " , test_currentDirectory) ,
754
- ( " test_pipeCloseBeforeLaunch " , test_pipeCloseBeforeLaunch)
794
+ ( " test_pipeCloseBeforeLaunch " , test_pipeCloseBeforeLaunch) ,
795
+ ( " test_multiProcesses " , test_multiProcesses) ,
755
796
]
756
797
757
798
#if !os(Windows)
0 commit comments