Add Testable instead of Target in TestAction
This commit is contained in:
parent
8635579dbd
commit
f2a72e3382
|
@ -71,7 +71,7 @@ public struct BuildAction: Equatable, Codable {
|
|||
// MARK: - TestAction
|
||||
|
||||
public struct TestAction: Equatable, Codable {
|
||||
public let targets: [String]
|
||||
public let targets: [TestableTarget]
|
||||
public let arguments: Arguments?
|
||||
public let configurationName: String
|
||||
public let coverage: Bool
|
||||
|
@ -79,7 +79,7 @@ public struct TestAction: Equatable, Codable {
|
|||
public let preActions: [ExecutionAction]
|
||||
public let postActions: [ExecutionAction]
|
||||
|
||||
public init(targets: [String],
|
||||
public init(targets: [TestableTarget] = [],
|
||||
arguments: Arguments? = nil,
|
||||
configurationName: String,
|
||||
coverage: Bool = false,
|
||||
|
@ -95,7 +95,7 @@ public struct TestAction: Equatable, Codable {
|
|||
self.codeCoverageTargets = codeCoverageTargets
|
||||
}
|
||||
|
||||
public init(targets: [String],
|
||||
public init(targets: [TestableTarget],
|
||||
arguments: Arguments? = nil,
|
||||
config: PresetBuildConfiguration = .debug,
|
||||
coverage: Bool = false,
|
||||
|
@ -112,6 +112,24 @@ public struct TestAction: Equatable, Codable {
|
|||
}
|
||||
}
|
||||
|
||||
public struct TestableTarget: Equatable, Hashable, Codable, ExpressibleByStringLiteral {
|
||||
public let target: String
|
||||
public let isSkipped: Bool
|
||||
public let isParallelizable: Bool
|
||||
public let isRandomExecutionOrdering: Bool
|
||||
|
||||
public init(target: String, skipped: Bool = false, parallelizable: Bool = false, randomExecutionOrdering: Bool = false) {
|
||||
self.target = target
|
||||
self.isSkipped = skipped
|
||||
self.isParallelizable = parallelizable
|
||||
self.isRandomExecutionOrdering = randomExecutionOrdering
|
||||
}
|
||||
|
||||
public init(stringLiteral value: String) {
|
||||
self.init(target: value)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - RunAction
|
||||
|
||||
public struct RunAction: Equatable, Codable {
|
||||
|
|
|
@ -114,7 +114,7 @@ public class BuildAction: Equatable {
|
|||
public class TestAction: Equatable {
|
||||
// MARK: - Attributes
|
||||
|
||||
public let targets: [String]
|
||||
public let targets: [TestableTarget]
|
||||
public let arguments: Arguments?
|
||||
public let configurationName: String
|
||||
public let coverage: Bool
|
||||
|
@ -124,7 +124,7 @@ public class TestAction: Equatable {
|
|||
|
||||
// MARK: - Init
|
||||
|
||||
public init(targets: [String] = [],
|
||||
public init(targets: [TestableTarget] = [],
|
||||
arguments: Arguments? = nil,
|
||||
configurationName: String,
|
||||
coverage: Bool = false,
|
||||
|
@ -153,6 +153,20 @@ public class TestAction: Equatable {
|
|||
}
|
||||
}
|
||||
|
||||
public struct TestableTarget: Equatable, Hashable {
|
||||
public let target: String
|
||||
public let isSkipped: Bool
|
||||
public let isParallelizable: Bool
|
||||
public let isRandomExecutionOrdering: Bool
|
||||
|
||||
public init(target: String, skipped: Bool = false, parallelizable: Bool = false, randomExecutionOrdering: Bool = false) {
|
||||
self.target = target
|
||||
self.isSkipped = skipped
|
||||
self.isParallelizable = parallelizable
|
||||
self.isRandomExecutionOrdering = randomExecutionOrdering
|
||||
}
|
||||
}
|
||||
|
||||
public class RunAction: Equatable {
|
||||
// MARK: - Attributes
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ public extension RunAction {
|
|||
}
|
||||
|
||||
public extension TestAction {
|
||||
static func test(targets: [String] = ["AppTests"],
|
||||
static func test(targets: [TestableTarget] = [TestableTarget(target: "AppTests")],
|
||||
arguments: Arguments? = Arguments.test(),
|
||||
configurationName: String = BuildConfiguration.debug.name,
|
||||
coverage: Bool = false,
|
||||
|
|
|
@ -44,7 +44,7 @@ final class SchemesGenerator: SchemesGenerating {
|
|||
let scheme = Scheme(name: target.name,
|
||||
shared: true,
|
||||
buildAction: BuildAction(targets: [target.name]),
|
||||
testAction: TestAction(targets: [target.name], configurationName: buildConfiguration),
|
||||
testAction: TestAction(targets: [TestableTarget(target: target.name)], configurationName: buildConfiguration),
|
||||
runAction: RunAction(configurationName: buildConfiguration,
|
||||
executable: target.productName,
|
||||
arguments: Arguments(environment: target.environment)))
|
||||
|
@ -211,15 +211,19 @@ final class SchemesGenerator: SchemesGenerating {
|
|||
var preActions: [XCScheme.ExecutionAction] = []
|
||||
var postActions: [XCScheme.ExecutionAction] = []
|
||||
|
||||
testAction.targets.forEach { name in
|
||||
guard let target = project.targets.first(where: { $0.name == name }), target.product.testsBundle else { return }
|
||||
guard let pbxTarget = generatedProject.targets[name] else { return }
|
||||
testAction.targets.forEach { test in
|
||||
let targetName = test.target
|
||||
guard let target = project.targets.first(where: { $0.name == targetName }), target.product.testsBundle else { return }
|
||||
guard let pbxTarget = generatedProject.targets[targetName] else { return }
|
||||
|
||||
let reference = self.targetBuildableReference(target: target,
|
||||
pbxTarget: pbxTarget,
|
||||
projectName: generatedProject.name)
|
||||
|
||||
let testable = XCScheme.TestableReference(skipped: false, buildableReference: reference)
|
||||
let testable = XCScheme.TestableReference(skipped: test.isSkipped,
|
||||
parallelizable: test.isParallelizable,
|
||||
randomExecutionOrdering: test.isRandomExecutionOrdering,
|
||||
buildableReference: reference)
|
||||
testables.append(testable)
|
||||
}
|
||||
|
||||
|
|
|
@ -597,7 +597,7 @@ extension TuistCore.BuildAction {
|
|||
|
||||
extension TuistCore.TestAction {
|
||||
static func from(manifest: ProjectDescription.TestAction) -> TuistCore.TestAction {
|
||||
let targets = manifest.targets
|
||||
let targets = manifest.targets.map { TuistCore.TestableTarget.from(manifest: $0) }
|
||||
let arguments = manifest.arguments.map { TuistCore.Arguments.from(manifest: $0) }
|
||||
let configurationName = manifest.configurationName
|
||||
let coverage = manifest.coverage
|
||||
|
@ -615,6 +615,15 @@ extension TuistCore.TestAction {
|
|||
}
|
||||
}
|
||||
|
||||
extension TuistCore.TestableTarget {
|
||||
static func from(manifest: ProjectDescription.TestableTarget) -> TuistCore.TestableTarget {
|
||||
return TestableTarget(target: manifest.target,
|
||||
skipped: manifest.isSkipped,
|
||||
parallelizable: manifest.isParallelizable,
|
||||
randomExecutionOrdering: manifest.isRandomExecutionOrdering)
|
||||
}
|
||||
}
|
||||
|
||||
extension TuistCore.RunAction {
|
||||
static func from(manifest: ProjectDescription.RunAction) -> TuistCore.RunAction {
|
||||
let configurationName = manifest.configurationName
|
||||
|
|
|
@ -125,7 +125,7 @@ final class SchemeGeneratorTests: XCTestCase {
|
|||
|
||||
let preAction = ExecutionAction(title: "Pre Action", scriptText: "echo Pre Actions", target: "AppTests")
|
||||
let postAction = ExecutionAction(title: "Post Action", scriptText: "echo Post Actions", target: "AppTests")
|
||||
let testAction = TestAction.test(targets: ["AppTests"], preActions: [preAction], postActions: [postAction])
|
||||
let testAction = TestAction.test(targets: [TestableTarget(target: "AppTests")], preActions: [preAction], postActions: [postAction])
|
||||
|
||||
let scheme = Scheme.test(name: "AppTests", shared: true, testAction: testAction)
|
||||
let project = Project.test(targets: [testTarget])
|
||||
|
@ -162,7 +162,7 @@ final class SchemeGeneratorTests: XCTestCase {
|
|||
let target = Target.test(name: "App", product: .app)
|
||||
let testTarget = Target.test(name: "AppTests", product: .unitTests)
|
||||
|
||||
let testAction = TestAction.test(targets: ["AppTests"], coverage: true, codeCoverageTargets: ["App"])
|
||||
let testAction = TestAction.test(targets: [TestableTarget(target: "AppTests")], coverage: true, codeCoverageTargets: ["App"])
|
||||
let buildAction = BuildAction.test(targets: ["App"])
|
||||
|
||||
let scheme = Scheme.test(name: "AppTests", shared: true, buildAction: buildAction, testAction: testAction)
|
||||
|
@ -181,6 +181,28 @@ final class SchemeGeneratorTests: XCTestCase {
|
|||
XCTAssertEqual(codeCoverageTargetsBuildableReference?.first?.buildableName, "App.app")
|
||||
}
|
||||
|
||||
func test_schemeTestAction_with_testable_info() {
|
||||
let target = Target.test(name: "App", product: .app)
|
||||
let testTarget = Target.test(name: "AppTests", product: .unitTests)
|
||||
|
||||
let testableTarget = TestableTarget(target: "AppTests", skipped: false, parallelizable: true, randomExecutionOrdering: true)
|
||||
let testAction = TestAction.test(targets: [testableTarget])
|
||||
let buildAction = BuildAction.test(targets: ["App"])
|
||||
|
||||
let scheme = Scheme.test(name: "AppTests", shared: true, buildAction: buildAction, testAction: testAction)
|
||||
let project = Project.test(targets: [target, testTarget])
|
||||
|
||||
let pbxTarget = PBXNativeTarget(name: "App", productType: .application)
|
||||
let pbxTestTarget = PBXNativeTarget(name: "AppTests", productType: .unitTestBundle)
|
||||
let generatedProject = GeneratedProject.test(targets: ["AppTests": pbxTestTarget, "App": pbxTarget])
|
||||
|
||||
let got = subject.schemeTestAction(scheme: scheme, project: project, generatedProject: generatedProject)
|
||||
let testableTargetReference = got!.testables[0]
|
||||
XCTAssertEqual(testableTargetReference.skipped, false)
|
||||
XCTAssertEqual(testableTargetReference.parallelizable, true)
|
||||
XCTAssertEqual(testableTargetReference.randomExecutionOrdering, true)
|
||||
}
|
||||
|
||||
func test_schemeBuildAction() {
|
||||
let target = Target.test(name: "App", product: .app)
|
||||
let pbxTarget = PBXNativeTarget(name: "App")
|
||||
|
@ -268,7 +290,7 @@ final class SchemeGeneratorTests: XCTestCase {
|
|||
let pbxTarget = PBXNativeTarget(name: "App")
|
||||
|
||||
let buildAction = BuildAction.test(targets: ["Library"])
|
||||
let testAction = TestAction.test(targets: ["Library"])
|
||||
let testAction = TestAction.test(targets: [TestableTarget(target: "Library")])
|
||||
|
||||
let scheme = Scheme.test(name: "Library", buildAction: buildAction, testAction: testAction, runAction: nil)
|
||||
|
||||
|
@ -321,7 +343,7 @@ final class SchemeGeneratorTests: XCTestCase {
|
|||
let target = Target.test(name: "Library", platform: .iOS, product: .dynamicLibrary)
|
||||
|
||||
let buildAction = BuildAction.test(targets: ["Library"])
|
||||
let testAction = TestAction.test(targets: ["Library"])
|
||||
let testAction = TestAction.test(targets: [TestableTarget(target: "Library")])
|
||||
let scheme = Scheme.test(name: "Library", buildAction: buildAction, testAction: testAction, runAction: nil)
|
||||
|
||||
let project = Project.test(path: AbsolutePath("/project.xcodeproj"), targets: [target])
|
||||
|
|
|
@ -819,7 +819,8 @@ class GeneratorModelLoaderTest: TuistUnitTestCase {
|
|||
matches manifest: ProjectDescription.TestAction,
|
||||
file: StaticString = #file,
|
||||
line: UInt = #line) {
|
||||
XCTAssertEqual(testAction.targets, manifest.targets, file: file, line: line)
|
||||
let targets = manifest.targets.map { TestableTarget.from(manifest: $0) }
|
||||
XCTAssertEqual(testAction.targets, targets, file: file, line: line)
|
||||
XCTAssertTrue(testAction.configurationName == manifest.configurationName, file: file, line: line)
|
||||
XCTAssertEqual(testAction.coverage, manifest.coverage, file: file, line: line)
|
||||
optionalAssert(testAction.arguments, manifest.arguments) {
|
||||
|
|
|
@ -100,7 +100,7 @@ extension BuildAction {
|
|||
}
|
||||
|
||||
extension TestAction {
|
||||
static func test(targets: [String] = [],
|
||||
static func test(targets: [TestableTarget] = [],
|
||||
arguments: Arguments? = nil,
|
||||
config: PresetBuildConfiguration = .debug,
|
||||
coverage: Bool = true) -> TestAction {
|
||||
|
|
Loading…
Reference in New Issue