@@ -372,6 +372,92 @@ 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 configured in version.json
385+ [ InlineData ( 1 , "1.2.3" , VersionOptions . VersionPrecision . Major , "1.0.0" ) ]
386+ [ InlineData ( 1 , "1.2.3" , VersionOptions . VersionPrecision . Minor , "1.2.0" ) ]
387+ [ InlineData ( 1 , "1.2.3" , VersionOptions . VersionPrecision . Build , "1.2.3" ) ]
388+ [ InlineData ( 1 , "1.2.3" , VersionOptions . VersionPrecision . Revision , "1.2.3.1" ) ]
389+ // 4 version fields configured in version.json
390+ [ InlineData ( 1 , "1.2.3.4" , VersionOptions . VersionPrecision . Major , "1.0.0" ) ]
391+ [ InlineData ( 1 , "1.2.3.4" , VersionOptions . VersionPrecision . Minor , "1.2.0" ) ]
392+ [ InlineData ( 1 , "1.2.3.4" , VersionOptions . VersionPrecision . Build , "1.2.3" ) ]
393+ [ InlineData ( 1 , "1.2.3.4" , VersionOptions . VersionPrecision . Revision , "1.2.3.4" ) ]
394+ // 2 version fields with git height in prerelease tag configured in version.json
395+ [ InlineData ( 1 , "1.2-alpha.{height}" , VersionOptions . VersionPrecision . Major , "1.0.0-alpha-0001" ) ]
396+ [ InlineData ( 1 , "1.2-alpha.{height}" , VersionOptions . VersionPrecision . Minor , "1.2.0-alpha-0001" ) ]
397+ [ InlineData ( 1 , "1.2-alpha.{height}" , VersionOptions . VersionPrecision . Build , "1.2.0-alpha-0001" ) ]
398+ [ InlineData ( 1 , "1.2-alpha.{height}" , VersionOptions . VersionPrecision . Revision , "1.2.0.0-alpha-0001" ) ]
399+ // 3 version fields with git height in prerelease tag configured in version.json
400+ [ InlineData ( 1 , "1.2.3-alpha.{height}" , VersionOptions . VersionPrecision . Major , "1.0.0-alpha-0001" ) ]
401+ [ InlineData ( 1 , "1.2.3-alpha.{height}" , VersionOptions . VersionPrecision . Minor , "1.2.0-alpha-0001" ) ]
402+ [ InlineData ( 1 , "1.2.3-alpha.{height}" , VersionOptions . VersionPrecision . Build , "1.2.3-alpha-0001" ) ]
403+ [ InlineData ( 1 , "1.2.3-alpha.{height}" , VersionOptions . VersionPrecision . Revision , "1.2.3.0-alpha-0001" ) ]
404+ // 4 version fields with git height in prerelease tag configured in version.json
405+ [ InlineData ( 1 , "1.2.3.4-alpha.{height}" , VersionOptions . VersionPrecision . Major , "1.0.0-alpha-0001" ) ]
406+ [ InlineData ( 1 , "1.2.3.4-alpha.{height}" , VersionOptions . VersionPrecision . Minor , "1.2.0-alpha-0001" ) ]
407+ [ InlineData ( 1 , "1.2.3.4-alpha.{height}" , VersionOptions . VersionPrecision . Build , "1.2.3-alpha-0001" ) ]
408+ [ InlineData ( 1 , "1.2.3.4-alpha.{height}" , VersionOptions . VersionPrecision . Revision , "1.2.3.4-alpha-0001" ) ]
409+ //
410+ // SemVer 2
411+ //
412+ // 2 version fields configured in version.json
413+ [ InlineData ( 2 , "1.2" , VersionOptions . VersionPrecision . Major , "1.0.0" ) ]
414+ [ InlineData ( 2 , "1.2" , VersionOptions . VersionPrecision . Minor , "1.2.0" ) ]
415+ [ InlineData ( 2 , "1.2" , VersionOptions . VersionPrecision . Build , "1.2.1" ) ]
416+ [ InlineData ( 2 , "1.2" , VersionOptions . VersionPrecision . Revision , "1.2.1.<commit>" ) ]
417+ // 3 version fields configured in version.json
418+ [ InlineData ( 2 , "1.2.3" , VersionOptions . VersionPrecision . Major , "1.0.0" ) ]
419+ [ InlineData ( 2 , "1.2.3" , VersionOptions . VersionPrecision . Minor , "1.2.0" ) ]
420+ [ InlineData ( 2 , "1.2.3" , VersionOptions . VersionPrecision . Build , "1.2.3" ) ]
421+ [ InlineData ( 2 , "1.2.3" , VersionOptions . VersionPrecision . Revision , "1.2.3.1" ) ]
422+ // 4 version fields configured in version.json
423+ [ InlineData ( 2 , "1.2.3.4" , VersionOptions . VersionPrecision . Major , "1.0.0" ) ]
424+ [ InlineData ( 2 , "1.2.3.4" , VersionOptions . VersionPrecision . Minor , "1.2.0" ) ]
425+ [ InlineData ( 2 , "1.2.3.4" , VersionOptions . VersionPrecision . Build , "1.2.3" ) ]
426+ [ InlineData ( 2 , "1.2.3.4" , VersionOptions . VersionPrecision . Revision , "1.2.3.4" ) ]
427+ // 2 version fields with git height in prerelease tag configured in version.json
428+ [ InlineData ( 2 , "1.2-alpha.{height}" , VersionOptions . VersionPrecision . Major , "1.0.0-alpha.1" ) ]
429+ [ InlineData ( 2 , "1.2-alpha.{height}" , VersionOptions . VersionPrecision . Minor , "1.2.0-alpha.1" ) ]
430+ [ InlineData ( 2 , "1.2-alpha.{height}" , VersionOptions . VersionPrecision . Build , "1.2.0-alpha.1" ) ]
431+ [ InlineData ( 2 , "1.2-alpha.{height}" , VersionOptions . VersionPrecision . Revision , "1.2.0.0-alpha.1" ) ]
432+ // 3 version fields with git height in prerelease tag configured in version.json
433+ [ InlineData ( 2 , "1.2.3-alpha.{height}" , VersionOptions . VersionPrecision . Major , "1.0.0-alpha.1" ) ]
434+ [ InlineData ( 2 , "1.2.3-alpha.{height}" , VersionOptions . VersionPrecision . Minor , "1.2.0-alpha.1" ) ]
435+ [ InlineData ( 2 , "1.2.3-alpha.{height}" , VersionOptions . VersionPrecision . Build , "1.2.3-alpha.1" ) ]
436+ [ InlineData ( 2 , "1.2.3-alpha.{height}" , VersionOptions . VersionPrecision . Revision , "1.2.3.0-alpha.1" ) ]
437+ // 4 version fields with git height in prerelease tag configured in version.json
438+ [ InlineData ( 2 , "1.2.3.4-alpha.{height}" , VersionOptions . VersionPrecision . Major , "1.0.0-alpha.1" ) ]
439+ [ InlineData ( 2 , "1.2.3.4-alpha.{height}" , VersionOptions . VersionPrecision . Minor , "1.2.0-alpha.1" ) ]
440+ [ InlineData ( 2 , "1.2.3.4-alpha.{height}" , VersionOptions . VersionPrecision . Build , "1.2.3-alpha.1" ) ]
441+ [ InlineData ( 2 , "1.2.3.4-alpha.{height}" , VersionOptions . VersionPrecision . Revision , "1.2.3.4-alpha.1" ) ]
442+ public void CanSetPrecisionForNuGetPackageVersion ( int semVer , string version , VersionOptions . VersionPrecision precision , string expectedPackageVersion )
443+ {
444+ VersionOptions workingCopyVersion = new VersionOptions
445+ {
446+ Version = SemanticVersion . Parse ( version ) ,
447+ NuGetPackageVersion = new VersionOptions . NuGetPackageVersionOptions
448+ {
449+ SemVer = semVer ,
450+ Precision = precision
451+ }
452+ } ;
453+ this . WriteVersionFile ( workingCopyVersion ) ;
454+ this . InitializeSourceControl ( ) ;
455+ var oracle = new VersionOracle ( this . Context ) ;
456+ oracle . PublicRelease = true ;
457+ expectedPackageVersion = expectedPackageVersion . Replace ( "<commit>" , oracle . Version . Revision . ToString ( ) ) ;
458+ Assert . Equal ( expectedPackageVersion , oracle . NuGetPackageVersion ) ;
459+ }
460+
375461 [ Fact ]
376462 public void CanSetSemVer2ForNuGetPackageVersionNonPublicRelease ( )
377463 {
0 commit comments