Skip to content

Commit aedb399

Browse files
committed
More tests, better initializer labels
1 parent 8f624e5 commit aedb399

File tree

2 files changed

+43
-12
lines changed

2 files changed

+43
-12
lines changed

Semantic Versioning/Semantic Version.swift

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -87,11 +87,11 @@ public struct SemanticVersion {
8787
/// Create a new Semantic Version with explicit parts
8888
///
8989
/// - Parameters:
90-
/// - major: The MAJOR version
91-
/// - minor: The MINOR version
92-
/// - patch: The PATCH version
90+
/// - major: The MAJOR version
91+
/// - minor: The MINOR version
92+
/// - patch: The PATCH version
9393
/// - preRelease: Indicates some specific information about a pre-release build, like `RC.1`
94-
/// - build: The build number, like `123` or `exp.sha.5114f85` or `2018.01.14.00.01`
94+
/// - build: The build number, like `123` or `exp.sha.5114f85` or `2018.01.14.00.01`
9595
public init(major: Major, minor: Minor, patch: Patch? = nil, preRelease: PreRelease? = nil, build: Build? = nil) {
9696
self.major = major
9797
self.minor = minor
@@ -104,12 +104,12 @@ public struct SemanticVersion {
104104
/// Create a new Semantic Version with explicit (yet unlabelled) parts
105105
///
106106
/// - Parameters:
107-
/// - major: The MAJOR version
108-
/// - minor: The MINOR version
109-
/// - patch: The PATCH version
107+
/// - major: The MAJOR version
108+
/// - minor: The MINOR version
109+
/// - patch: The PATCH version
110110
/// - preRelease: Indicates some specific information about a pre-release build, like `RC.1`
111-
/// - build: The build number, like `123` or `exp.sha.5114f85` or `2018.01.14.00.01`
112-
public init(_ major: Major, _ minor: Minor, _ patch: Patch? = nil, _ preRelease: PreRelease? = nil, _ build: Build? = nil) {
111+
/// - build: The build number, like `123` or `exp.sha.5114f85` or `2018.01.14.00.01`
112+
public init(_ major: Major, _ minor: Minor, _ patch: Patch? = nil, preRelease: PreRelease? = nil, build: Build? = nil) {
113113
self.init(major: major, minor: minor, patch: patch, preRelease: preRelease, build: build)
114114
}
115115
}

Semantic VersioningTests/Semantic_VersioningTests.swift

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ class Semantic_VersioningTests: XCTestCase {
2323

2424

2525
func testDescription() {
26-
XCTAssertEqual(SemVer(01,2,3,"RC.4",567).description, "1.2.3-RC.4+567")
27-
XCTAssertEqual(SemVer(01,2,3,["RC","4"],567).description, "1.2.3-RC.4+567")
28-
XCTAssertEqual(SemVer(01,2,3,["RC","4"],[567]).description, "1.2.3-RC.4+567")
26+
XCTAssertEqual(SemVer(01,2,3, preRelease: "RC.4", build: 567).description, "1.2.3-RC.4+567")
27+
XCTAssertEqual(SemVer(01,2,3, preRelease: ["RC","4"], build: 567).description, "1.2.3-RC.4+567")
28+
XCTAssertEqual(SemVer(01,2,3, preRelease: ["RC","4"], build: [567]).description, "1.2.3-RC.4+567")
2929
XCTAssertEqual(SemVer("1.2.3-RC.4+567")?.description, "1.2.3-RC.4+567")
3030
}
3131

@@ -38,6 +38,7 @@ class Semantic_VersioningTests: XCTestCase {
3838
XCTAssertEqual(SemVer("1.2.3+567.8"), SemVer(major: 1, minor: 2, patch: 3, build: SemanticVersionBuild(identifiers: [567])))
3939
XCTAssertEqual(SemVer("1.2-RC.4+567.8"), SemVer(major: 1, minor: 2, preRelease: SemanticVersionPreRelease(identifiers: ["RC", "4"]), build: SemanticVersionBuild(identifiers: ["567", "8"])))
4040
XCTAssertEqual(SemVer("1.2.3-RC.4+567.8"), SemVer(major: 1, minor: 2, patch: 3, preRelease: SemanticVersionPreRelease(identifiers: ["RC", "4"]), build: SemanticVersionBuild(identifiers: ["567", "8"])))
41+
XCTAssertEqual(SemVer("1.2.3-RC.4+567.8"), SemVer(1,2,3, preRelease: ["RC",4], build: [567,8]))
4142
}
4243

4344

@@ -56,4 +57,34 @@ class Semantic_VersioningTests: XCTestCase {
5657
XCTAssertLessThan(SemVer("1.0.0-beta.11")!, SemVer("1.0.0-rc.1")!)
5758
XCTAssertLessThan(SemVer("1.0.0-rc.1")!, SemVer("1.0.0")!)
5859
}
60+
61+
62+
func testEquivalence() {
63+
XCTAssertEqual(SemVer("1.0"), SemVer(major: 1, minor: 0, patch: 0))
64+
XCTAssertEqual(SemVer("1.0"), SemVer("1.0.0"))
65+
// According to https://semver.org/spec/v2.0.0.html#spec-item-11, "Build metadata does not figure into precedence"
66+
XCTAssertEqual(SemVer("1.0+543"), SemVer("1.0+345"))
67+
XCTAssertEqual(SemVer(major: 2, minor: 0, preRelease: ["RC", 1]), SemVer(2,0,0, preRelease: ["RC",1]))
68+
XCTAssertEqual(SemVer(2,0,0, preRelease: ["RC",1]), SemVer("2.0-RC.1"))
69+
XCTAssertEqual(SemVer("2.0-RC.1"), SemVer("2.0.0-RC.1"))
70+
}
71+
72+
73+
func testInvalid() {
74+
XCTAssertNil(SemVer("Obviously Bad"))
75+
XCTAssertNil(SemVer("1"))
76+
XCTAssertNil(SemVer("-2.0"))
77+
XCTAssertNil(SemVer("2.0-β"))
78+
XCTAssertNil(SemVer("2.0-beta_1"))
79+
XCTAssertNil(SemVer("1.-2"))
80+
XCTAssertNil(SemVer("1.2.-3"))
81+
XCTAssertNil(SemVer("1.2.3.4"))
82+
}
83+
84+
85+
func testBasicFixes() {
86+
XCTAssertEqual(SemVer(1,2,3), SemVer("01.2.3"))
87+
XCTAssertEqual(SemVer(1,2,3), SemVer("1.02.3"))
88+
XCTAssertEqual(SemVer(1,2,3), SemVer("1.2.03"))
89+
}
5990
}

0 commit comments

Comments
 (0)