@@ -29,6 +29,7 @@ final class ToolchainRegistryTests: XCTestCase {
29
29
XCTAssertEqual ( tr. default? . identifier, " b " )
30
30
tr. default = nil
31
31
XCTAssertEqual ( tr. default? . identifier, " a " )
32
+ XCTAssert ( tr. default === tr. toolchain ( identifier: " a " ) )
32
33
}
33
34
34
35
func testDefaultDarwin( ) {
@@ -169,6 +170,10 @@ final class ToolchainRegistryTests: XCTestCase {
169
170
overrideReg. darwinToolchainOverride = " org.fake.global.B "
170
171
XCTAssertEqual ( overrideReg. darwinToolchainIdentifier, " org.fake.global.B " )
171
172
XCTAssertEqual ( overrideReg. default? . identifier, " org.fake.global.B " )
173
+
174
+ let checkByDir = ToolchainRegistry ( )
175
+ checkByDir. scanForToolchains ( xctoolchainSearchPath: toolchains, fs)
176
+ XCTAssertEqual ( checkByDir. toolchains. count, 4 )
172
177
#endif
173
178
}
174
179
@@ -198,9 +203,23 @@ final class ToolchainRegistryTests: XCTestCase {
198
203
XCTAssertNil ( tc. swiftc)
199
204
XCTAssertNotNil ( tc. sourcekitd)
200
205
XCTAssertNil ( tc. libIndexStore)
206
+
207
+ let binPath2 = AbsolutePath ( " /other/my_toolchain/bin " )
208
+ try ! setenv ( " SOME_TEST_ENV_PATH " , value: " /bogus: \( binPath2. asString) :/bogus2 " )
209
+ makeToolchain ( binPath: binPath2, fs, sourcekitd: true )
210
+ tr. scanForToolchains ( pathVariables: [ " NOPE " , " SOME_TEST_ENV_PATH " , " MORE_NOPE " ] , fs)
211
+
212
+ guard let tc2 = tr. toolchains. first ( where: { tc in tc. path == binPath2 } ) else {
213
+ XCTFail ( " couldn't find expected toolchain " )
214
+ return
215
+ }
216
+
217
+ XCTAssertEqual ( tr. default? . identifier, tc. identifier)
218
+ XCTAssertEqual ( tc2. identifier, binPath2. asString)
219
+ XCTAssertNotNil ( tc2. sourcekitd)
201
220
}
202
221
203
- func testSearchExplicitEnv ( ) {
222
+ func testSearchExplicitEnvBuiltin ( ) {
204
223
let fs = InMemoryFileSystem ( )
205
224
let tr = ToolchainRegistry ( fs)
206
225
let binPath = AbsolutePath ( " /foo/bar/my_toolchain/bin " )
@@ -228,6 +247,35 @@ final class ToolchainRegistryTests: XCTestCase {
228
247
XCTAssertNil ( tc. libIndexStore)
229
248
}
230
249
250
+ func testSearchExplicitEnv( ) {
251
+ let fs = InMemoryFileSystem ( )
252
+ let tr = ToolchainRegistry ( fs)
253
+ let binPath = AbsolutePath ( " /foo/bar/my_toolchain/bin " )
254
+ makeToolchain ( binPath: binPath, fs, sourcekitd: true )
255
+
256
+ XCTAssertNil ( tr. default)
257
+ XCTAssert ( tr. toolchains. isEmpty)
258
+
259
+ try ! setenv ( " TEST_ENV_SOURCEKIT_TOOLCHAIN_PATH " , value: binPath. parentDirectory. asString)
260
+
261
+ tr. scanForToolchains (
262
+ environmentVariables: [ " TEST_ENV_SOURCEKIT_TOOLCHAIN_PATH " ] ,
263
+ setDefault: false ,
264
+ fs)
265
+
266
+ guard let tc = tr. toolchains. first ( where: { tc in tc. path == binPath. parentDirectory } ) else {
267
+ XCTFail ( " couldn't find expected toolchain " )
268
+ return
269
+ }
270
+
271
+ XCTAssertEqual ( tc. identifier, binPath. parentDirectory. asString)
272
+ XCTAssertNil ( tc. clang)
273
+ XCTAssertNil ( tc. clangd)
274
+ XCTAssertNil ( tc. swiftc)
275
+ XCTAssertNotNil ( tc. sourcekitd)
276
+ XCTAssertNil ( tc. libIndexStore)
277
+ }
278
+
231
279
func testFromDirectory( ) {
232
280
// This test uses the real file system because the in-memory system doesn't support marking files executable.
233
281
let fs = localFileSystem
@@ -264,6 +312,14 @@ final class ToolchainRegistryTests: XCTestCase {
264
312
XCTAssertNotNil ( t2. clang)
265
313
XCTAssertNotNil ( t2. clangd)
266
314
XCTAssertNotNil ( t2. swiftc)
315
+
316
+ let tr = ToolchainRegistry ( )
317
+ let t3 = try ! tr. registerToolchain ( path. parentDirectory, fs)
318
+ XCTAssertEqual ( t3. identifier, t2. identifier)
319
+ XCTAssertEqual ( t3. sourcekitd, t2. sourcekitd)
320
+ XCTAssertEqual ( t3. clang, t2. clang)
321
+ XCTAssertEqual ( t3. clangd, t2. clangd)
322
+ XCTAssertEqual ( t3. swiftc, t2. swiftc)
267
323
}
268
324
269
325
func testDylibNames( ) {
0 commit comments