@@ -20,6 +20,7 @@ import { createBuildAllTask } from "../../src/tasks/SwiftTaskProvider";
2020import { Version } from "../../src/utilities/version" ;
2121import { SwiftExecution } from "../../src/tasks/SwiftExecution" ;
2222import { activateExtensionForSuite } from "./utilities/testutilities" ;
23+ import { FolderContext } from "../../src/FolderContext" ;
2324
2425function assertContainsArg ( execution : SwiftExecution , arg : string ) {
2526 assert ( execution ?. args . find ( a => a === arg ) ) ;
@@ -36,39 +37,53 @@ suite("WorkspaceContext Test Suite", () => {
3637 let workspaceContext : WorkspaceContext ;
3738 const packageFolder : vscode . Uri = testAssetUri ( "defaultPackage" ) ;
3839
39- activateExtensionForSuite ( {
40- async setup ( ctx ) {
41- workspaceContext = ctx ;
42- } ,
43- } ) ;
44-
4540 suite ( "Folder Events" , ( ) => {
41+ activateExtensionForSuite ( {
42+ async setup ( ctx ) {
43+ workspaceContext = ctx ;
44+ } ,
45+ // No default assets as we want to verify against a clean workspace.
46+ testAssets : [ ] ,
47+ } ) ;
48+
4649 test ( "Add" , async ( ) => {
47- let count = 0 ;
4850 let observer : vscode . Disposable | undefined ;
51+ const recordedFolders : {
52+ folder : FolderContext | null ;
53+ operation : FolderOperation ;
54+ } [ ] = [ ] ;
55+
4956 try {
50- observer = workspaceContext ?. onDidChangeFolders ( ( { folder, operation } ) => {
51- assert ( folder !== null ) ;
52- assert . strictEqual ( folder ! . swiftPackage . name , "package2" ) ;
53- switch ( operation ) {
54- case FolderOperation . add :
55- count ++ ;
56- break ;
57- }
57+ observer = workspaceContext . onDidChangeFolders ( changedFolderRecord => {
58+ recordedFolders . push ( changedFolderRecord ) ;
5859 } ) ;
60+
5961 const workspaceFolder = vscode . workspace . workspaceFolders ?. values ( ) . next ( ) . value ;
60- if ( ! workspaceFolder ) {
61- throw new Error ( "No workspace folders found in workspace" ) ;
62- }
63- await workspaceContext ?. addPackageFolder ( testAssetUri ( "package2" ) , workspaceFolder ) ;
64- assert . strictEqual ( count , 1 ) ;
62+
63+ assert . ok ( workspaceFolder , "No workspace folders found in workspace" ) ;
64+
65+ await workspaceContext . addPackageFolder ( testAssetUri ( "package2" ) , workspaceFolder ) ;
66+
67+ const foldersNames = recordedFolders . map ( ( { folder } ) => folder ?. swiftPackage . name ) ;
68+ assert . deepStrictEqual ( foldersNames , [ "package2" ] ) ;
69+
70+ const addedCount = recordedFolders . filter (
71+ ( { operation } ) => operation === FolderOperation . add
72+ ) . length ;
73+ assert . strictEqual ( addedCount , 1 , "Expected only one add folder operation" ) ;
6574 } finally {
6675 observer ?. dispose ( ) ;
6776 }
68- } ) . timeout ( 15000 ) ;
77+ } ) . timeout ( 60000 ) ;
6978 } ) ;
7079
7180 suite ( "Tasks" , async function ( ) {
81+ activateExtensionForSuite ( {
82+ async setup ( ctx ) {
83+ workspaceContext = ctx ;
84+ } ,
85+ } ) ;
86+
7287 // Was hitting a timeout in suiteSetup during CI build once in a while
7388 this . timeout ( 5000 ) ;
7489
@@ -158,6 +173,12 @@ suite("WorkspaceContext Test Suite", () => {
158173 } ) ;
159174
160175 suite ( "Toolchain" , ( ) => {
176+ activateExtensionForSuite ( {
177+ async setup ( ctx ) {
178+ workspaceContext = ctx ;
179+ } ,
180+ } ) ;
181+
161182 test ( "get project templates" , async ( ) => {
162183 // This is only supported in swift versions >=5.8.0
163184 const swiftVersion = workspaceContext . toolchain . swiftVersion ;
0 commit comments