@@ -248,38 +248,37 @@ class TestProcess : XCTestCase {
248
248
}
249
249
}
250
250
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_ " )
255
- }
256
- for entry in importantEnvVars {
257
- result [ entry. key] = entry. value
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)")
258
260
}
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 )
267
261
}
268
262
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)
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
+ }
275
271
}
276
272
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)
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
+ }
283
282
}
284
283
285
284
private func realpathOf( path: String ) -> String ? {
@@ -655,8 +654,14 @@ internal func runTask(_ arguments: [String], environment: [String: String]? = ni
655
654
}
656
655
657
656
private func parseEnv( _ env: String ) throws -> [ String : String ] {
658
- let dictionary = try PropertyListSerialization . propertyList ( from: try env. data ( using: . utf8) . unwrapped ( ) , format: nil ) as? [ String : String ]
659
- return try dictionary. unwrapped ( )
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
660
665
}
661
666
#endif
662
667
0 commit comments