Sort autogenerated scheme targets for workspace (#3019)

This commit is contained in:
Alfredo Delli Bovi 2021-05-31 11:12:53 +02:00 committed by GitHub
parent 65896884f8
commit f607f53517
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 56 additions and 11 deletions

View File

@ -10,6 +10,10 @@ Please, check out guidelines: https://keepachangelog.com/en/1.0.0/
- Add possibility to specify version of Swift in the `Config.swift` manifest file. [#2998](https://github.com/tuist/tuist/pull/2998) by [@laxmorek](https://github.com/laxmorek)
- Add `tuist run` command which allows running schemes of a project. [#2917](https://github.com/tuist/tuist/pull/2917) by [@luispadron](https://github.com/luispadron)
### Changed
- Sort build and testable targets in autogenerated scheme for workspace. [#3019](https://github.com/tuist/tuist/pull/3019) by [@adellibovi](https://github.com/adellibovi)
## 1.43.0 - Peroxide
### Added

View File

@ -61,18 +61,22 @@ public final class AutogeneratedProjectSchemeWorkspaceMapper: WorkspaceMapping {
workspace: WorkspaceWithProjects,
codeCoverage: Bool
) -> Scheme {
let (targets, testableTargets): ([TargetReference], [TestableTarget]) = workspace.projects.reduce(([], [])) { result, project in
let targets = project.targets
.filter { $0.platform == platform }
.map { TargetReference(projectPath: project.path, name: $0.name) }
let testableTargets = project.targets
.filter { $0.platform == platform }
.filter(\.product.testsBundle)
.map { TargetReference(projectPath: project.path, name: $0.name) }
.map { TestableTarget(target: $0) }
var (targets, testableTargets): ([TargetReference], [TestableTarget]) = workspace.projects
.reduce(([], [])) { result, project in
let targets = project.targets
.filter { $0.platform == platform }
.map { TargetReference(projectPath: project.path, name: $0.name) }
let testableTargets = project.targets
.filter { $0.platform == platform }
.filter(\.product.testsBundle)
.map { TargetReference(projectPath: project.path, name: $0.name) }
.map { TestableTarget(target: $0) }
return (result.0 + targets, result.1 + testableTargets)
}
return (result.0 + targets, result.1 + testableTargets)
}
targets = targets.sorted(by: { $0.name < $1.name })
testableTargets = testableTargets.sorted(by: { $0.target.name < $1.target.name })
return Scheme(
name: name,

View File

@ -148,6 +148,43 @@ final class AutogeneratedProjectSchemeWorkspaceMapperTests: TuistUnitTestCase {
XCTAssertTrue(try XCTUnwrap(scheme.testAction?.coverage))
}
func test_multiple_project_sorting() throws {
// Given
let subject = AutogeneratedProjectSchemeWorkspaceMapper(enableCodeCoverage: true)
let targetA = Target.test(name: "A")
let targetB = Target.test(name: "B")
let targetC = Target.test(name: "C")
let projectB = Project.test(
path: try temporaryPath(),
name: "ProjectB",
targets: [
targetB,
]
)
let projectA = Project.test(
path: try temporaryPath(),
name: "ProjectA",
targets: [
targetA,
targetC,
]
)
let workspace = Workspace.test()
// When
let (got, _) = try subject.map(
workspace: WorkspaceWithProjects(workspace: workspace, projects: [projectB, projectA])
)
// Then
let scheme = try XCTUnwrap(got.workspace.schemes.first)
let targetsNames = scheme.buildAction?.targets.map { $0.name }
XCTAssertEqual(targetsNames, ["A", "B", "C"])
}
func test_map_when_multiple_platforms() throws {
// Given
let subject = AutogeneratedProjectSchemeWorkspaceMapper(enableCodeCoverage: false)