@@ -372,6 +372,122 @@ public void CanSetSemVer2ForNuGetPackageVersionPublicRelease()
372372 Assert . Equal ( $ "7.8.9-foo.25", oracle . NuGetPackageVersion ) ;
373373 }
374374
375+ [ Theory ]
376+ //
377+ // SemVer 1
378+ //
379+ // 2 version fields configured in version.json
380+ [ InlineData ( 1 , "1.2" , VersionOptions . VersionPrecision . Major , "1.0.0" ) ]
381+ [ InlineData ( 1 , "1.2" , VersionOptions . VersionPrecision . Minor , "1.2.0" ) ]
382+ [ InlineData ( 1 , "1.2" , VersionOptions . VersionPrecision . Build , "1.2.1" ) ]
383+ [ InlineData ( 1 , "1.2" , VersionOptions . VersionPrecision . Revision , "1.2.1.<commit>" ) ]
384+ // 2 version fields and a static prerelease tag configured in version.json
385+ [ InlineData ( 1 , "1.2-alpha" , VersionOptions . VersionPrecision . Major , "1.0.0-alpha" ) ]
386+ [ InlineData ( 1 , "1.2-alpha" , VersionOptions . VersionPrecision . Minor , "1.2.0-alpha" ) ]
387+ [ InlineData ( 1 , "1.2-alpha" , VersionOptions . VersionPrecision . Build , "1.2.1-alpha" ) ]
388+ [ InlineData ( 1 , "1.2-alpha" , VersionOptions . VersionPrecision . Revision , "1.2.1.<commit>-alpha" ) ]
389+ // 2 version fields with git height in prerelease tag configured in version.json
390+ [ InlineData ( 1 , "1.2-alpha.{height}" , VersionOptions . VersionPrecision . Major , "1.0.0-alpha-0001" ) ]
391+ [ InlineData ( 1 , "1.2-alpha.{height}" , VersionOptions . VersionPrecision . Minor , "1.2.0-alpha-0001" ) ]
392+ [ InlineData ( 1 , "1.2-alpha.{height}" , VersionOptions . VersionPrecision . Build , "1.2.0-alpha-0001" ) ]
393+ [ InlineData ( 1 , "1.2-alpha.{height}" , VersionOptions . VersionPrecision . Revision , "1.2.0.0-alpha-0001" ) ]
394+ // 3 version fields configured in version.json
395+ [ InlineData ( 1 , "1.2.3" , VersionOptions . VersionPrecision . Major , "1.0.0" ) ]
396+ [ InlineData ( 1 , "1.2.3" , VersionOptions . VersionPrecision . Minor , "1.2.0" ) ]
397+ [ InlineData ( 1 , "1.2.3" , VersionOptions . VersionPrecision . Build , "1.2.3" ) ]
398+ [ InlineData ( 1 , "1.2.3" , VersionOptions . VersionPrecision . Revision , "1.2.3.1" ) ]
399+ // 3 version fields and a static prerelease tag configured in version.json
400+ [ InlineData ( 1 , "1.2.3-alpha" , VersionOptions . VersionPrecision . Major , "1.0.0-alpha" ) ]
401+ [ InlineData ( 1 , "1.2.3-alpha" , VersionOptions . VersionPrecision . Minor , "1.2.0-alpha" ) ]
402+ [ InlineData ( 1 , "1.2.3-alpha" , VersionOptions . VersionPrecision . Build , "1.2.3-alpha" ) ]
403+ [ InlineData ( 1 , "1.2.3-alpha" , VersionOptions . VersionPrecision . Revision , "1.2.3.1-alpha" ) ]
404+ // 3 version fields with git height in prerelease tag configured in version.json
405+ [ InlineData ( 1 , "1.2.3-alpha.{height}" , VersionOptions . VersionPrecision . Major , "1.0.0-alpha-0001" ) ]
406+ [ InlineData ( 1 , "1.2.3-alpha.{height}" , VersionOptions . VersionPrecision . Minor , "1.2.0-alpha-0001" ) ]
407+ [ InlineData ( 1 , "1.2.3-alpha.{height}" , VersionOptions . VersionPrecision . Build , "1.2.3-alpha-0001" ) ]
408+ [ InlineData ( 1 , "1.2.3-alpha.{height}" , VersionOptions . VersionPrecision . Revision , "1.2.3.0-alpha-0001" ) ]
409+ // 4 version fields configured in version.json
410+ [ InlineData ( 1 , "1.2.3.4" , VersionOptions . VersionPrecision . Major , "1.0.0" ) ]
411+ [ InlineData ( 1 , "1.2.3.4" , VersionOptions . VersionPrecision . Minor , "1.2.0" ) ]
412+ [ InlineData ( 1 , "1.2.3.4" , VersionOptions . VersionPrecision . Build , "1.2.3" ) ]
413+ [ InlineData ( 1 , "1.2.3.4" , VersionOptions . VersionPrecision . Revision , "1.2.3.4" ) ]
414+ // 4 version fields and a static prerelease tag configured in version.json
415+ [ InlineData ( 1 , "1.2.3.4-alpha" , VersionOptions . VersionPrecision . Major , "1.0.0-alpha" ) ]
416+ [ InlineData ( 1 , "1.2.3.4-alpha" , VersionOptions . VersionPrecision . Minor , "1.2.0-alpha" ) ]
417+ [ InlineData ( 1 , "1.2.3.4-alpha" , VersionOptions . VersionPrecision . Build , "1.2.3-alpha" ) ]
418+ [ InlineData ( 1 , "1.2.3.4-alpha" , VersionOptions . VersionPrecision . Revision , "1.2.3.4-alpha" ) ]
419+ // 4 version fields with git height in prerelease tag configured in version.json
420+ [ InlineData ( 1 , "1.2.3.4-alpha.{height}" , VersionOptions . VersionPrecision . Major , "1.0.0-alpha-0001" ) ]
421+ [ InlineData ( 1 , "1.2.3.4-alpha.{height}" , VersionOptions . VersionPrecision . Minor , "1.2.0-alpha-0001" ) ]
422+ [ InlineData ( 1 , "1.2.3.4-alpha.{height}" , VersionOptions . VersionPrecision . Build , "1.2.3-alpha-0001" ) ]
423+ [ InlineData ( 1 , "1.2.3.4-alpha.{height}" , VersionOptions . VersionPrecision . Revision , "1.2.3.4-alpha-0001" ) ]
424+ //
425+ // SemVer 2
426+ //
427+ // 2 version fields configured in version.json
428+ [ InlineData ( 2 , "1.2" , VersionOptions . VersionPrecision . Major , "1.0.0" ) ]
429+ [ InlineData ( 2 , "1.2" , VersionOptions . VersionPrecision . Minor , "1.2.0" ) ]
430+ [ InlineData ( 2 , "1.2" , VersionOptions . VersionPrecision . Build , "1.2.1" ) ]
431+ [ InlineData ( 2 , "1.2" , VersionOptions . VersionPrecision . Revision , "1.2.1.<commit>" ) ]
432+ // 2 version fields and a static prerelease tag configured in version.json
433+ [ InlineData ( 2 , "1.2-alpha" , VersionOptions . VersionPrecision . Major , "1.0.0-alpha" ) ]
434+ [ InlineData ( 2 , "1.2-alpha" , VersionOptions . VersionPrecision . Minor , "1.2.0-alpha" ) ]
435+ [ InlineData ( 2 , "1.2-alpha" , VersionOptions . VersionPrecision . Build , "1.2.1-alpha" ) ]
436+ [ InlineData ( 2 , "1.2-alpha" , VersionOptions . VersionPrecision . Revision , "1.2.1.<commit>-alpha" ) ]
437+ // 2 version fields with git height in prerelease tag configured in version.json
438+ [ InlineData ( 2 , "1.2-alpha.{height}" , VersionOptions . VersionPrecision . Major , "1.0.0-alpha.1" ) ]
439+ [ InlineData ( 2 , "1.2-alpha.{height}" , VersionOptions . VersionPrecision . Minor , "1.2.0-alpha.1" ) ]
440+ [ InlineData ( 2 , "1.2-alpha.{height}" , VersionOptions . VersionPrecision . Build , "1.2.0-alpha.1" ) ]
441+ [ InlineData ( 2 , "1.2-alpha.{height}" , VersionOptions . VersionPrecision . Revision , "1.2.0.0-alpha.1" ) ]
442+ // 3 version fields configured in version.json
443+ [ InlineData ( 2 , "1.2.3" , VersionOptions . VersionPrecision . Major , "1.0.0" ) ]
444+ [ InlineData ( 2 , "1.2.3" , VersionOptions . VersionPrecision . Minor , "1.2.0" ) ]
445+ [ InlineData ( 2 , "1.2.3" , VersionOptions . VersionPrecision . Build , "1.2.3" ) ]
446+ [ InlineData ( 2 , "1.2.3" , VersionOptions . VersionPrecision . Revision , "1.2.3.1" ) ]
447+ // 3 version fields and a static prerelease tag configured in version.json
448+ [ InlineData ( 2 , "1.2.3-alpha" , VersionOptions . VersionPrecision . Major , "1.0.0-alpha" ) ]
449+ [ InlineData ( 2 , "1.2.3-alpha" , VersionOptions . VersionPrecision . Minor , "1.2.0-alpha" ) ]
450+ [ InlineData ( 2 , "1.2.3-alpha" , VersionOptions . VersionPrecision . Build , "1.2.3-alpha" ) ]
451+ [ InlineData ( 2 , "1.2.3-alpha" , VersionOptions . VersionPrecision . Revision , "1.2.3.1-alpha" ) ]
452+ // 3 version fields with git height in prerelease tag configured in version.json
453+ [ InlineData ( 2 , "1.2.3-alpha.{height}" , VersionOptions . VersionPrecision . Major , "1.0.0-alpha.1" ) ]
454+ [ InlineData ( 2 , "1.2.3-alpha.{height}" , VersionOptions . VersionPrecision . Minor , "1.2.0-alpha.1" ) ]
455+ [ InlineData ( 2 , "1.2.3-alpha.{height}" , VersionOptions . VersionPrecision . Build , "1.2.3-alpha.1" ) ]
456+ [ InlineData ( 2 , "1.2.3-alpha.{height}" , VersionOptions . VersionPrecision . Revision , "1.2.3.0-alpha.1" ) ]
457+ // 4 version fields configured in version.json
458+ [ InlineData ( 2 , "1.2.3.4" , VersionOptions . VersionPrecision . Major , "1.0.0" ) ]
459+ [ InlineData ( 2 , "1.2.3.4" , VersionOptions . VersionPrecision . Minor , "1.2.0" ) ]
460+ [ InlineData ( 2 , "1.2.3.4" , VersionOptions . VersionPrecision . Build , "1.2.3" ) ]
461+ [ InlineData ( 2 , "1.2.3.4" , VersionOptions . VersionPrecision . Revision , "1.2.3.4" ) ]
462+ // 4 version fields and a static prerelease tag configured in version.json
463+ [ InlineData ( 2 , "1.2.3.4-alpha" , VersionOptions . VersionPrecision . Major , "1.0.0-alpha" ) ]
464+ [ InlineData ( 2 , "1.2.3.4-alpha" , VersionOptions . VersionPrecision . Minor , "1.2.0-alpha" ) ]
465+ [ InlineData ( 2 , "1.2.3.4-alpha" , VersionOptions . VersionPrecision . Build , "1.2.3-alpha" ) ]
466+ [ InlineData ( 2 , "1.2.3.4-alpha" , VersionOptions . VersionPrecision . Revision , "1.2.3.4-alpha" ) ]
467+ // 4 version fields with git height in prerelease tag configured in version.json
468+ [ InlineData ( 2 , "1.2.3.4-alpha.{height}" , VersionOptions . VersionPrecision . Major , "1.0.0-alpha.1" ) ]
469+ [ InlineData ( 2 , "1.2.3.4-alpha.{height}" , VersionOptions . VersionPrecision . Minor , "1.2.0-alpha.1" ) ]
470+ [ InlineData ( 2 , "1.2.3.4-alpha.{height}" , VersionOptions . VersionPrecision . Build , "1.2.3-alpha.1" ) ]
471+ [ InlineData ( 2 , "1.2.3.4-alpha.{height}" , VersionOptions . VersionPrecision . Revision , "1.2.3.4-alpha.1" ) ]
472+ public void CanSetPrecisionForNuGetPackageVersion ( int semVer , string version , VersionOptions . VersionPrecision precision , string expectedPackageVersion )
473+ {
474+ VersionOptions workingCopyVersion = new VersionOptions
475+ {
476+ Version = SemanticVersion . Parse ( version ) ,
477+ NuGetPackageVersion = new VersionOptions . NuGetPackageVersionOptions
478+ {
479+ SemVer = semVer ,
480+ Precision = precision
481+ }
482+ } ;
483+ this . WriteVersionFile ( workingCopyVersion ) ;
484+ this . InitializeSourceControl ( ) ;
485+ var oracle = new VersionOracle ( this . Context ) ;
486+ oracle . PublicRelease = true ;
487+ expectedPackageVersion = expectedPackageVersion . Replace ( "<commit>" , oracle . Version . Revision . ToString ( ) ) ;
488+ Assert . Equal ( expectedPackageVersion , oracle . NuGetPackageVersion ) ;
489+ }
490+
375491 [ Fact ]
376492 public void CanSetSemVer2ForNuGetPackageVersionNonPublicRelease ( )
377493 {
0 commit comments