@@ -92,4 +92,67 @@ struct DependencyCalculatorTests {
9292 // then
9393 #expect( affected == Set ( [ module, moduleTests, mainApp, mainAppTests] ) )
9494 }
95+
96+ @Test
97+ func filtersUnreferencedPackagesWhenWorkspaceHasProjects( ) throws {
98+ let project = TargetIdentity . project ( path: Path ( " /workspace/App.xcodeproj " ) ,
99+ targetName: " App " ,
100+ testTarget: false )
101+ let usedPackage = TargetIdentity . package ( path: Path ( " /workspace/Packages/Used " ) ,
102+ targetName: " UsedTarget " ,
103+ testTarget: false )
104+ let unusedPackage = TargetIdentity . package ( path: Path ( " /workspace/Packages/Unused " ) ,
105+ targetName: " UnusedTarget " ,
106+ testTarget: false )
107+
108+ let files : [ TargetIdentity : Set < Path > ] = [
109+ project: [ Path ( " /workspace/App/App.swift " ) ] ,
110+ usedPackage: [ Path ( " /workspace/Packages/Used/Source.swift " ) ] ,
111+ unusedPackage: [ Path ( " /workspace/Packages/Unused/Source.swift " ) ]
112+ ]
113+
114+ let dependencies = DependencyGraph ( dependsOn: [
115+ project: Set ( [ usedPackage] ) ,
116+ usedPackage: Set ( )
117+ ] )
118+
119+ let info = WorkspaceInfo ( files: files,
120+ folders: [ : ] ,
121+ dependencyStructure: dependencies,
122+ candidateTestPlan: nil )
123+
124+ let pruned = info. pruningDisconnectedTargets ( )
125+
126+ #expect( pruned. files. keys. contains ( project) )
127+ #expect( pruned. files. keys. contains ( usedPackage) )
128+ #expect( !pruned. files. keys. contains ( unusedPackage) )
129+ }
130+
131+ @Test
132+ func keepsPackagesWhenNoProjectsPresent( ) throws {
133+ let packageA = TargetIdentity . package ( path: Path ( " /workspace/Packages/A " ) ,
134+ targetName: " ATarget " ,
135+ testTarget: false )
136+ let packageB = TargetIdentity . package ( path: Path ( " /workspace/Packages/B " ) ,
137+ targetName: " BTarget " ,
138+ testTarget: false )
139+
140+ let files : [ TargetIdentity : Set < Path > ] = [
141+ packageA: [ Path ( " /workspace/Packages/A/file.swift " ) ] ,
142+ packageB: [ Path ( " /workspace/Packages/B/file.swift " ) ]
143+ ]
144+
145+ let dependencies = DependencyGraph ( dependsOn: [
146+ packageA: Set ( [ packageB] )
147+ ] )
148+
149+ let info = WorkspaceInfo ( files: files,
150+ folders: [ : ] ,
151+ dependencyStructure: dependencies,
152+ candidateTestPlan: nil )
153+
154+ let pruned = info. pruningDisconnectedTargets ( )
155+
156+ #expect( pruned. files. keys == files. keys)
157+ }
95158}
0 commit comments