@@ -105,21 +105,25 @@ extension BuildPlan {
105
105
106
106
/// Generates a synthesized test entry point target, consisting of a single "main" file which calls the test entry
107
107
/// point API and leverages the test discovery target to reference which tests to run.
108
- func generateSynthesizedEntryPointTarget( discoveryTarget: SwiftTarget , discoveryResolvedTarget: ResolvedTarget ) throws -> SwiftTargetBuildDescription {
108
+ func generateSynthesizedEntryPointTarget(
109
+ swiftTargetDependencies: [ Target . Dependency ] ,
110
+ resolvedTargetDependencies: [ ResolvedTarget . Dependency ]
111
+ ) throws -> SwiftTargetBuildDescription {
109
112
let entryPointDerivedDir = buildParameters. buildPath. appending ( components: " \( testProduct. name) .derived " )
110
- let entryPointMainFile = entryPointDerivedDir. appending ( component: TestEntryPointTool . mainFileName)
113
+ let entryPointMainFileName = TestEntryPointTool . mainFileName ( for: buildParameters. testingParameters. library)
114
+ let entryPointMainFile = entryPointDerivedDir. appending ( component: entryPointMainFileName)
111
115
let entryPointSources = Sources ( paths: [ entryPointMainFile] , root: entryPointDerivedDir)
112
116
113
117
let entryPointTarget = SwiftTarget (
114
118
name: testProduct. name,
115
119
type: . library,
116
- dependencies: testProduct. underlyingProduct. targets. map { . target( $0, conditions: [ ] ) } + [ . target ( discoveryTarget , conditions : [ ] ) ] ,
120
+ dependencies: testProduct. underlyingProduct. targets. map { . target( $0, conditions: [ ] ) } + swiftTargetDependencies ,
117
121
packageAccess: true , // test target is allowed access to package decls
118
122
testEntryPointSources: entryPointSources
119
123
)
120
124
let entryPointResolvedTarget = ResolvedTarget (
121
125
target: entryPointTarget,
122
- dependencies: testProduct. targets. map { . target( $0, conditions: [ ] ) } + [ . target ( discoveryResolvedTarget , conditions : [ ] ) ] ,
126
+ dependencies: testProduct. targets. map { . target( $0, conditions: [ ] ) } + resolvedTargetDependencies ,
123
127
defaultLocalization: testProduct. defaultLocalization,
124
128
supportedPlatforms: testProduct. supportedPlatforms,
125
129
platformVersionProvider: testProduct. platformVersionProvider
@@ -135,21 +139,34 @@ extension BuildPlan {
135
139
)
136
140
}
137
141
142
+ let discoveryTargets : ( target: SwiftTarget , resolved: ResolvedTarget , buildDescription: SwiftTargetBuildDescription ) ?
143
+ let swiftTargetDependencies : [ Target . Dependency ]
144
+ let resolvedTargetDependencies : [ ResolvedTarget . Dependency ]
145
+
146
+ switch buildParameters. testingParameters. library {
147
+ case . xctest:
148
+ discoveryTargets = try generateDiscoveryTargets ( )
149
+ swiftTargetDependencies = [ . target( discoveryTargets!. target, conditions: [ ] ) ]
150
+ resolvedTargetDependencies = [ . target( discoveryTargets!. resolved, conditions: [ ] ) ]
151
+ case . swiftTesting:
152
+ discoveryTargets = nil
153
+ swiftTargetDependencies = testProduct. targets. map { . target( $0. underlyingTarget, conditions: [ ] ) }
154
+ resolvedTargetDependencies = testProduct. targets. map { . target( $0, conditions: [ ] ) }
155
+ }
156
+
138
157
if let entryPointResolvedTarget = testProduct. testEntryPointTarget {
139
158
if isEntryPointPathSpecifiedExplicitly || explicitlyEnabledDiscovery {
140
- let discoveryTargets = try generateDiscoveryTargets ( )
141
-
142
159
if isEntryPointPathSpecifiedExplicitly {
143
160
// Allow using the explicitly-specified test entry point target, but still perform test discovery and thus declare a dependency on the discovery targets.
144
161
let entryPointTarget = SwiftTarget (
145
162
name: entryPointResolvedTarget. underlyingTarget. name,
146
- dependencies: entryPointResolvedTarget. underlyingTarget. dependencies + [ . target ( discoveryTargets . target , conditions : [ ] ) ] ,
163
+ dependencies: entryPointResolvedTarget. underlyingTarget. dependencies + swiftTargetDependencies ,
147
164
packageAccess: entryPointResolvedTarget. packageAccess,
148
165
testEntryPointSources: entryPointResolvedTarget. underlyingTarget. sources
149
166
)
150
167
let entryPointResolvedTarget = ResolvedTarget (
151
168
target: entryPointTarget,
152
- dependencies: entryPointResolvedTarget. dependencies + [ . target ( discoveryTargets . resolved , conditions : [ ] ) ] ,
169
+ dependencies: entryPointResolvedTarget. dependencies + resolvedTargetDependencies ,
153
170
defaultLocalization: testProduct. defaultLocalization,
154
171
supportedPlatforms: testProduct. supportedPlatforms,
155
172
platformVersionProvider: testProduct. platformVersionProvider
@@ -164,11 +181,14 @@ extension BuildPlan {
164
181
observabilityScope: observabilityScope
165
182
)
166
183
167
- result. append ( ( testProduct, discoveryTargets. buildDescription, entryPointTargetBuildDescription) )
184
+ result. append ( ( testProduct, discoveryTargets? . buildDescription, entryPointTargetBuildDescription) )
168
185
} else {
169
186
// Ignore test entry point and synthesize one, declaring a dependency on the test discovery targets created above.
170
- let entryPointTargetBuildDescription = try generateSynthesizedEntryPointTarget ( discoveryTarget: discoveryTargets. target, discoveryResolvedTarget: discoveryTargets. resolved)
171
- result. append ( ( testProduct, discoveryTargets. buildDescription, entryPointTargetBuildDescription) )
187
+ let entryPointTargetBuildDescription = try generateSynthesizedEntryPointTarget (
188
+ swiftTargetDependencies: swiftTargetDependencies,
189
+ resolvedTargetDependencies: resolvedTargetDependencies
190
+ )
191
+ result. append ( ( testProduct, discoveryTargets? . buildDescription, entryPointTargetBuildDescription) )
172
192
}
173
193
} else {
174
194
// Use the test entry point as-is, without performing test discovery.
@@ -185,9 +205,11 @@ extension BuildPlan {
185
205
}
186
206
} else {
187
207
// Synthesize a test entry point target, declaring a dependency on the test discovery targets.
188
- let discoveryTargets = try generateDiscoveryTargets ( )
189
- let entryPointTargetBuildDescription = try generateSynthesizedEntryPointTarget ( discoveryTarget: discoveryTargets. target, discoveryResolvedTarget: discoveryTargets. resolved)
190
- result. append ( ( testProduct, discoveryTargets. buildDescription, entryPointTargetBuildDescription) )
208
+ let entryPointTargetBuildDescription = try generateSynthesizedEntryPointTarget (
209
+ swiftTargetDependencies: swiftTargetDependencies,
210
+ resolvedTargetDependencies: resolvedTargetDependencies
211
+ )
212
+ result. append ( ( testProduct, discoveryTargets? . buildDescription, entryPointTargetBuildDescription) )
191
213
}
192
214
}
193
215
0 commit comments