@@ -88,7 +88,7 @@ public void ConstructWithMajorMinorPatchTest(int major, int minor, int patch)
88
88
}
89
89
#endregion
90
90
91
- #region SemVersion(int major, int minor = 0, int patch = 0, string prerelease, string build)
91
+ #region SemVersion(int major, int minor = 0, int patch = 0, string prerelease = "" , string build = "" )
92
92
/// <summary>
93
93
/// Verifies the default values of the arguments to the primary constructor.
94
94
/// </summary>
@@ -232,7 +232,8 @@ public void ConstructWithIdentifiersTest()
232
232
[ InlineData ( 0 , - 1 , - 1 , InvalidMinorVersionMessage , "minor" ) ]
233
233
public void ConstructWithIdentifiersInvalidTest ( int major , int minor , int patch , string expectedMessage , string expectedParamName )
234
234
{
235
- var ex = Assert . Throws < ArgumentOutOfRangeException > ( ( ) => new SemVersion ( major , minor , patch , Enumerable . Empty < PrereleaseIdentifier > ( ) ) ) ;
235
+ var ex = Assert . Throws < ArgumentOutOfRangeException > ( ( )
236
+ => new SemVersion ( major , minor , patch , Enumerable . Empty < PrereleaseIdentifier > ( ) ) ) ;
236
237
237
238
Assert . StartsWith ( expectedMessage , ex . Message ) ;
238
239
Assert . Equal ( expectedParamName , ex . ParamName ) ;
@@ -294,5 +295,149 @@ public void ConstructWithStringIdentifiersInvalidTest(int major, int minor, int
294
295
295
296
// TODO add tests for validation of prerelease and metadata
296
297
#endregion
298
+
299
+ #region SemVersion.ParsedFrom(int major, int minor = 0, int patch = 0, string prerelease, string build)
300
+ [ Fact ]
301
+ public void ParsedFromDefaultValuesTest ( )
302
+ {
303
+ var v = SemVersion . ParsedFrom ( 1 ) ;
304
+
305
+ Assert . Equal ( 1 , v . Major ) ;
306
+ Assert . Equal ( 0 , v . Minor ) ;
307
+ Assert . Equal ( 0 , v . Patch ) ;
308
+ Assert . Equal ( "" , v . Prerelease ) ;
309
+ Assert . Empty ( v . PrereleaseIdentifiers ) ;
310
+ Assert . Equal ( "" , v . Metadata ) ;
311
+ Assert . Empty ( v . MetadataIdentifiers ) ;
312
+ }
313
+
314
+ [ Fact ]
315
+ public void ParsedFromTest ( )
316
+ {
317
+ var v = SemVersion . ParsedFrom ( 2 , 3 , 4 , "pre.42" , "build.42" ) ;
318
+
319
+ Assert . Equal ( 2 , v . Major ) ;
320
+ Assert . Equal ( 3 , v . Minor ) ;
321
+ Assert . Equal ( 4 , v . Patch ) ;
322
+ Assert . Equal ( "pre.42" , v . Prerelease ) ;
323
+ var expectedPrereleaseIdentifiers = new [ ] { new PrereleaseIdentifier ( "pre" ) , new PrereleaseIdentifier ( 42 ) } ;
324
+ Assert . Equal ( expectedPrereleaseIdentifiers , v . PrereleaseIdentifiers ) ;
325
+ Assert . Equal ( "build.42" , v . Metadata ) ;
326
+ var expectedMetadata = new [ ] { new MetadataIdentifier ( "build" ) , new MetadataIdentifier ( "42" ) } ;
327
+ Assert . Equal ( expectedMetadata , v . MetadataIdentifiers ) ;
328
+ }
329
+
330
+ [ Theory ]
331
+ [ InlineData ( - 1 , 0 , 0 , InvalidMajorVersionMessage , "major" ) ]
332
+ [ InlineData ( 0 , - 1 , 0 , InvalidMinorVersionMessage , "minor" ) ]
333
+ [ InlineData ( 0 , 0 , - 1 , InvalidPatchVersionMessage , "patch" ) ]
334
+ [ InlineData ( - 1 , - 1 , - 1 , InvalidMajorVersionMessage , "major" ) ]
335
+ [ InlineData ( 0 , - 1 , - 1 , InvalidMinorVersionMessage , "minor" ) ]
336
+ public void ParsedFromInvalidTest (
337
+ int major ,
338
+ int minor ,
339
+ int patch ,
340
+ string expectedMessage ,
341
+ string expectedParamName )
342
+ {
343
+ var ex = Assert . Throws < ArgumentOutOfRangeException > ( ( )
344
+ => SemVersion . ParsedFrom ( major , minor , patch ) ) ;
345
+
346
+ Assert . StartsWith ( expectedMessage , ex . Message ) ;
347
+ Assert . Equal ( expectedParamName , ex . ParamName ) ;
348
+ }
349
+
350
+ [ Fact ]
351
+ public void ParsedFromPrereleaseEmptyString ( )
352
+ {
353
+ var v = SemVersion . ParsedFrom ( 1 , 2 , 3 , "" ) ;
354
+
355
+ Assert . Equal ( new SemVersion ( 1 , 2 , 3 ) , v ) ;
356
+ }
357
+
358
+ [ Fact ]
359
+ public void ParsedFromPrereleaseEmptyIdentifier ( )
360
+ {
361
+ var ex = Assert . Throws < ArgumentException > ( ( ) => SemVersion . ParsedFrom ( 1 , 2 , 3 , "bar." ) ) ;
362
+ Assert . StartsWith ( "Prerelease identifier cannot be empty." , ex . Message ) ;
363
+ Assert . Equal ( "prerelease" , ex . ParamName ) ;
364
+ }
365
+
366
+ [ Fact ]
367
+ public void ParsedFromPrereleaseLeadingZeros ( )
368
+ {
369
+ var ex = Assert . Throws < ArgumentException > ( ( )
370
+ => SemVersion . ParsedFrom ( 1 , 2 , 3 , "bar.0123" ) ) ;
371
+ Assert . StartsWith ( "Leading zeros are not allowed on numeric prerelease identifiers '0123'." , ex . Message ) ;
372
+ Assert . Equal ( "prerelease" , ex . ParamName ) ;
373
+ }
374
+
375
+ [ Fact ]
376
+ public void ParsedFromPrereleaseLeadingZerosAllowed ( )
377
+ {
378
+ var v = SemVersion . ParsedFrom ( 1 , 2 , 3 , "bar.0123" , allowLeadingZeros : true ) ;
379
+
380
+ Assert . Equal ( new SemVersion ( 1 , 2 , 3 , "bar.123" ) , v ) ;
381
+ }
382
+
383
+ [ Fact ]
384
+ public void ParsedFromPrereleaseTooLarge ( )
385
+ {
386
+ var ex = Assert . Throws < OverflowException > ( ( )
387
+ => SemVersion . ParsedFrom ( 1 , 2 , 3 , "bar.99999999999999999" ) ) ;
388
+ Assert . StartsWith ( "Prerelease identifier '99999999999999999' was too large for Int32." , ex . Message ) ;
389
+ }
390
+
391
+ [ Fact ]
392
+ public void ParsedFromPrereleaseInvalidCharacter ( )
393
+ {
394
+ var ex = Assert . Throws < ArgumentException > ( ( )
395
+ => SemVersion . ParsedFrom ( 1 , 2 , 3 , "bar.abc@123" ) ) ;
396
+ Assert . StartsWith ( "A prerelease identifier can contain only ASCII alphanumeric characters and hyphens 'abc@123'." , ex . Message ) ;
397
+ Assert . Equal ( "prerelease" , ex . ParamName ) ;
398
+ }
399
+
400
+ [ Fact ]
401
+ public void ParsedFromMetadataEmptyString ( )
402
+ {
403
+ var v = SemVersion . ParsedFrom ( 1 , metadata : "" ) ;
404
+
405
+ Assert . Equal ( new SemVersion ( 1 , 0 , 0 ) , v ) ;
406
+ }
407
+
408
+ [ Fact ]
409
+ public void ParsedFromMetadataEmptyIdentifier ( )
410
+ {
411
+ var ex = Assert . Throws < ArgumentException > ( ( )
412
+ => SemVersion . ParsedFrom ( 1 , metadata : "bar." ) ) ;
413
+ Assert . StartsWith ( "Metadata identifier cannot be empty." , ex . Message ) ;
414
+ Assert . Equal ( "metadata" , ex . ParamName ) ;
415
+ }
416
+
417
+ [ Fact ]
418
+ public void ParsedFromMetadataLeadingZeros ( )
419
+ {
420
+ var v = SemVersion . ParsedFrom ( 1 , metadata : "bar.0123" ) ;
421
+
422
+ Assert . Equal ( new SemVersion ( 1 , 0 , 0 , "" , "bar.0123" ) , v ) ;
423
+ }
424
+
425
+ [ Fact ]
426
+ public void ParsedFromMetadataTooLarge ( )
427
+ {
428
+ var v = SemVersion . ParsedFrom ( 1 , metadata : "bar.99999999999999999" ) ;
429
+
430
+ Assert . Equal ( new SemVersion ( 1 , 0 , 0 , "" , "bar.99999999999999999" ) , v ) ;
431
+ }
432
+
433
+ [ Fact ]
434
+ public void ParsedFromMetadataInvalidCharacter ( )
435
+ {
436
+ var ex = Assert . Throws < ArgumentException > ( ( )
437
+ => SemVersion . ParsedFrom ( 1 , metadata : "bar.abc@123" ) ) ;
438
+ Assert . StartsWith ( "A metadata identifier can contain only ASCII alphanumeric characters and hyphens 'abc@123'." , ex . Message ) ;
439
+ Assert . Equal ( "metadata" , ex . ParamName ) ;
440
+ }
441
+ #endregion
297
442
}
298
443
}
0 commit comments