Sort autogenerated scheme targets for workspace (#3019)
This commit is contained in:
parent
65896884f8
commit
f607f53517
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue