@@ -248,37 +248,38 @@ class TestProcess : XCTestCase {
248
248
}
249
249
}
250
250
251
- func test_passthrough_environment( ) {
252
- do {
253
- let ( output, _) = try runTask ( [ " /usr/bin/env " ] , environment: nil )
254
- let env = try parseEnv ( output)
255
- XCTAssertGreaterThan ( env. count, 0 )
256
- } catch {
257
- // FIXME: SR-9930 parseEnv fails if an environment variable contains
258
- // a newline.
259
- // XCTFail("Test failed: \(error)")
251
+ func helperToolEnvironment( from environment: [ String : String ] ) -> [ String : String ] {
252
+ var result = environment
253
+ let importantEnvVars = ProcessInfo . processInfo. environment. filter {
254
+ $0. key. hasPrefix ( " LD_ " ) || $0. key. hasPrefix ( " DYLD_ " )
260
255
}
256
+ for entry in importantEnvVars {
257
+ result [ entry. key] = entry. value
258
+ }
259
+ return result
260
+ }
261
+
262
+ func test_passthrough_environment( ) throws {
263
+ let helper = xdgTestHelperURL ( )
264
+ let ( output, _) = try runTask ( [ helper. path, " --env " ] , environment: nil )
265
+ let env = try parseEnv ( output)
266
+ XCTAssertGreaterThan ( env. count, 0 )
261
267
}
262
268
263
- func test_no_environment( ) {
264
- do {
265
- let ( output, _) = try runTask ( [ " /usr/bin/env " ] , environment: [ : ] )
266
- let env = try parseEnv ( output)
267
- XCTAssertEqual ( env. count, 0 )
268
- } catch {
269
- XCTFail ( " Test failed: \( error) " )
270
- }
269
+ func test_no_environment( ) throws {
270
+ let helper = xdgTestHelperURL ( )
271
+ let input = helperToolEnvironment ( from: [ : ] )
272
+ let ( output, _) = try runTask ( [ helper. path, " --env " ] , environment: input)
273
+ let env = try parseEnv ( output)
274
+ XCTAssertEqual ( env, input)
271
275
}
272
276
273
- func test_custom_environment( ) {
274
- do {
275
- let input = [ " HELLO " : " WORLD " , " HOME " : " CUPERTINO " ]
276
- let ( output, _) = try runTask ( [ " /usr/bin/env " ] , environment: input)
277
- let env = try parseEnv ( output)
278
- XCTAssertEqual ( env, input)
279
- } catch {
280
- XCTFail ( " Test failed: \( error) " )
281
- }
277
+ func test_custom_environment( ) throws {
278
+ let helper = xdgTestHelperURL ( )
279
+ let input = helperToolEnvironment ( from: [ " HELLO " : " WORLD " , " HOME " : " CUPERTINO " ] )
280
+ let ( output, _) = try runTask ( [ helper. path, " --env " ] , environment: input)
281
+ let env = try parseEnv ( output)
282
+ XCTAssertEqual ( env, input)
282
283
}
283
284
284
285
private func realpathOf( path: String ) -> String ? {
@@ -654,14 +655,8 @@ internal func runTask(_ arguments: [String], environment: [String: String]? = ni
654
655
}
655
656
656
657
private func parseEnv( _ env: String ) throws -> [ String : String ] {
657
- var result = [ String: String] ( )
658
- for line in env. components ( separatedBy: " \n " ) where line != " " {
659
- guard let range = line. range ( of: " = " ) else {
660
- throw Error . InvalidEnvironmentVariable ( line)
661
- }
662
- result [ String ( line [ ..< range. lowerBound] ) ] = String ( line [ range. upperBound... ] )
663
- }
664
- return result
658
+ let dictionary = try PropertyListSerialization . propertyList ( from: try env. data ( using: . utf8) . unwrapped ( ) , format: nil ) as? [ String : String ]
659
+ return try dictionary. unwrapped ( )
665
660
}
666
661
#endif
667
662
0 commit comments