Merge pull request #434 from yonaskolb/test_target

Add TestTarget with parallelizable and randomExecutionOrder
This commit is contained in:
Yonas Kolb
2018-11-04 20:31:32 +11:00
committed by GitHub
10 changed files with 237 additions and 16 deletions
+49 -3
View File
@@ -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 {
+2 -2
View File
@@ -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))
}
}
}
+15 -3
View File
@@ -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") ?? [:]
+8 -5
View File
@@ -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) }