From 87863fb8d78bdde0f7cab34815720e0438223a73 Mon Sep 17 00:00:00 2001 From: Abbas Mousavi Date: Fri, 1 Nov 2019 23:53:55 +0000 Subject: [PATCH] extracts the testCoverageTargetReferences method --- .../Generator/SchemesGenerator.swift | 40 +++++++++++++------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/Sources/TuistGenerator/Generator/SchemesGenerator.swift b/Sources/TuistGenerator/Generator/SchemesGenerator.swift index 6f035276cb8..ba31b4a5f07 100644 --- a/Sources/TuistGenerator/Generator/SchemesGenerator.swift +++ b/Sources/TuistGenerator/Generator/SchemesGenerator.swift @@ -145,6 +145,31 @@ final class SchemesGenerator: SchemesGenerating { macroExpansion: nil, testables: testables) } + + /// Generates the array of BuildableReference for targets that the + /// coverage report should be generated for them. + /// + /// - Parameters: + /// - testAction: test actions. + /// - project: Project manifest. + /// - generatedProject: Generated Xcode project. + /// - Returns: Array of buildable references. + private func testCoverageTargetReferences(testAction: TestAction, project: Project, generatedProject: GeneratedProject) -> [XCScheme.BuildableReference] { + + var codeCoverageTargets: [XCScheme.BuildableReference] = [] + testAction.codeCoverageTargets.forEach { name in + + guard let target = project.targets.first(where: { $0.name == name }) else { return } + guard let pbxTarget = generatedProject.targets[name] else { return } + + let reference = self.targetBuildableReference(target: target, + pbxTarget: pbxTarget, + projectName: generatedProject.name) + codeCoverageTargets.append(reference) + } + + return codeCoverageTargets + } /// Generates the scheme test action. /// @@ -161,18 +186,6 @@ final class SchemesGenerator: SchemesGenerating { var testables: [XCScheme.TestableReference] = [] var preActions: [XCScheme.ExecutionAction] = [] var postActions: [XCScheme.ExecutionAction] = [] - var codeCoverageTargets: [XCScheme.BuildableReference] = [] - - testAction.codeCoverageTargets.forEach { name in - - guard let target = project.targets.first(where: { $0.name == name }) else { return } - guard let pbxTarget = generatedProject.targets[name] else { return } - - let reference = self.targetBuildableReference(target: target, - pbxTarget: pbxTarget, - projectName: generatedProject.name) - codeCoverageTargets.append(reference) - } testAction.targets.forEach { name in guard let target = project.targets.first(where: { $0.name == name }), target.product.testsBundle else { return } @@ -201,6 +214,9 @@ final class SchemesGenerator: SchemesGenerating { args = XCScheme.CommandLineArguments(arguments: commandlineArgruments(arguments.launch)) environments = environmentVariables(arguments.environment) } + + let codeCoverageTargets = self.testCoverageTargetReferences(testAction: testAction, project: project, generatedProject: generatedProject) + let onlyGenerateCoverageForSpecifiedTargets = codeCoverageTargets.count > 0 ? true : nil let shouldUseLaunchSchemeArgsEnv: Bool = args == nil && environments == nil