mirror of
https://github.com/yonaskolb/XcodeGen.git
synced 2026-03-18 20:02:25 +00:00
Update SpecValidation to validate TargetReference definitions in the Scheme.Test action. Add additional coverate to ProjectSpectTests
This commit is contained in:
@@ -194,24 +194,21 @@ extension Project {
|
||||
}
|
||||
|
||||
for scheme in schemes {
|
||||
for buildTarget in scheme.build.targets {
|
||||
switch buildTarget.target.location {
|
||||
case .local:
|
||||
if getProjectTarget(buildTarget.target.name) == nil {
|
||||
errors.append(.invalidSchemeTarget(scheme: scheme.name, target: buildTarget.target.name))
|
||||
}
|
||||
case .project(let project):
|
||||
if getProjectReference(project) == nil {
|
||||
errors.append(.invalidProjectReference(scheme: scheme.name, reference: project))
|
||||
}
|
||||
}
|
||||
}
|
||||
errors.append(
|
||||
contentsOf: scheme.build.targets.compactMap({ validationError(for: $0.target, in: scheme, action: "build") })
|
||||
)
|
||||
if let action = scheme.run, let config = action.config, getConfig(config) == nil {
|
||||
errors.append(.invalidSchemeConfig(scheme: scheme.name, config: config))
|
||||
}
|
||||
if let action = scheme.test, let config = action.config, getConfig(config) == nil {
|
||||
errors.append(.invalidSchemeConfig(scheme: scheme.name, config: config))
|
||||
}
|
||||
errors.append(
|
||||
contentsOf: scheme.test?.targets.compactMap({ validationError(for: $0.targetReference, in: scheme, action: "test") }) ?? []
|
||||
)
|
||||
errors.append(
|
||||
contentsOf: scheme.test?.coverageTargets.compactMap({ validationError(for: $0, in: scheme, action: "test") }) ?? []
|
||||
)
|
||||
if let action = scheme.profile, let config = action.config, getConfig(config) == nil {
|
||||
errors.append(.invalidSchemeConfig(scheme: scheme.name, config: config))
|
||||
}
|
||||
@@ -233,4 +230,16 @@ extension Project {
|
||||
throw SpecValidationError.ValidationError.invalidXcodeGenVersion(minimumVersion: minimumXcodeGenVersion, version: xcodeGenVersion)
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns a descriptive error if the given target reference was invalid otherwise `nil`.
|
||||
private func validationError(for targetReference: TargetReference, in scheme: Scheme, action: String) -> SpecValidationError.ValidationError? {
|
||||
switch targetReference.location {
|
||||
case .local where getProjectTarget(targetReference.name) == nil:
|
||||
return .invalidSchemeTarget(scheme: scheme.name, target: targetReference.name, action: action)
|
||||
case .project(let project) where getProjectReference(project) == nil:
|
||||
return .invalidProjectReference(scheme: scheme.name, reference: project)
|
||||
case .local, .project:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ public struct SpecValidationError: Error, CustomStringConvertible {
|
||||
case invalidTargetConfigFile(target: String, configFile: String, config: String)
|
||||
case invalidTargetSchemeConfigVariant(target: String, configVariant: String, configType: ConfigType)
|
||||
case invalidTargetSchemeTest(target: String, testTarget: String)
|
||||
case invalidSchemeTarget(scheme: String, target: String)
|
||||
case invalidSchemeTarget(scheme: String, target: String, action: String)
|
||||
case invalidSchemeConfig(scheme: String, config: String)
|
||||
case invalidSwiftPackage(name: String, target: String)
|
||||
case invalidLocalPackage(String)
|
||||
@@ -50,8 +50,8 @@ public struct SpecValidationError: Error, CustomStringConvertible {
|
||||
return "Target \(target.quoted) scheme has invalid test \(test.quoted)"
|
||||
case let .invalidConfigFile(configFile, config):
|
||||
return "Invalid config file \(configFile.quoted) for config \(config.quoted)"
|
||||
case let .invalidSchemeTarget(scheme, target):
|
||||
return "Scheme \(scheme.quoted) has invalid build target \(target.quoted)"
|
||||
case let .invalidSchemeTarget(scheme, target, action):
|
||||
return "Scheme \(scheme.quoted) has invalid \(action) target \(target.quoted)"
|
||||
case let .invalidSchemeConfig(scheme, config):
|
||||
return "Scheme \(scheme.quoted) has invalid build configuration \(config.quoted)"
|
||||
case let .invalidBuildSettingConfig(config):
|
||||
|
||||
Reference in New Issue
Block a user