Skip to content

Commit bb74a3d

Browse files
authored
Accept "SNAPSHOT" in toolchain selector parsing (#58)
1 parent 83e4014 commit bb74a3d

File tree

2 files changed

+67
-2
lines changed

2 files changed

+67
-2
lines changed

Sources/SwiftlyCore/ToolchainVerison.swift

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,8 @@ public enum ToolchainSelector {
285285
}
286286
}
287287

288+
extension ToolchainSelector: Equatable {}
289+
288290
/// Protocol used to facilitate parsing `ToolchainSelector`s from strings.
289291
protocol ToolchainSelectorParser {
290292
func parse(_ string: String) throws -> ToolchainSelector?
@@ -328,9 +330,11 @@ struct StableReleaseParser: ToolchainSelectorParser {
328330
/// - a.b-DEVELOPMENT-SNAPSHOT-YYYY-mm-dd-a
329331
/// - a.b-DEVELOPMENT-SNAPSHOT-YYYY-mm-dd
330332
/// - a.b-DEVELOPMENT-SNAPSHOT
333+
/// - a.b-SNAPSHOT-YYYY-mm-dd
334+
/// - a.b-SNAPSHOT
331335
struct ReleaseSnapshotParser: ToolchainSelectorParser {
332336
static let regex: Regex<(Substring, Substring, Substring, Substring?)> =
333-
try! Regex("^([0-9]+)\\.([0-9]+)-(?:snapshot|DEVELOPMENT-SNAPSHOT)(?:-([0-9]{4}-[0-9]{2}-[0-9]{2}))?(?:-a)?$")
337+
try! Regex("^([0-9]+)\\.([0-9]+)-(?:snapshot|DEVELOPMENT-SNAPSHOT|SNAPSHOT)(?:-([0-9]{4}-[0-9]{2}-[0-9]{2}))?(?:-a)?$")
334338

335339
func parse(_ input: String) throws -> ToolchainSelector? {
336340
guard let match = try Self.regex.wholeMatch(in: input) else {
@@ -351,12 +355,14 @@ struct ReleaseSnapshotParser: ToolchainSelectorParser {
351355
/// Parser for selectors like the following:
352356
/// - main-snapshot-YYYY-mm-dd
353357
/// - main-snapshot
358+
/// - main-SNAPSHOT-YYYY-mm-dd
359+
/// - main-SNAPSHOT
354360
/// - swift-DEVELOPMENT-SNAPSHOT-YYYY-mm-dd-a
355361
/// - swift-DEVELOPMENT-SNAPSHOT-YYYY-mm-dd
356362
/// - swift-DEVELOPMENT-SNAPSHOT
357363
struct MainSnapshotParser: ToolchainSelectorParser {
358364
static let regex: Regex<(Substring, Substring?)> =
359-
try! Regex("^(?:main-snapshot|swift-DEVELOPMENT-SNAPSHOT)(?:-([0-9]{4}-[0-9]{2}-[0-9]{2}))?(?:-a)?$")
365+
try! Regex("^(?:main-snapshot|swift-DEVELOPMENT-SNAPSHOT|main-SNAPSHOT)(?:-([0-9]{4}-[0-9]{2}-[0-9]{2}))?(?:-a)?$")
360366

361367
func parse(_ input: String) throws -> ToolchainSelector? {
362368
guard let match = try Self.regex.wholeMatch(in: input) else {
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import Foundation
2+
import SwiftlyCore
3+
import XCTest
4+
5+
final class ToolchainSelectorTests: SwiftlyTests {
6+
func runTest(_ expected: ToolchainSelector, _ parses: [String]) throws {
7+
for string in parses {
8+
XCTAssertEqual(try ToolchainSelector(parsing: string), expected)
9+
}
10+
}
11+
12+
func testParseLatest() throws {
13+
try self.runTest(.latest, ["latest"])
14+
}
15+
16+
func testParseRelease() throws {
17+
try self.runTest(.stable(major: 5, minor: 7, patch: 3), ["5.7.3"])
18+
try self.runTest(.stable(major: 5, minor: 7, patch: nil), ["5.7"])
19+
try self.runTest(.stable(major: 5, minor: nil, patch: nil), ["5"])
20+
}
21+
22+
func testParseMainSnapshot() throws {
23+
let parses = [
24+
"main-snapshot",
25+
"main-SNAPSHOT",
26+
"swift-DEVELOPMENT-SNAPSHOT",
27+
]
28+
try runTest(.snapshot(branch: .main, date: nil), parses)
29+
}
30+
31+
func testParseMainSnapshotWithDate() throws {
32+
let parses = [
33+
"main-snapshot-2023-06-05",
34+
"main-SNAPSHOT-2023-06-05",
35+
"swift-DEVELOPMENT-SNAPSHOT-2023-06-05",
36+
"swift-DEVELOPMENT-SNAPSHOT-2023-06-05-a",
37+
]
38+
try runTest(.snapshot(branch: .main, date: "2023-06-05"), parses)
39+
}
40+
41+
func testParseReleaseSnapshot() throws {
42+
let parses = [
43+
"5.7-snapshot",
44+
"5.7-SNAPSHOT",
45+
"5.7-DEVELOPMENT-SNAPSHOT",
46+
]
47+
try runTest(.snapshot(branch: .release(major: 5, minor: 7), date: nil), parses)
48+
}
49+
50+
func testParseReleaseSnapshotWithDate() throws {
51+
let parses = [
52+
"5.7-snapshot-2023-06-05",
53+
"5.7-SNAPSHOT-2023-06-05",
54+
"5.7-DEVELOPMENT-SNAPSHOT-2023-06-05",
55+
"5.7-DEVELOPMENT-SNAPSHOT-2023-06-05-a",
56+
]
57+
try runTest(.snapshot(branch: .release(major: 5, minor: 7), date: "2023-06-05"), parses)
58+
}
59+
}

0 commit comments

Comments
 (0)