Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d69b028

Browse files
committed
Update SpecValidation to validate TargetReference definitions in the Scheme.Test action. Add additional coverate to ProjectSpectTests
1 parent bb8bcec commit d69b028

File tree

3 files changed

+28
-16
lines changed

3 files changed

+28
-16
lines changed

Sources/ProjectSpec/SpecValidation.swift

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

Sources/ProjectSpec/SpecValidationError.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public struct SpecValidationError: Error, CustomStringConvertible {
1616
case invalidTargetConfigFile(target: String, configFile: String, config: String)
1717
case invalidTargetSchemeConfigVariant(target: String, configVariant: String, configType: ConfigType)
1818
case invalidTargetSchemeTest(target: String, testTarget: String)
19-
case invalidSchemeTarget(scheme: String, target: String)
19+
case invalidSchemeTarget(scheme: String, target: String, action: String)
2020
case invalidSchemeConfig(scheme: String, config: String)
2121
case invalidSwiftPackage(name: String, target: String)
2222
case invalidLocalPackage(String)
@@ -50,8 +50,8 @@ public struct SpecValidationError: Error, CustomStringConvertible {
5050
return "Target \(target.quoted) scheme has invalid test \(test.quoted)"
5151
case let .invalidConfigFile(configFile, config):
5252
return "Invalid config file \(configFile.quoted) for config \(config.quoted)"
53-
case let .invalidSchemeTarget(scheme, target):
54-
return "Scheme \(scheme.quoted) has invalid build target \(target.quoted)"
53+
case let .invalidSchemeTarget(scheme, target, action):
54+
return "Scheme \(scheme.quoted) has invalid \(action) target \(target.quoted)"
5555
case let .invalidSchemeConfig(scheme, config):
5656
return "Scheme \(scheme.quoted) has invalid build configuration \(config.quoted)"
5757
case let .invalidBuildSettingConfig(config):

Tests/ProjectSpecTests/ProjectSpecTests.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,12 +209,15 @@ class ProjectSpecTests: XCTestCase {
209209
name: "scheme1",
210210
build: .init(targets: [.init(target: "invalidTarget")]),
211211
run: .init(config: "debugInvalid"),
212+
test: .init(config: "testInvalid", coverageTargets: ["SubProject/Yams"], targets: [.init(targetReference: "invalidTarget")]),
212213
archive: .init(config: "releaseInvalid")
213214
)]
214215

215-
try expectValidationError(project, .invalidSchemeTarget(scheme: "scheme1", target: "invalidTarget"))
216+
try expectValidationError(project, .invalidSchemeTarget(scheme: "scheme1", target: "invalidTarget", action: "build"))
216217
try expectValidationError(project, .invalidSchemeConfig(scheme: "scheme1", config: "debugInvalid"))
217218
try expectValidationError(project, .invalidSchemeConfig(scheme: "scheme1", config: "releaseInvalid"))
219+
try expectValidationError(project, .invalidSchemeTarget(scheme: "scheme1", target: "invalidTarget", action: "test"))
220+
try expectValidationError(project, .invalidProjectReference(scheme: "scheme1", reference: "SubProject"))
218221
}
219222

220223
$0.it("fails with invalid project reference in scheme") {

0 commit comments

Comments
 (0)