Skip to content

Commit a107360

Browse files
committed
Move the toolchain constants into ToolchainVersion and Set for shorter lists and static references
1 parent d97e203 commit a107360

File tree

7 files changed

+162
-159
lines changed

7 files changed

+162
-159
lines changed

Tests/SwiftlyTests/InstallTests.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -226,10 +226,10 @@ import Testing
226226

227227
/// Verify that the installed toolchain will be marked as in-use if the --use flag is specified.
228228
@Test(.testHomeMockedToolchain()) func installUseFlag() async throws {
229-
try await SwiftlyTests.installMockedToolchain(toolchain: SwiftlyTests.oldStable)
230-
try await SwiftlyTests.runCommand(Use.self, ["use", SwiftlyTests.oldStable.name])
231-
try await SwiftlyTests.validateInUse(expected: SwiftlyTests.oldStable)
232-
try await SwiftlyTests.installMockedToolchain(selector: SwiftlyTests.newStable.name, args: ["--use"])
233-
try await SwiftlyTests.validateInUse(expected: SwiftlyTests.newStable)
229+
try await SwiftlyTests.installMockedToolchain(toolchain: .oldStable)
230+
try await SwiftlyTests.runCommand(Use.self, ["use", ToolchainVersion.oldStable.name])
231+
try await SwiftlyTests.validateInUse(expected: .oldStable)
232+
try await SwiftlyTests.installMockedToolchain(selector: ToolchainVersion.newStable.name, args: ["--use"])
233+
try await SwiftlyTests.validateInUse(expected: .newStable)
234234
}
235235
}

Tests/SwiftlyTests/ListTests.swift

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,23 @@ import Testing
77
static let homeName = "useTests"
88

99
static let sortedReleaseToolchains: [ToolchainVersion] = [
10-
SwiftlyTests.newStable,
11-
SwiftlyTests.oldStableNewPatch,
12-
SwiftlyTests.oldStable,
10+
.newStable,
11+
.oldStableNewPatch,
12+
.oldStable,
1313
]
1414

1515
static let sortedSnapshotToolchains: [ToolchainVersion] = [
16-
SwiftlyTests.newMainSnapshot,
17-
SwiftlyTests.oldMainSnapshot,
18-
SwiftlyTests.newReleaseSnapshot,
19-
SwiftlyTests.oldReleaseSnapshot,
16+
.newMainSnapshot,
17+
.oldMainSnapshot,
18+
.newReleaseSnapshot,
19+
.oldReleaseSnapshot,
2020
]
2121

2222
/// Constructs a mock home directory with the toolchains listed above installed and runs the provided closure within
2323
/// the context of that home.
2424
func runListTest(f: () async throws -> Void) async throws {
2525
try await SwiftlyTests.withTestHome(name: Self.homeName) {
26-
for toolchain in SwiftlyTests.allToolchains {
26+
for toolchain in Set<ToolchainVersion>.allToolchains() {
2727
try await SwiftlyTests.installMockedToolchain(toolchain: toolchain)
2828
}
2929

@@ -44,7 +44,7 @@ import Testing
4444
let output = try await SwiftlyTests.runWithMockedIO(List.self, args)
4545

4646
let parsedToolchains = output.compactMap { outputLine in
47-
SwiftlyTests.allToolchains.first {
47+
Set<ToolchainVersion>.allToolchains().first {
4848
outputLine.contains(String(describing: $0))
4949
}
5050
}
@@ -73,13 +73,13 @@ import Testing
7373
var toolchains = try await self.runList(selector: "5")
7474
#expect(toolchains == Self.sortedReleaseToolchains)
7575

76-
var selector = "\(SwiftlyTests.newStable.asStableRelease!.major).\(SwiftlyTests.newStable.asStableRelease!.minor)"
76+
var selector = "\(ToolchainVersion.newStable.asStableRelease!.major).\(ToolchainVersion.newStable.asStableRelease!.minor)"
7777
toolchains = try await self.runList(selector: selector)
78-
#expect(toolchains == [SwiftlyTests.newStable])
78+
#expect(toolchains == [ToolchainVersion.newStable])
7979

80-
selector = "\(SwiftlyTests.oldStable.asStableRelease!.major).\(SwiftlyTests.oldStable.asStableRelease!.minor)"
80+
selector = "\(ToolchainVersion.oldStable.asStableRelease!.major).\(ToolchainVersion.oldStable.asStableRelease!.minor)"
8181
toolchains = try await self.runList(selector: selector)
82-
#expect(toolchains == [SwiftlyTests.oldStableNewPatch, SwiftlyTests.oldStable])
82+
#expect(toolchains == [ToolchainVersion.oldStableNewPatch, ToolchainVersion.oldStable])
8383

8484
for toolchain in Self.sortedReleaseToolchains {
8585
toolchains = try await self.runList(selector: toolchain.name)
@@ -96,11 +96,11 @@ import Testing
9696
@Test func listSnapshotToolchains() async throws {
9797
try await self.runListTest {
9898
var toolchains = try await self.runList(selector: "main-snapshot")
99-
#expect(toolchains == [SwiftlyTests.newMainSnapshot, SwiftlyTests.oldMainSnapshot])
99+
#expect(toolchains == [ToolchainVersion.newMainSnapshot, ToolchainVersion.oldMainSnapshot])
100100

101-
let snapshotBranch = SwiftlyTests.newReleaseSnapshot.asSnapshot!.branch
101+
let snapshotBranch = ToolchainVersion.newReleaseSnapshot.asSnapshot!.branch
102102
toolchains = try await self.runList(selector: "\(snapshotBranch.major!).\(snapshotBranch.minor!)-snapshot")
103-
#expect(toolchains == [SwiftlyTests.newReleaseSnapshot, SwiftlyTests.oldReleaseSnapshot])
103+
#expect(toolchains == [ToolchainVersion.newReleaseSnapshot, ToolchainVersion.oldReleaseSnapshot])
104104

105105
for toolchain in Self.sortedSnapshotToolchains {
106106
toolchains = try await self.runList(selector: toolchain.name)
@@ -129,22 +129,22 @@ import Testing
129129
}
130130

131131
try await self.runListTest {
132-
for toolchain in SwiftlyTests.allToolchains {
132+
for toolchain in Set<ToolchainVersion>.allToolchains() {
133133
try await inUseTest(toolchain: toolchain, selector: nil)
134134
try await inUseTest(toolchain: toolchain, selector: toolchain.name)
135135
}
136136

137-
let major = SwiftlyTests.oldStable.asStableRelease!.major
137+
let major = ToolchainVersion.oldStable.asStableRelease!.major
138138
for toolchain in Self.sortedReleaseToolchains.filter({ $0.asStableRelease?.major == major }) {
139139
try await inUseTest(toolchain: toolchain, selector: "\(major)")
140140
}
141141

142-
for toolchain in SwiftlyTests.allToolchains.filter({ $0.asSnapshot?.branch == .main }) {
142+
for toolchain in Set<ToolchainVersion>.allToolchains().filter({ $0.asSnapshot?.branch == .main }) {
143143
try await inUseTest(toolchain: toolchain, selector: "main-snapshot")
144144
}
145145

146-
let branch = SwiftlyTests.oldReleaseSnapshot.asSnapshot!.branch
147-
let releaseSnapshots = SwiftlyTests.allToolchains.filter {
146+
let branch = ToolchainVersion.oldReleaseSnapshot.asSnapshot!.branch
147+
let releaseSnapshots = Set<ToolchainVersion>.allToolchains().filter {
148148
$0.asSnapshot?.branch == branch
149149
}
150150
for toolchain in releaseSnapshots {

Tests/SwiftlyTests/RunTests.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,17 @@ import Testing
1010
@Test(.mockHomeToolchains()) func runSelection() async throws {
1111
// GIVEN: a set of installed toolchains
1212
// WHEN: invoking the run command with a selector argument for that toolchain
13-
var output = try await SwiftlyTests.runWithMockedIO(Run.self, ["run", "swift", "--version", "+\(SwiftlyTests.newStable.name)"])
13+
var output = try await SwiftlyTests.runWithMockedIO(Run.self, ["run", "swift", "--version", "+\(ToolchainVersion.newStable.name)"])
1414
// THEN: the output confirms that it ran with the selected toolchain
15-
#expect(output.contains(SwiftlyTests.newStable.name))
15+
#expect(output.contains(ToolchainVersion.newStable.name))
1616

1717
// GIVEN: a set of installed toolchains and one is selected with a .swift-version file
1818
let versionFile = SwiftlyTests.ctx.currentDirectory.appendingPathComponent(".swift-version")
19-
try SwiftlyTests.oldStable.name.write(to: versionFile, atomically: true, encoding: .utf8)
19+
try ToolchainVersion.oldStable.name.write(to: versionFile, atomically: true, encoding: .utf8)
2020
// WHEN: invoking the run command without any selector arguments for toolchains
2121
output = try await SwiftlyTests.runWithMockedIO(Run.self, ["run", "swift", "--version"])
2222
// THEN: the output confirms that it ran with the selected toolchain
23-
#expect(output.contains(SwiftlyTests.oldStable.name))
23+
#expect(output.contains(ToolchainVersion.oldStable.name))
2424

2525
// GIVEN: a set of installed toolchains
2626
// WHEN: invoking the run command with a selector argument for a toolchain that isn't installed

Tests/SwiftlyTests/SwiftlyTests.swift

Lines changed: 31 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,28 @@ extension SwiftlyCoreContext {
6868
}
6969
}
7070

71+
extension ToolchainVersion {
72+
public static let oldStable = ToolchainVersion(major: 5, minor: 6, patch: 0)
73+
public static let oldStableNewPatch = ToolchainVersion(major: 5, minor: 6, patch: 3)
74+
public static let newStable = ToolchainVersion(major: 5, minor: 7, patch: 0)
75+
public static let oldMainSnapshot = ToolchainVersion(snapshotBranch: .main, date: "2025-03-10")
76+
public static let newMainSnapshot = ToolchainVersion(snapshotBranch: .main, date: "2025-03-14")
77+
public static let oldReleaseSnapshot = ToolchainVersion(snapshotBranch: .release(major: 6, minor: 0), date: "2025-02-09")
78+
public static let newReleaseSnapshot = ToolchainVersion(snapshotBranch: .release(major: 6, minor: 0), date: "2025-02-11")
79+
}
80+
81+
extension Set where Element == ToolchainVersion {
82+
static func allToolchains() -> Set<ToolchainVersion> { [
83+
.oldStable,
84+
.oldStableNewPatch,
85+
.newStable,
86+
.oldMainSnapshot,
87+
.newMainSnapshot,
88+
.oldReleaseSnapshot,
89+
.newReleaseSnapshot,
90+
] }
91+
}
92+
7193
// Convenience test scoping traits
7294

7395
struct TestHomeTrait: TestTrait, TestScoping {
@@ -89,7 +111,7 @@ extension Trait where Self == TestHomeTrait {
89111

90112
struct MockHomeToolchainsTrait: TestTrait, TestScoping {
91113
var name: String = "testHome"
92-
var toolchains: Set<ToolchainVersion> = SwiftlyTests.allToolchains
114+
var toolchains: Set<ToolchainVersion> = .allToolchains()
93115

94116
init(_ name: String, toolchains: Set<ToolchainVersion>) {
95117
self.name = name
@@ -105,7 +127,7 @@ struct MockHomeToolchainsTrait: TestTrait, TestScoping {
105127

106128
extension Trait where Self == MockHomeToolchainsTrait {
107129
/// Run the test with this trait to get a mocked home directory with a predefined collection of toolchains already installed.
108-
static func mockHomeToolchains(_ homeName: String = "testHome", toolchains: Set<ToolchainVersion> = SwiftlyTests.allToolchains) -> Self { Self(homeName, toolchains: toolchains) }
130+
static func mockHomeToolchains(_ homeName: String = "testHome", toolchains: Set<ToolchainVersion> = .allToolchains()) -> Self { Self(homeName, toolchains: toolchains) }
109131
}
110132

111133
struct TestHomeMockedToolchainTrait: TestTrait, TestScoping {
@@ -136,25 +158,6 @@ public enum SwiftlyTests {
136158
inputProvider: InputProviderFail()
137159
)
138160

139-
// Below are some constants that can be used to write test cases.
140-
public static let oldStable = ToolchainVersion(major: 5, minor: 6, patch: 0)
141-
public static let oldStableNewPatch = ToolchainVersion(major: 5, minor: 6, patch: 3)
142-
public static let newStable = ToolchainVersion(major: 5, minor: 7, patch: 0)
143-
public static let oldMainSnapshot = ToolchainVersion(snapshotBranch: .main, date: "2025-03-10")
144-
public static let newMainSnapshot = ToolchainVersion(snapshotBranch: .main, date: "2025-03-14")
145-
public static let oldReleaseSnapshot = ToolchainVersion(snapshotBranch: .release(major: 6, minor: 0), date: "2025-02-09")
146-
public static let newReleaseSnapshot = ToolchainVersion(snapshotBranch: .release(major: 6, minor: 0), date: "2025-02-11")
147-
148-
static let allToolchains: Set<ToolchainVersion> = [
149-
oldStable,
150-
oldStableNewPatch,
151-
newStable,
152-
oldMainSnapshot,
153-
newMainSnapshot,
154-
oldReleaseSnapshot,
155-
newReleaseSnapshot,
156-
]
157-
158161
static func baseTestConfig() async throws -> Config {
159162
guard let pd = try? await Swiftly.currentPlatform.detectPlatform(Self.ctx, disableConfirmation: true, platform: nil) else {
160163
throw SwiftlyTestError(message: "Unable to detect the current platform.")
@@ -515,9 +518,9 @@ public class MockToolchainDownloader: HTTPRequestExecutor {
515518
executables: [String]? = nil,
516519
latestSwiftlyVersion: SwiftlyVersion = SwiftlyCore.version,
517520
releaseToolchains: [ToolchainVersion.StableRelease] = [
518-
SwiftlyTests.oldStable.asStableRelease!,
519-
SwiftlyTests.newStable.asStableRelease!,
520-
SwiftlyTests.oldStableNewPatch.asStableRelease!,
521+
ToolchainVersion.oldStable.asStableRelease!,
522+
ToolchainVersion.newStable.asStableRelease!,
523+
ToolchainVersion.oldStableNewPatch.asStableRelease!,
521524
ToolchainVersion.StableRelease(major: 5, minor: 7, patch: 4), // Some tests look for a patch in the 5.7.x series larger than 5.0.3
522525
ToolchainVersion.StableRelease(major: 5, minor: 9, patch: 0), // Some tests try to update from 5.9.0
523526
ToolchainVersion.StableRelease(major: 5, minor: 9, patch: 1),
@@ -526,10 +529,10 @@ public class MockToolchainDownloader: HTTPRequestExecutor {
526529
ToolchainVersion.StableRelease(major: 6, minor: 0, patch: 2), // Some tests try to update from 6.0.1
527530
],
528531
snapshotToolchains: [ToolchainVersion.Snapshot] = [
529-
SwiftlyTests.oldMainSnapshot.asSnapshot!,
530-
SwiftlyTests.newMainSnapshot.asSnapshot!,
531-
SwiftlyTests.oldReleaseSnapshot.asSnapshot!,
532-
SwiftlyTests.newReleaseSnapshot.asSnapshot!,
532+
ToolchainVersion.oldMainSnapshot.asSnapshot!,
533+
ToolchainVersion.newMainSnapshot.asSnapshot!,
534+
ToolchainVersion.oldReleaseSnapshot.asSnapshot!,
535+
ToolchainVersion.newReleaseSnapshot.asSnapshot!,
533536
]
534537
) {
535538
self.executables = executables ?? ["swift"]

0 commit comments

Comments
 (0)