Add validation for project reference

This commit is contained in:
Yuta Saito 2019-10-27 09:00:21 +09:00
parent 848dfe28ba
commit c4305dd02e
3 changed files with 21 additions and 3 deletions

View File

@ -180,9 +180,15 @@ extension Project {
for scheme in schemes {
for buildTarget in scheme.build.targets {
guard buildTarget.target.location == .local else { continue }
if getProjectTarget(buildTarget.target.name) == nil {
errors.append(.invalidSchemeTarget(scheme: scheme.name, target: buildTarget.target.name))
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))
}
}
}
if let action = scheme.run, let config = action.config, getConfig(config) == nil {

View File

@ -29,6 +29,7 @@ public struct SpecValidationError: Error, CustomStringConvertible {
case missingConfigForTargetScheme(target: String, configType: ConfigType)
case missingDefaultConfig(configName: String)
case invalidPerConfigSettings
case invalidProjectReference(scheme: String, reference: String)
case deprecatedUsageOfPlaceholder(placeholderName: String)
public var description: String {
@ -73,6 +74,8 @@ public struct SpecValidationError: Error, CustomStringConvertible {
return "Default configuration \(name) doesn't exist"
case .invalidPerConfigSettings:
return "Settings that are for a specific config must go in \"configs\". \"base\" can be used for common settings"
case let .invalidProjectReference(scheme, project):
return "Scheme \(scheme.quoted) has invalid project reference \(project.quoted)"
case let .deprecatedUsageOfPlaceholder(placeholderName: placeholderName):
return "Usage of $\(placeholderName) is deprecated and will stop working in an upcoming version. Use ${\(placeholderName)} instead."
}

View File

@ -217,6 +217,15 @@ class ProjectSpecTests: XCTestCase {
try expectValidationError(project, .invalidSchemeConfig(scheme: "scheme1", config: "releaseInvalid"))
}
$0.it("fails with invalid project reference") {
var project = baseProject
project.schemes = [Scheme(
name: "scheme1",
build: .init(targets: [.init(target: "invalidProjectRef/target1")])
)]
try expectValidationError(project, .invalidProjectReference(scheme: "scheme1", reference: "invalidProjectRef"))
}
$0.it("allows missing optional file") {
var project = baseProject
project.targets = [Target(