@@ -13,6 +13,37 @@ import XCTest
13
13
14
14
class VersionTests : XCTestCase {
15
15
16
+ func testVersionInitialization( ) {
17
+ let v0 = Version ( 0 , 0 , 0 , prereleaseIdentifiers: [ ] , buildMetadataIdentifiers: [ ] )
18
+ XCTAssertEqual ( v0. minor, 0 )
19
+ XCTAssertEqual ( v0. minor, 0 )
20
+ XCTAssertEqual ( v0. patch, 0 )
21
+ XCTAssertEqual ( v0. prereleaseIdentifiers, [ ] )
22
+ XCTAssertEqual ( v0. buildMetadataIdentifiers, [ ] )
23
+
24
+ let v1 = Version ( 1 , 1 , 2 , prereleaseIdentifiers: [ " 3 " , " 5 " ] , buildMetadataIdentifiers: [ " 8 " , " 13 " ] )
25
+ XCTAssertEqual ( v1. minor, 1 )
26
+ XCTAssertEqual ( v1. minor, 1 )
27
+ XCTAssertEqual ( v1. patch, 2 )
28
+ XCTAssertEqual ( v1. prereleaseIdentifiers, [ " 3 " , " 5 " ] )
29
+ XCTAssertEqual ( v1. buildMetadataIdentifiers, [ " 8 " , " 13 " ] )
30
+
31
+ XCTAssertEqual (
32
+ Version ( 3 , 5 , 8 ) ,
33
+ Version ( 3 , 5 , 8 , prereleaseIdentifiers: [ ] , buildMetadataIdentifiers: [ ] )
34
+ )
35
+
36
+ XCTAssertEqual (
37
+ Version ( 13 , 21 , 34 , prereleaseIdentifiers: [ " 55 " ] ) ,
38
+ Version ( 13 , 21 , 34 , prereleaseIdentifiers: [ " 55 " ] , buildMetadataIdentifiers: [ ] )
39
+ )
40
+
41
+ XCTAssertEqual (
42
+ Version ( 89 , 144 , 233 , buildMetadataIdentifiers: [ " 377 " ] ) ,
43
+ Version ( 89 , 144 , 233 , prereleaseIdentifiers: [ ] , buildMetadataIdentifiers: [ " 377 " ] )
44
+ )
45
+ }
46
+
16
47
func testVersionComparison( ) {
17
48
18
49
// MARK: version core vs. version core
@@ -248,8 +279,58 @@ class VersionTests: XCTestCase {
248
279
XCTAssertNotEqual ( Set ( [ Version ( 1 , 2 , 3 ) ] ) , Set ( [ Version ( 1 , 2 , 3 , prereleaseIdentifiers: [ " alpha " ] ) ] ) )
249
280
XCTAssertEqual ( Set ( [ Version ( 1 , 2 , 3 ) ] ) , Set ( [ Version ( 1 , 2 , 3 , buildMetadataIdentifiers: [ " 1011 " ] ) ] ) )
250
281
}
251
-
252
- func testDescription( ) {
282
+
283
+ func testCustomConversionFromVersionToString( ) {
284
+
285
+ // MARK: Version.description
286
+
287
+ XCTAssertEqual ( Version ( 0 , 0 , 0 ) . description, " 0.0.0 " as String )
288
+ XCTAssertEqual ( Version ( 1 , 2 , 3 ) . description, " 1.2.3 " as String )
289
+ XCTAssertEqual ( Version ( 1 , 2 , 3 , prereleaseIdentifiers: [ " " ] ) . description, " 1.2.3- " as String )
290
+ XCTAssertEqual ( Version ( 1 , 2 , 3 , prereleaseIdentifiers: [ " " , " " ] ) . description, " 1.2.3-. " as String )
291
+ XCTAssertEqual ( Version ( 1 , 2 , 3 , prereleaseIdentifiers: [ " beta1 " ] ) . description, " 1.2.3-beta1 " as String )
292
+ XCTAssertEqual ( Version ( 1 , 2 , 3 , prereleaseIdentifiers: [ " beta " , " 1 " ] ) . description, " 1.2.3-beta.1 " as String )
293
+ XCTAssertEqual ( Version ( 1 , 2 , 3 , prereleaseIdentifiers: [ " beta " , " " , " 1 " ] ) . description, " 1.2.3-beta..1 " as String )
294
+ XCTAssertEqual ( Version ( 1 , 2 , 3 , prereleaseIdentifiers: [ " be-ta " , " " , " 1 " ] ) . description, " 1.2.3-be-ta..1 " as String )
295
+ XCTAssertEqual ( Version ( 1 , 2 , 3 , buildMetadataIdentifiers: [ " " ] ) . description, " 1.2.3+ " as String )
296
+ XCTAssertEqual ( Version ( 1 , 2 , 3 , buildMetadataIdentifiers: [ " " , " " ] ) . description, " 1.2.3+. " as String )
297
+ XCTAssertEqual ( Version ( 1 , 2 , 3 , buildMetadataIdentifiers: [ " beta1 " ] ) . description, " 1.2.3+beta1 " as String )
298
+ XCTAssertEqual ( Version ( 1 , 2 , 3 , buildMetadataIdentifiers: [ " beta " , " 1 " ] ) . description, " 1.2.3+beta.1 " as String )
299
+ XCTAssertEqual ( Version ( 1 , 2 , 3 , buildMetadataIdentifiers: [ " beta " , " " , " 1 " ] ) . description, " 1.2.3+beta..1 " as String )
300
+ XCTAssertEqual ( Version ( 1 , 2 , 3 , buildMetadataIdentifiers: [ " be-ta " , " " , " 1 " ] ) . description, " 1.2.3+be-ta..1 " as String )
301
+ XCTAssertEqual ( Version ( 1 , 2 , 3 , prereleaseIdentifiers: [ " " ] , buildMetadataIdentifiers: [ " " ] ) . description, " 1.2.3-+ " as String )
302
+ XCTAssertEqual ( Version ( 1 , 2 , 3 , prereleaseIdentifiers: [ " " , " " ] , buildMetadataIdentifiers: [ " " , " - " , " " ] ) . description, " 1.2.3-.+.-. " as String )
303
+ XCTAssertEqual ( Version ( 1 , 2 , 3 , prereleaseIdentifiers: [ " beta1 " ] , buildMetadataIdentifiers: [ " alpha1 " ] ) . description, " 1.2.3-beta1+alpha1 " as String )
304
+ XCTAssertEqual ( Version ( 1 , 2 , 3 , prereleaseIdentifiers: [ " beta " , " 1 " ] , buildMetadataIdentifiers: [ " alpha " , " 1 " ] ) . description, " 1.2.3-beta.1+alpha.1 " as String )
305
+ XCTAssertEqual ( Version ( 1 , 2 , 3 , prereleaseIdentifiers: [ " beta " , " " , " 1 " ] , buildMetadataIdentifiers: [ " alpha " , " " , " 1 " ] ) . description, " 1.2.3-beta..1+alpha..1 " as String )
306
+ 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 )
307
+
308
+ // MARK: String interpolation
309
+
310
+ XCTAssertEqual ( " \( Version ( 0 , 0 , 0 ) ) " , " 0.0.0 " as String )
311
+ XCTAssertEqual ( " \( Version ( 1 , 2 , 3 ) ) " , " 1.2.3 " as String )
312
+ XCTAssertEqual ( " \( Version ( 1 , 2 , 3 , prereleaseIdentifiers: [ " " ] ) ) " , " 1.2.3- " as String )
313
+ XCTAssertEqual ( " \( Version ( 1 , 2 , 3 , prereleaseIdentifiers: [ " " , " " ] ) ) " , " 1.2.3-. " as String )
314
+ XCTAssertEqual ( " \( Version ( 1 , 2 , 3 , prereleaseIdentifiers: [ " beta1 " ] ) ) " , " 1.2.3-beta1 " as String )
315
+ XCTAssertEqual ( " \( Version ( 1 , 2 , 3 , prereleaseIdentifiers: [ " beta " , " 1 " ] ) ) " , " 1.2.3-beta.1 " as String )
316
+ XCTAssertEqual ( " \( Version ( 1 , 2 , 3 , prereleaseIdentifiers: [ " beta " , " " , " 1 " ] ) ) " , " 1.2.3-beta..1 " as String )
317
+ XCTAssertEqual ( " \( Version ( 1 , 2 , 3 , prereleaseIdentifiers: [ " be-ta " , " " , " 1 " ] ) ) " , " 1.2.3-be-ta..1 " as String )
318
+ XCTAssertEqual ( " \( Version ( 1 , 2 , 3 , buildMetadataIdentifiers: [ " " ] ) ) " , " 1.2.3+ " as String )
319
+ XCTAssertEqual ( " \( Version ( 1 , 2 , 3 , buildMetadataIdentifiers: [ " " , " " ] ) ) " , " 1.2.3+. " as String )
320
+ XCTAssertEqual ( " \( Version ( 1 , 2 , 3 , buildMetadataIdentifiers: [ " beta1 " ] ) ) " , " 1.2.3+beta1 " as String )
321
+ XCTAssertEqual ( " \( Version ( 1 , 2 , 3 , buildMetadataIdentifiers: [ " beta " , " 1 " ] ) ) " , " 1.2.3+beta.1 " as String )
322
+ XCTAssertEqual ( " \( Version ( 1 , 2 , 3 , buildMetadataIdentifiers: [ " beta " , " " , " 1 " ] ) ) " , " 1.2.3+beta..1 " as String )
323
+ XCTAssertEqual ( " \( Version ( 1 , 2 , 3 , buildMetadataIdentifiers: [ " be-ta " , " " , " 1 " ] ) ) " , " 1.2.3+be-ta..1 " as String )
324
+ XCTAssertEqual ( " \( Version ( 1 , 2 , 3 , prereleaseIdentifiers: [ " " ] , buildMetadataIdentifiers: [ " " ] ) ) " , " 1.2.3-+ " as String )
325
+ XCTAssertEqual ( " \( Version ( 1 , 2 , 3 , prereleaseIdentifiers: [ " " , " " ] , buildMetadataIdentifiers: [ " " , " - " , " " ] ) ) " , " 1.2.3-.+.-. " as String )
326
+ XCTAssertEqual ( " \( Version ( 1 , 2 , 3 , prereleaseIdentifiers: [ " beta1 " ] , buildMetadataIdentifiers: [ " alpha1 " ] ) ) " , " 1.2.3-beta1+alpha1 " as String )
327
+ XCTAssertEqual ( " \( Version ( 1 , 2 , 3 , prereleaseIdentifiers: [ " beta " , " 1 " ] , buildMetadataIdentifiers: [ " alpha " , " 1 " ] ) ) " , " 1.2.3-beta.1+alpha.1 " as String )
328
+ XCTAssertEqual ( " \( Version ( 1 , 2 , 3 , prereleaseIdentifiers: [ " beta " , " " , " 1 " ] , buildMetadataIdentifiers: [ " alpha " , " " , " 1 " ] ) ) " , " 1.2.3-beta..1+alpha..1 " as String )
329
+ XCTAssertEqual ( " \( Version ( 1 , 2 , 3 , prereleaseIdentifiers: [ " be-ta " , " " , " 1 " ] , buildMetadataIdentifiers: [ " al-pha " , " " , " 1 " ] ) ) " , " 1.2.3-be-ta..1+al-pha..1 " as String )
330
+
331
+ }
332
+
333
+ func testAdditionalCustomConversionFromVersionToString( ) {
253
334
let v : Version = " 123.234.345-alpha.beta+sha1.1011 "
254
335
XCTAssertEqual ( v. description, " 123.234.345-alpha.beta+sha1.1011 " )
255
336
XCTAssertEqual ( v. major, 123 )
@@ -306,6 +387,29 @@ class VersionTests: XCTestCase {
306
387
307
388
}
308
389
390
+ func testExpressingVersionByStringLiteral( ) {
391
+
392
+ // MARK: Well-formed version core
393
+
394
+ XCTAssertEqual ( " 0.0.0 " as Version , Version ( 0 , 0 , 0 ) )
395
+ XCTAssertEqual ( " 1.1.2 " as Version , Version ( 1 , 1 , 2 ) )
396
+
397
+ // MARK: Well-formed version core, well-formed pre-release identifiers
398
+
399
+ XCTAssertEqual ( " 0.0.0-pre-alpha " as Version , Version ( 0 , 0 , 0 , prereleaseIdentifiers: [ " pre-alpha " ] ) )
400
+ XCTAssertEqual ( " 55.89.144-beta.1 " as Version , Version ( 55 , 89 , 144 , prereleaseIdentifiers: [ " beta " , " 1 " ] ) )
401
+ 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 " ] ) )
402
+ XCTAssertEqual ( " 144.233.377- " as Version , Version ( 144 , 233 , 377 , prereleaseIdentifiers: [ " " ] ) )
403
+
404
+ // MARK: Well-formed version core, well-formed build metadata identifiers
405
+
406
+ XCTAssertEqual ( " 0.0.0+some-metadata " as Version , Version ( 0 , 0 , 0 , buildMetadataIdentifiers: [ " some-metadata " ] ) )
407
+ XCTAssertEqual ( " 4181.6765.10946+more.meta..more.data " as Version , Version ( 4181 , 6765 , 10946 , buildMetadataIdentifiers: [ " more " , " meta " , " " , " more " , " data " ] ) )
408
+ 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------------------------------------------------------- " ] ) )
409
+ XCTAssertEqual ( " 10946.17711.28657+ " as Version , Version ( 10946 , 17711 , 28657 , buildMetadataIdentifiers: [ " " ] ) )
410
+
411
+ }
412
+
309
413
func testAdditionalInitializationFromString( ) {
310
414
let badStrings = [
311
415
" " , " 1 " , " 1.2 " , " 1.2.3.4 " , " 1.2.3.4.5 " ,
0 commit comments