mirror of
https://github.com/yonaskolb/XcodeGen.git
synced 2026-03-18 20:02:25 +00:00
Merge pull request #434 from yonaskolb/test_target
Add TestTarget with parallelizable and randomExecutionOrder
This commit is contained in:
@@ -89,15 +89,40 @@ public struct Scheme: Equatable {
|
||||
public var config: String?
|
||||
public var gatherCoverageData: Bool
|
||||
public var commandLineArguments: [String: Bool]
|
||||
public var targets: [String]
|
||||
public var targets: [TestTarget]
|
||||
public var preActions: [ExecutionAction]
|
||||
public var postActions: [ExecutionAction]
|
||||
public var environmentVariables: [XCScheme.EnvironmentVariable]
|
||||
|
||||
public struct TestTarget: Equatable, ExpressibleByStringLiteral {
|
||||
public let name: String
|
||||
public var randomExecutionOrder: Bool
|
||||
public var parallelizable: Bool
|
||||
|
||||
public init(
|
||||
name: String,
|
||||
randomExecutionOrder: Bool = false,
|
||||
parallelizable: Bool = false
|
||||
) {
|
||||
self.name = name
|
||||
self.randomExecutionOrder = randomExecutionOrder
|
||||
self.parallelizable = parallelizable
|
||||
}
|
||||
|
||||
public init(stringLiteral value: String) {
|
||||
name = value
|
||||
randomExecutionOrder = false
|
||||
parallelizable = false
|
||||
}
|
||||
}
|
||||
|
||||
public init(
|
||||
config: String,
|
||||
gatherCoverageData: Bool = false,
|
||||
randomExecutionOrder: Bool = false,
|
||||
parallelizable: Bool = false,
|
||||
commandLineArguments: [String: Bool] = [:],
|
||||
targets: [String] = [],
|
||||
targets: [TestTarget] = [],
|
||||
preActions: [ExecutionAction] = [],
|
||||
postActions: [ExecutionAction] = [],
|
||||
environmentVariables: [XCScheme.EnvironmentVariable] = []
|
||||
@@ -210,13 +235,34 @@ extension Scheme.Test: JSONObjectConvertible {
|
||||
config = jsonDictionary.json(atKeyPath: "config")
|
||||
gatherCoverageData = jsonDictionary.json(atKeyPath: "gatherCoverageData") ?? false
|
||||
commandLineArguments = jsonDictionary.json(atKeyPath: "commandLineArguments") ?? [:]
|
||||
targets = jsonDictionary.json(atKeyPath: "targets") ?? []
|
||||
if let targets = jsonDictionary["targets"] as? [Any] {
|
||||
self.targets = try targets.compactMap { target in
|
||||
if let string = target as? String {
|
||||
return TestTarget(name: string)
|
||||
} else if let dictionary = target as? JSONDictionary {
|
||||
return try TestTarget(jsonDictionary: dictionary)
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
} else {
|
||||
targets = []
|
||||
}
|
||||
preActions = jsonDictionary.json(atKeyPath: "preActions") ?? []
|
||||
postActions = jsonDictionary.json(atKeyPath: "postActions") ?? []
|
||||
environmentVariables = try XCScheme.EnvironmentVariable.parseAll(jsonDictionary: jsonDictionary)
|
||||
}
|
||||
}
|
||||
|
||||
extension Scheme.Test.TestTarget: JSONObjectConvertible {
|
||||
|
||||
public init(jsonDictionary: JSONDictionary) throws {
|
||||
name = try jsonDictionary.json(atKeyPath: "name")
|
||||
randomExecutionOrder = jsonDictionary.json(atKeyPath: "randomExecutionOrder") ?? false
|
||||
parallelizable = jsonDictionary.json(atKeyPath: "parallelizable") ?? false
|
||||
}
|
||||
}
|
||||
|
||||
extension Scheme.Profile: JSONObjectConvertible {
|
||||
|
||||
public init(jsonDictionary: JSONDictionary) throws {
|
||||
|
||||
@@ -110,8 +110,8 @@ extension Project {
|
||||
}
|
||||
|
||||
for testTarget in scheme.testTargets {
|
||||
if getTarget(testTarget) == nil {
|
||||
errors.append(.invalidTargetSchemeTest(target: target.name, testTarget: testTarget))
|
||||
if getTarget(testTarget.name) == nil {
|
||||
errors.append(.invalidTargetSchemeTest(target: target.name, testTarget: testTarget.name))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ import JSONUtilities
|
||||
import xcodeproj
|
||||
|
||||
public struct TargetScheme: Equatable {
|
||||
public var testTargets: [String]
|
||||
public var testTargets: [Scheme.Test.TestTarget]
|
||||
public var configVariants: [String]
|
||||
public var gatherCoverageData: Bool
|
||||
public var commandLineArguments: [String: Bool]
|
||||
@@ -12,7 +12,7 @@ public struct TargetScheme: Equatable {
|
||||
public var postActions: [Scheme.ExecutionAction]
|
||||
|
||||
public init(
|
||||
testTargets: [String] = [],
|
||||
testTargets: [Scheme.Test.TestTarget] = [],
|
||||
configVariants: [String] = [],
|
||||
gatherCoverageData: Bool = false,
|
||||
commandLineArguments: [String: Bool] = [:],
|
||||
@@ -33,7 +33,19 @@ public struct TargetScheme: Equatable {
|
||||
extension TargetScheme: JSONObjectConvertible {
|
||||
|
||||
public init(jsonDictionary: JSONDictionary) throws {
|
||||
testTargets = jsonDictionary.json(atKeyPath: "testTargets") ?? []
|
||||
if let targets = jsonDictionary["testTargets"] as? [Any] {
|
||||
self.testTargets = try targets.compactMap { target in
|
||||
if let string = target as? String {
|
||||
return .init(name: string)
|
||||
} else if let dictionary = target as? JSONDictionary {
|
||||
return try .init(jsonDictionary: dictionary)
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
} else {
|
||||
testTargets = []
|
||||
}
|
||||
configVariants = jsonDictionary.json(atKeyPath: "configVariants") ?? []
|
||||
gatherCoverageData = jsonDictionary.json(atKeyPath: "gatherCoverageData") ?? false
|
||||
commandLineArguments = jsonDictionary.json(atKeyPath: "commandLineArguments") ?? [:]
|
||||
|
||||
@@ -95,9 +95,9 @@ public class SchemeGenerator {
|
||||
return XCScheme.BuildAction.Entry(buildableReference: buildableReference, buildFor: buildTarget.buildTypes)
|
||||
}
|
||||
|
||||
let testTargetNames = scheme.test?.targets ?? []
|
||||
let testBuildTargets = testTargetNames.map {
|
||||
Scheme.BuildTarget(target: $0, buildTypes: BuildType.testOnly)
|
||||
let testTargets = scheme.test?.targets ?? []
|
||||
let testBuildTargets = testTargets.map {
|
||||
Scheme.BuildTarget(target: $0.name, buildTypes: BuildType.testOnly)
|
||||
}
|
||||
|
||||
let testBuildTargetEntries = testBuildTargets.map(getBuildEntry)
|
||||
@@ -128,8 +128,11 @@ public class SchemeGenerator {
|
||||
buildImplicitDependencies: scheme.build.buildImplicitDependencies
|
||||
)
|
||||
|
||||
let testables = testBuildTargetEntries.map {
|
||||
XCScheme.TestableReference(skipped: false, buildableReference: $0.buildableReference)
|
||||
let testables = zip(testTargets, testBuildTargetEntries).map { testTarget, testBuilEntries in
|
||||
XCScheme.TestableReference(skipped: false,
|
||||
parallelizable: testTarget.parallelizable,
|
||||
randomExecutionOrdering: testTarget.randomExecutionOrder,
|
||||
buildableReference: testBuilEntries.buildableReference)
|
||||
}
|
||||
|
||||
let testCommandLineArgs = scheme.test.map { XCScheme.CommandLineArguments($0.commandLineArguments) }
|
||||
|
||||
Reference in New Issue
Block a user