File tree Expand file tree Collapse file tree 3 files changed +47
-39
lines changed
Tests/TestingTests/Support Expand file tree Collapse file tree 3 files changed +47
-39
lines changed Original file line number Diff line number Diff line change @@ -457,6 +457,10 @@ extension ExitTest {
457
457
return nil
458
458
}
459
459
460
+ // Erase the environment variable so that it cannot accidentally be opened
461
+ // twice (nor, in theory, affect the code of the exit test.)
462
+ Environment . setVariable ( nil , named: " SWT_EXPERIMENTAL_BACKCHANNEL " )
463
+
460
464
var fd : CInt ?
461
465
#if SWT_TARGET_OS_APPLE || os(Linux) || os(FreeBSD) || os(OpenBSD)
462
466
fd = CInt ( backChannelEnvironmentVariable)
@@ -487,6 +491,10 @@ extension ExitTest {
487
491
// Find the ID of the exit test to run, if any, in the environment block.
488
492
var id : ExitTest . ID ?
489
493
if var idString = Environment . variable ( named: " SWT_EXPERIMENTAL_EXIT_TEST_ID " ) {
494
+ // Clear the environment variable. It's an implementation detail and exit
495
+ // test code shouldn't be dependent on it. Use ExitTest.current if needed!
496
+ Environment . setVariable ( nil , named: " SWT_EXPERIMENTAL_EXIT_TEST_ID " )
497
+
490
498
id = try ? idString. withUTF8 { idBuffer in
491
499
try JSON . decode ( ExitTest . ID. self, from: UnsafeRawBufferPointer ( idBuffer) )
492
500
}
Original file line number Diff line number Diff line change @@ -235,3 +235,42 @@ enum Environment {
235
235
}
236
236
}
237
237
}
238
+
239
+ // MARK: - Setting variables
240
+
241
+ extension Environment {
242
+ /// Set the environment variable with the specified name.
243
+ ///
244
+ /// - Parameters:
245
+ /// - value: The new value for the specified environment variable. Pass
246
+ /// `nil` to remove the variable from the current process' environment.
247
+ /// - name: The name of the environment variable.
248
+ ///
249
+ /// - Returns: Whether or not the environment variable was successfully set.
250
+ @discardableResult
251
+ static func setVariable( _ value: String ? , named name: String ) -> Bool {
252
+ #if SWT_NO_ENVIRONMENT_VARIABLES
253
+ simulatedEnvironment. withLock { environment in
254
+ environment [ name] = value
255
+ }
256
+ return true
257
+ #elseif SWT_TARGET_OS_APPLE || os(Linux) || os(FreeBSD) || os(OpenBSD) || os(Android) || os(WASI)
258
+ if let value {
259
+ return 0 == setenv ( name, value, 1 )
260
+ }
261
+ return 0 == unsetenv ( name)
262
+ #elseif os(Windows)
263
+ name. withCString ( encodedAs: UTF16 . self) { name in
264
+ if let value {
265
+ return value. withCString ( encodedAs: UTF16 . self) { value in
266
+ SetEnvironmentVariableW ( name, value)
267
+ }
268
+ }
269
+ return SetEnvironmentVariableW ( name, nil )
270
+ }
271
+ #else
272
+ #warning("Platform-specific implementation missing: environment variables unavailable")
273
+ return false
274
+ #endif
275
+ }
276
+ }
Original file line number Diff line number Diff line change @@ -71,42 +71,3 @@ struct EnvironmentTests {
71
71
#expect( Environment . flag ( named: name) == false )
72
72
}
73
73
}
74
-
75
- // MARK: - Fixtures
76
-
77
- extension Environment {
78
- /// Set the environment variable with the specified name.
79
- ///
80
- /// - Parameters:
81
- /// - value: The new value for the specified environment variable. Pass
82
- /// `nil` to remove the variable from the current process' environment.
83
- /// - name: The name of the environment variable.
84
- ///
85
- /// - Returns: Whether or not the environment variable was successfully set.
86
- @discardableResult
87
- static func setVariable( _ value: String ? , named name: String ) -> Bool {
88
- #if SWT_NO_ENVIRONMENT_VARIABLES
89
- simulatedEnvironment. withLock { environment in
90
- environment [ name] = value
91
- }
92
- return true
93
- #elseif SWT_TARGET_OS_APPLE || os(Linux) || os(FreeBSD) || os(OpenBSD) || os(Android) || os(WASI)
94
- if let value {
95
- return 0 == setenv ( name, value, 1 )
96
- }
97
- return 0 == unsetenv ( name)
98
- #elseif os(Windows)
99
- name. withCString ( encodedAs: UTF16 . self) { name in
100
- if let value {
101
- return value. withCString ( encodedAs: UTF16 . self) { value in
102
- SetEnvironmentVariableW ( name, value)
103
- }
104
- }
105
- return SetEnvironmentVariableW ( name, nil )
106
- }
107
- #else
108
- #warning("Platform-specific implementation missing: environment variables unavailable")
109
- return false
110
- #endif
111
- }
112
- }
You can’t perform that action at this time.
0 commit comments