Skip to content

Commit e185f00

Browse files
[NFC] add tests for all sorts of Version.init
`Version.init(extendedGraphemeClusterLiteral value: String)` and `Version.init(unicodeScalarLiteral value: String)` are not tested. A semantic version string is always longer than 1 character, so the only way to test these 2 initialisers is by calling them directly. However, I'm not sure if it's a good form.
1 parent 43a199a commit e185f00

File tree

1 file changed

+185
-1
lines changed

1 file changed

+185
-1
lines changed

Tests/PackageDescriptionTests/VersionTests.swift

Lines changed: 185 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,88 @@ class VersionTests: XCTestCase {
2424
XCTAssertEqual(Version("1.2.3-alpha.beta.2").description, "1.2.3-alpha.beta.2")
2525
}
2626

27+
func testVersionInitialization() {
28+
let v0 = Version(0, 0, 0, prereleaseIdentifiers: [], buildMetadataIdentifiers: [])
29+
XCTAssertEqual(v0.minor, 0)
30+
XCTAssertEqual(v0.minor, 0)
31+
XCTAssertEqual(v0.patch, 0)
32+
XCTAssertEqual(v0.prereleaseIdentifiers, [])
33+
XCTAssertEqual(v0.buildMetadataIdentifiers, [])
34+
35+
let v1 = Version(1, 1, 2, prereleaseIdentifiers: ["3", "5"], buildMetadataIdentifiers: ["8", "13"])
36+
XCTAssertEqual(v1.minor, 1)
37+
XCTAssertEqual(v1.minor, 1)
38+
XCTAssertEqual(v1.patch, 2)
39+
XCTAssertEqual(v1.prereleaseIdentifiers, ["3", "5"])
40+
XCTAssertEqual(v1.buildMetadataIdentifiers, ["8", "13"])
41+
42+
XCTAssertEqual(
43+
Version(3, 5, 8),
44+
Version(3, 5, 8, prereleaseIdentifiers: [], buildMetadataIdentifiers: [])
45+
)
46+
47+
XCTAssertEqual(
48+
Version(13, 21, 34, prereleaseIdentifiers: ["55"]),
49+
Version(13, 21, 34, prereleaseIdentifiers: ["55"], buildMetadataIdentifiers: [])
50+
)
51+
52+
XCTAssertEqual(
53+
Version(89, 144, 233, buildMetadataIdentifiers: ["377"]),
54+
Version(89, 144, 233, prereleaseIdentifiers: [], buildMetadataIdentifiers: ["377"])
55+
)
56+
}
57+
2758

59+
func testCustomConversionFromVersionToString() {
60+
61+
// MARK: Version.description
62+
63+
XCTAssertEqual(Version(0, 0, 0).description, "0.0.0" as String)
64+
XCTAssertEqual(Version(1, 2, 3).description, "1.2.3" as String)
65+
XCTAssertEqual(Version(1, 2, 3, prereleaseIdentifiers: [""]).description, "1.2.3-" as String)
66+
XCTAssertEqual(Version(1, 2, 3, prereleaseIdentifiers: ["", ""]).description, "1.2.3-." as String)
67+
XCTAssertEqual(Version(1, 2, 3, prereleaseIdentifiers: ["beta1"]).description, "1.2.3-beta1" as String)
68+
XCTAssertEqual(Version(1, 2, 3, prereleaseIdentifiers: ["beta", "1"]).description, "1.2.3-beta.1" as String)
69+
XCTAssertEqual(Version(1, 2, 3, prereleaseIdentifiers: ["beta", "", "1"]).description, "1.2.3-beta..1" as String)
70+
XCTAssertEqual(Version(1, 2, 3, prereleaseIdentifiers: ["be-ta", "", "1"]).description, "1.2.3-be-ta..1" as String)
71+
XCTAssertEqual(Version(1, 2, 3, buildMetadataIdentifiers: [""]).description, "1.2.3+" as String)
72+
XCTAssertEqual(Version(1, 2, 3, buildMetadataIdentifiers: ["", ""]).description, "1.2.3+." as String)
73+
XCTAssertEqual(Version(1, 2, 3, buildMetadataIdentifiers: ["beta1"]).description, "1.2.3+beta1" as String)
74+
XCTAssertEqual(Version(1, 2, 3, buildMetadataIdentifiers: ["beta", "1"]).description, "1.2.3+beta.1" as String)
75+
XCTAssertEqual(Version(1, 2, 3, buildMetadataIdentifiers: ["beta", "", "1"]).description, "1.2.3+beta..1" as String)
76+
XCTAssertEqual(Version(1, 2, 3, buildMetadataIdentifiers: ["be-ta", "", "1"]).description, "1.2.3+be-ta..1" as String)
77+
XCTAssertEqual(Version(1, 2, 3, prereleaseIdentifiers: [""], buildMetadataIdentifiers: [""]).description, "1.2.3-+" as String)
78+
XCTAssertEqual(Version(1, 2, 3, prereleaseIdentifiers: ["", ""], buildMetadataIdentifiers: ["", "-", ""]).description, "1.2.3-.+.-." as String)
79+
XCTAssertEqual(Version(1, 2, 3, prereleaseIdentifiers: ["beta1"], buildMetadataIdentifiers: ["alpha1"]).description, "1.2.3-beta1+alpha1" as String)
80+
XCTAssertEqual(Version(1, 2, 3, prereleaseIdentifiers: ["beta", "1"], buildMetadataIdentifiers: ["alpha", "1"]).description, "1.2.3-beta.1+alpha.1" as String)
81+
XCTAssertEqual(Version(1, 2, 3, prereleaseIdentifiers: ["beta", "", "1"], buildMetadataIdentifiers: ["alpha", "", "1"]).description, "1.2.3-beta..1+alpha..1" as String)
82+
XCTAssertEqual(Version(1, 2, 3, prereleaseIdentifiers: ["be-ta", "", "1"], buildMetadataIdentifiers: ["al-pha", "", "1"]).description, "1.2.3-be-ta..1+al-pha..1" as String)
83+
84+
// MARK: String interpolation
85+
86+
XCTAssertEqual("\(Version(0, 0, 0))", "0.0.0" as String)
87+
XCTAssertEqual("\(Version(1, 2, 3))", "1.2.3" as String)
88+
XCTAssertEqual("\(Version(1, 2, 3, prereleaseIdentifiers: [""]))", "1.2.3-" as String)
89+
XCTAssertEqual("\(Version(1, 2, 3, prereleaseIdentifiers: ["", ""]))", "1.2.3-." as String)
90+
XCTAssertEqual("\(Version(1, 2, 3, prereleaseIdentifiers: ["beta1"]))", "1.2.3-beta1" as String)
91+
XCTAssertEqual("\(Version(1, 2, 3, prereleaseIdentifiers: ["beta", "1"]))", "1.2.3-beta.1" as String)
92+
XCTAssertEqual("\(Version(1, 2, 3, prereleaseIdentifiers: ["beta", "", "1"]))", "1.2.3-beta..1" as String)
93+
XCTAssertEqual("\(Version(1, 2, 3, prereleaseIdentifiers: ["be-ta", "", "1"]))", "1.2.3-be-ta..1" as String)
94+
XCTAssertEqual("\(Version(1, 2, 3, buildMetadataIdentifiers: [""]))", "1.2.3+" as String)
95+
XCTAssertEqual("\(Version(1, 2, 3, buildMetadataIdentifiers: ["", ""]))", "1.2.3+." as String)
96+
XCTAssertEqual("\(Version(1, 2, 3, buildMetadataIdentifiers: ["beta1"]))", "1.2.3+beta1" as String)
97+
XCTAssertEqual("\(Version(1, 2, 3, buildMetadataIdentifiers: ["beta", "1"]))", "1.2.3+beta.1" as String)
98+
XCTAssertEqual("\(Version(1, 2, 3, buildMetadataIdentifiers: ["beta", "", "1"]))", "1.2.3+beta..1" as String)
99+
XCTAssertEqual("\(Version(1, 2, 3, buildMetadataIdentifiers: ["be-ta", "", "1"]))", "1.2.3+be-ta..1" as String)
100+
XCTAssertEqual("\(Version(1, 2, 3, prereleaseIdentifiers: [""], buildMetadataIdentifiers: [""]))", "1.2.3-+" as String)
101+
XCTAssertEqual("\(Version(1, 2, 3, prereleaseIdentifiers: ["", ""], buildMetadataIdentifiers: ["", "-", ""]))", "1.2.3-.+.-." as String)
102+
XCTAssertEqual("\(Version(1, 2, 3, prereleaseIdentifiers: ["beta1"], buildMetadataIdentifiers: ["alpha1"]))", "1.2.3-beta1+alpha1" as String)
103+
XCTAssertEqual("\(Version(1, 2, 3, prereleaseIdentifiers: ["beta", "1"], buildMetadataIdentifiers: ["alpha", "1"]))", "1.2.3-beta.1+alpha.1" as String)
104+
XCTAssertEqual("\(Version(1, 2, 3, prereleaseIdentifiers: ["beta", "", "1"], buildMetadataIdentifiers: ["alpha", "", "1"]))", "1.2.3-beta..1+alpha..1" as String)
105+
XCTAssertEqual("\(Version(1, 2, 3, prereleaseIdentifiers: ["be-ta", "", "1"], buildMetadataIdentifiers: ["al-pha", "", "1"]))", "1.2.3-be-ta..1+al-pha..1" as String)
28106

29-
107+
}
108+
30109
func testLosslessConversionFromStringToVersion() {
31110

32111
// We use type coercion `as String` in `Version(_:)` because there is a pair of overloaded initializers: `init(_ version: Version)` and `init?(_ versionString: String)`, and we want to test the latter in this function.
@@ -142,5 +221,110 @@ class VersionTests: XCTestCase {
142221
XCTAssertNil(Version("5702887.9227465-bètá1+±" as String))
143222

144223
}
224+
225+
func testExpressingVersionByStringLiteral() {
226+
227+
// MARK: Well-formed version core
228+
229+
XCTAssertEqual("0.0.0" as Version, Version(0, 0, 0))
230+
XCTAssertEqual("1.1.2" as Version, Version(1, 1, 2))
231+
232+
// MARK: Malformed version core
233+
234+
XCTAssertEqual("3" as Version, Version(0, 0, 0))
235+
XCTAssertEqual("3 5" as Version, Version(0, 0, 0))
236+
XCTAssertEqual("5.8" as Version, Version(0, 0, 0))
237+
XCTAssertEqual("-5.8.13" as Version, Version(0, 0, 0))
238+
XCTAssertEqual("8.-13.21" as Version, Version(0, 0, 0))
239+
XCTAssertEqual("13.21.-34" as Version, Version(0, 0, 0))
240+
XCTAssertEqual("-0.0.0" as Version, Version(0, 0, 0))
241+
XCTAssertEqual("0.-0.0" as Version, Version(0, 0, 0))
242+
XCTAssertEqual("0.0.-0" as Version, Version(0, 0, 0))
243+
XCTAssertEqual("21.34.55.89" as Version, Version(0, 0, 0))
244+
XCTAssertEqual("6 x 9 = 42" as Version, Version(0, 0, 0))
245+
XCTAssertEqual("forty two" as Version, Version(0, 0, 0))
246+
247+
// MARK: Well-formed version core, well-formed pre-release identifiers
248+
249+
XCTAssertEqual("0.0.0-pre-alpha" as Version, Version(0, 0, 0, prereleaseIdentifiers: ["pre-alpha"]))
250+
XCTAssertEqual("55.89.144-beta.1" as Version, Version(55, 89, 144, prereleaseIdentifiers: ["beta", "1"]))
251+
XCTAssertEqual("89.144.233-a.whole..lot.of.pre-release.identifiers" as Version, Version(89, 144, 233, prereleaseIdentifiers: ["a", "whole", "", "lot", "of", "pre-release", "identifiers"]))
252+
XCTAssertEqual("144.233.377-" as Version, Version(144, 233, 377, prereleaseIdentifiers: [""]))
253+
254+
// MARK: Well-formed version core, malformed pre-release identifiers
255+
256+
XCTAssertEqual("233.377.610-hello world" as Version, Version(0, 0, 0))
257+
258+
// MARK: Malformed version core, well-formed pre-release identifiers
259+
260+
XCTAssertEqual("987-Hello.world--------" as Version, Version(0, 0, 0))
261+
XCTAssertEqual("987.1597-half-life.3" as Version, Version(0, 0, 0))
262+
XCTAssertEqual("1597.2584.4181.6765-a.whole.lot.of.pre-release.identifiers" as Version, Version(0, 0, 0))
263+
XCTAssertEqual("6 x 9 = 42-" as Version, Version(0, 0, 0))
264+
XCTAssertEqual("forty-two" as Version, Version(0, 0, 0))
265+
//
266+
// MARK: Well-formed version core, well-formed build metadata identifiers
267+
268+
XCTAssertEqual("0.0.0+some-metadata" as Version, Version(0, 0, 0, buildMetadataIdentifiers: ["some-metadata"]))
269+
XCTAssertEqual("4181.6765.10946+more.meta..more.data" as Version, Version(4181, 6765, 10946, buildMetadataIdentifiers: ["more", "meta", "", "more", "data"]))
270+
XCTAssertEqual("6765.10946.17711+-a-very--long---build-----metadata--------identifier-------------with---------------------many----------------------------------hyphens-------------------------------------------------------" as Version, Version(6765, 10946, 17711, buildMetadataIdentifiers: ["-a-very--long---build-----metadata--------identifier-------------with---------------------many----------------------------------hyphens-------------------------------------------------------"]))
271+
XCTAssertEqual("10946.17711.28657+" as Version, Version(10946, 17711, 28657, buildMetadataIdentifiers: [""]))
272+
273+
// MARK: Well-formed version core, malformed build metadata identifiers
274+
275+
XCTAssertEqual("17711.28657.46368+hello world" as Version, Version(0, 0, 0))
276+
XCTAssertEqual("28657.46368.75025+hello+world" as Version, Version(0, 0, 0))
277+
278+
// MARK: Malformed version core, well-formed build metadata identifiers
279+
280+
XCTAssertEqual("121393+Hello.world--------" as Version, Version(0, 0, 0))
281+
XCTAssertEqual("121393.196418+half-life.3" as Version, Version(0, 0, 0))
282+
XCTAssertEqual("196418.317811.514229.832040+a.whole.lot.of.build.metadata.identifiers" as Version, Version(0, 0, 0))
283+
XCTAssertEqual("196418.317811.514229.832040+a.whole.lot.of.build.metadata.identifiers" as Version, Version(0, 0, 0))
284+
XCTAssertEqual("6 x 9 = 42+" as Version, Version(0, 0, 0))
285+
XCTAssertEqual("forty two+a-very-long-build-metadata-identifier-with-many-hyphens" as Version, Version(0, 0, 0))
286+
287+
// MARK: Well-formed version core, well-formed pre-release identifiers, well-formed build metadata identifiers
288+
289+
XCTAssertEqual("0.0.0-beta.-42+42-42.42" as Version, Version(0, 0, 0, prereleaseIdentifiers: ["beta", "-42"], buildMetadataIdentifiers: ["42-42", "42"]))
290+
291+
// MARK: Well-formed version core, well-formed pre-release identifiers, malformed build metadata identifiers
292+
293+
XCTAssertEqual("514229.832040.1346269-beta1+ " as Version, Version(0, 0, 0))
294+
295+
// MARK: Well-formed version core, malformed pre-release identifiers, well-formed build metadata identifiers
296+
297+
XCTAssertEqual("832040.1346269.2178309-beta 1+-" as Version, Version(0, 0, 0))
298+
299+
// MARK: Well-formed version core, malformed pre-release identifiers, malformed build metadata identifiers
300+
301+
XCTAssertEqual("1346269.2178309.3524578-beta 1++" as Version, Version(0, 0, 0))
302+
303+
// MARK: malformed version core, well-formed pre-release identifiers, well-formed build metadata identifiers
304+
305+
XCTAssertEqual(" 832040.1346269.3524578-beta1+abc" as Version, Version(0, 0, 0))
306+
307+
// MARK: malformed version core, well-formed pre-release identifiers, malformed build metadata identifiers
308+
309+
XCTAssertEqual("1346269.3524578.5702887-beta1+😀" as Version, Version(0, 0, 0))
310+
311+
// MARK: malformed version core, malformed pre-release identifiers, well-formed build metadata identifiers
312+
313+
XCTAssertEqual("3524578.5702887.9227465-beta!@#$%^&*1+asdfghjkl123456789" as Version, Version(0, 0, 0))
314+
315+
// MARK: malformed version core, malformed pre-release identifiers, malformed build metadata identifiers
316+
317+
XCTAssertEqual("5702887.9227465-bètá1+±" as Version, Version(0, 0, 0))
318+
319+
}
320+
321+
func testInitializingVersionFromVersion() {
322+
XCTAssertEqual(Version(Version(0, 0, 0)), Version(0, 0, 0))
323+
XCTAssertEqual(Version(Version(1, 1, 2)), Version(1, 1, 2))
324+
XCTAssertEqual(Version(Version(55, 89, 144, prereleaseIdentifiers: ["beta", "1"])), Version(55, 89, 144, prereleaseIdentifiers: ["beta", "1"]))
325+
XCTAssertEqual(Version(Version(4181, 6765, 10946, buildMetadataIdentifiers: ["more", "meta", "", "more", "data"])), Version(4181, 6765, 10946, buildMetadataIdentifiers: ["more", "meta", "", "more", "data"]))
326+
XCTAssertEqual(Version(Version(0, 0, 0, prereleaseIdentifiers: ["beta", "-42"], buildMetadataIdentifiers: ["42-42", "42"])), Version(0, 0, 0, prereleaseIdentifiers: ["beta", "-42"], buildMetadataIdentifiers: ["42-42", "42"]))
327+
}
328+
145329
}
146330

0 commit comments

Comments
 (0)