Skip to content

Commit 3fe0850

Browse files
authored
Take in account direct test target dependencies in turbo mode (#86)
1 parent 4c2a4d0 commit 3fe0850

File tree

2 files changed

+51
-8
lines changed

2 files changed

+51
-8
lines changed

Sources/DependencyCalculator/DependencyCalculator.swift

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,18 @@ import Workspace
1010
public extension WorkspaceInfo {
1111
func affectedTargets(changedFiles: Set<Path>,
1212
incldueIndirectlyAffected: Bool = true) -> Set<TargetIdentity> {
13+
let directlyChanged = directlyChangedTargets(changedFiles: changedFiles)
14+
15+
if incldueIndirectlyAffected {
16+
let indirectlyAffected = indirectlyAffectedTargets(targets: directlyChanged)
17+
return directlyChanged.union(indirectlyAffected)
18+
}
19+
20+
let directlyAffected = directlyAffectedTargets(targets: directlyChanged)
21+
return directlyChanged.union(directlyAffected)
22+
}
23+
24+
private func directlyChangedTargets(changedFiles: Set<Path>) -> Set<TargetIdentity> {
1325
var result = Set<TargetIdentity>()
1426

1527
for path in changedFiles {
@@ -21,13 +33,18 @@ public extension WorkspaceInfo {
2133
logger.info("Changed file at \(path) appears not to belong to any target")
2234
}
2335
}
24-
if incldueIndirectlyAffected {
25-
let indirectlyAffected = indirectlyAffectedTargets(targets: result)
26-
return result.union(indirectlyAffected)
27-
}
28-
else {
29-
return result
36+
37+
return result
38+
}
39+
40+
func directlyAffectedTargets(targets: Set<TargetIdentity>) -> Set<TargetIdentity> {
41+
var result = Set<TargetIdentity>()
42+
43+
for targetAffected in targets {
44+
result = result.union(dependencyStructure.affected(by: targetAffected))
3045
}
46+
47+
return result
3148
}
3249

3350
internal func targetForFolder(_ path: Path) -> TargetIdentity? {

Tests/SelectiveTestingTests/SelectiveTestingProjectTests.swift

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,9 @@ struct SelectiveTestingProjectTests {
8484
// then
8585
let result = try await tool.run()
8686
#expect(result == Set([
87-
testTool.mainProjectMainTarget()
87+
testTool.mainProjectMainTarget(),
88+
testTool.mainProjectTests(),
89+
testTool.mainProjectUITests(),
8890
]))
8991
}
9092

@@ -125,7 +127,31 @@ struct SelectiveTestingProjectTests {
125127
// then
126128
let result = try await tool.run()
127129
#expect(result == Set([
128-
testTool.mainProjectMainTarget()
130+
testTool.mainProjectMainTarget(),
131+
testTool.mainProjectTests(),
132+
testTool.mainProjectUITests(),
133+
]))
134+
}
135+
136+
@Test
137+
func projectTargetDependencyChange_turbo() async throws {
138+
// given
139+
let testTool = try IntegrationTestTool()
140+
defer { try? testTool.tearDown() }
141+
142+
let tool = try testTool.createSUT(config: nil,
143+
basePath: "ExampleProject.xcodeproj",
144+
turbo: true)
145+
146+
// when
147+
try testTool.changeFile(at: testTool.projectPath + "ExmapleTargetLibrary/ExampleTargetLibrary.swift")
148+
149+
// then
150+
let result = try await tool.run()
151+
#expect(result == Set([
152+
testTool.mainProjectLibrary(),
153+
testTool.mainProjectMainTarget(),
154+
testTool.mainProjectLibraryTests(),
129155
]))
130156
}
131157

0 commit comments

Comments
 (0)