@@ -296,4 +296,104 @@ suite("SwiftToolchain Unit Test Suite", () => {
296
296
await expect ( SwiftToolchain . findXcodeInstalls ( ) ) . to . eventually . be . empty ;
297
297
} ) ;
298
298
} ) ;
299
+
300
+ suite ( "getSwiftlyToolchainInstalls()" , ( ) => {
301
+ const mockedEnv = mockGlobalValue ( process , "env" ) ;
302
+
303
+ test ( "returns installed toolchains on Linux" , async ( ) => {
304
+ mockedPlatform . setValue ( "linux" ) ;
305
+ const mockHomeDir = "/home/user/.swiftly" ;
306
+ mockedEnv . setValue ( { SWIFTLY_HOME_DIR : mockHomeDir } ) ;
307
+
308
+ mockFS ( {
309
+ [ path . join ( mockHomeDir , "config.json" ) ] : JSON . stringify ( {
310
+ installedToolchains : [ "swift-5.9.0" , "swift-6.0.0" ] ,
311
+ } ) ,
312
+ } ) ;
313
+
314
+ const toolchains = await SwiftToolchain . getSwiftlyToolchainInstalls ( ) ;
315
+ expect ( toolchains ) . to . deep . equal ( [
316
+ path . join ( mockHomeDir , "toolchains" , "swift-5.9.0" ) ,
317
+ path . join ( mockHomeDir , "toolchains" , "swift-6.0.0" ) ,
318
+ ] ) ;
319
+ } ) ;
320
+
321
+ test ( "returns installed toolchains on macOS" , async ( ) => {
322
+ mockedPlatform . setValue ( "darwin" ) ;
323
+ const mockHomeDir = "/Users/user/.swiftly" ;
324
+ mockedEnv . setValue ( { SWIFTLY_HOME_DIR : mockHomeDir } ) ;
325
+
326
+ mockFS ( {
327
+ [ path . join ( mockHomeDir , "config.json" ) ] : JSON . stringify ( {
328
+ installedToolchains : [ "swift-5.9.0" , "swift-6.0.0" ] ,
329
+ } ) ,
330
+ } ) ;
331
+
332
+ const toolchains = await SwiftToolchain . getSwiftlyToolchainInstalls ( ) ;
333
+ expect ( toolchains ) . to . deep . equal ( [
334
+ path . join ( mockHomeDir , "toolchains" , "swift-5.9.0" ) ,
335
+ path . join ( mockHomeDir , "toolchains" , "swift-6.0.0" ) ,
336
+ ] ) ;
337
+ } ) ;
338
+
339
+ test ( "returns empty array when SWIFTLY_HOME_DIR is not set" , async ( ) => {
340
+ mockedPlatform . setValue ( "linux" ) ;
341
+ mockedEnv . setValue ( { } ) ;
342
+
343
+ const toolchains = await SwiftToolchain . getSwiftlyToolchainInstalls ( ) ;
344
+ expect ( toolchains ) . to . be . empty ;
345
+ } ) ;
346
+
347
+ test ( "returns empty array when config file does not exist" , async ( ) => {
348
+ mockedPlatform . setValue ( "linux" ) ;
349
+ const mockHomeDir = "/home/user/.swiftly" ;
350
+ mockedEnv . setValue ( { SWIFTLY_HOME_DIR : mockHomeDir } ) ;
351
+
352
+ mockFS ( { } ) ;
353
+
354
+ await expect ( SwiftToolchain . getSwiftlyToolchainInstalls ( ) ) . to . be . rejectedWith (
355
+ "Failed to retrieve Swiftly installations from disk."
356
+ ) ;
357
+ } ) ;
358
+
359
+ test ( "returns empty array when config has no installedToolchains" , async ( ) => {
360
+ mockedPlatform . setValue ( "linux" ) ;
361
+ const mockHomeDir = "/home/user/.swiftly" ;
362
+ mockedEnv . setValue ( { SWIFTLY_HOME_DIR : mockHomeDir } ) ;
363
+
364
+ mockFS ( {
365
+ [ path . join ( mockHomeDir , "config.json" ) ] : JSON . stringify ( {
366
+ someOtherProperty : "value" ,
367
+ } ) ,
368
+ } ) ;
369
+
370
+ const toolchains = await SwiftToolchain . getSwiftlyToolchainInstalls ( ) ;
371
+ expect ( toolchains ) . to . be . empty ;
372
+ } ) ;
373
+
374
+ test ( "returns empty array on Windows" , async ( ) => {
375
+ mockedPlatform . setValue ( "win32" ) ;
376
+ const toolchains = await SwiftToolchain . getSwiftlyToolchainInstalls ( ) ;
377
+ expect ( toolchains ) . to . be . empty ;
378
+ } ) ;
379
+
380
+ test ( "filters out non-string toolchain entries" , async ( ) => {
381
+ mockedPlatform . setValue ( "linux" ) ;
382
+ const mockHomeDir = "/home/user/.swiftly" ;
383
+ mockedEnv . setValue ( { SWIFTLY_HOME_DIR : mockHomeDir } ) ;
384
+
385
+ mockFS ( {
386
+ [ path . join ( mockHomeDir , "config.json" ) ] : JSON . stringify ( {
387
+ installedToolchains : [ "swift-5.9.0" , null , "swift-6.0.0" , 123 , "swift-6.1.0" ] ,
388
+ } ) ,
389
+ } ) ;
390
+
391
+ const toolchains = await SwiftToolchain . getSwiftlyToolchainInstalls ( ) ;
392
+ expect ( toolchains ) . to . deep . equal ( [
393
+ path . join ( mockHomeDir , "toolchains" , "swift-5.9.0" ) ,
394
+ path . join ( mockHomeDir , "toolchains" , "swift-6.0.0" ) ,
395
+ path . join ( mockHomeDir , "toolchains" , "swift-6.1.0" ) ,
396
+ ] ) ;
397
+ } ) ;
398
+ } ) ;
299
399
} ) ;
0 commit comments