@@ -194,24 +194,21 @@ extension Project {
194194 }
195195
196196 for scheme in schemes {
197- for buildTarget in scheme. build. targets {
198- switch buildTarget. target. location {
199- case . local:
200- if getProjectTarget ( buildTarget. target. name) == nil {
201- errors. append ( . invalidSchemeTarget( scheme: scheme. name, target: buildTarget. target. name) )
202- }
203- case . project( let project) :
204- if getProjectReference ( project) == nil {
205- errors. append ( . invalidProjectReference( scheme: scheme. name, reference: project) )
206- }
207- }
208- }
197+ errors. append (
198+ contentsOf: scheme. build. targets. compactMap ( { validationError ( for: $0. target, in: scheme, action: " build " ) } )
199+ )
209200 if let action = scheme. run, let config = action. config, getConfig ( config) == nil {
210201 errors. append ( . invalidSchemeConfig( scheme: scheme. name, config: config) )
211202 }
212203 if let action = scheme. test, let config = action. config, getConfig ( config) == nil {
213204 errors. append ( . invalidSchemeConfig( scheme: scheme. name, config: config) )
214205 }
206+ errors. append (
207+ contentsOf: scheme. test? . targets. compactMap ( { validationError ( for: $0. targetReference, in: scheme, action: " test " ) } ) ?? [ ]
208+ )
209+ errors. append (
210+ contentsOf: scheme. test? . coverageTargets. compactMap ( { validationError ( for: $0, in: scheme, action: " test " ) } ) ?? [ ]
211+ )
215212 if let action = scheme. profile, let config = action. config, getConfig ( config) == nil {
216213 errors. append ( . invalidSchemeConfig( scheme: scheme. name, config: config) )
217214 }
@@ -233,4 +230,16 @@ extension Project {
233230 throw SpecValidationError . ValidationError. invalidXcodeGenVersion ( minimumVersion: minimumXcodeGenVersion, version: xcodeGenVersion)
234231 }
235232 }
233+
234+ /// Returns a descriptive error if the given target reference was invalid otherwise `nil`.
235+ private func validationError( for targetReference: TargetReference , in scheme: Scheme , action: String ) -> SpecValidationError . ValidationError ? {
236+ switch targetReference. location {
237+ case . local where getProjectTarget ( targetReference. name) == nil :
238+ return . invalidSchemeTarget( scheme: scheme. name, target: targetReference. name, action: action)
239+ case . project( let project) where getProjectReference ( project) == nil :
240+ return . invalidProjectReference( scheme: scheme. name, reference: project)
241+ case . local, . project:
242+ return nil
243+ }
244+ }
236245}
0 commit comments