@@ -305,3 +305,59 @@ func TestCompareNumbers(t *testing.T) {
305305 testGreater ("10" , "1" )
306306 testGreater ("10" , "2" )
307307}
308+
309+ func TestVersionGetters (t * testing.T ) {
310+ type test struct {
311+ version string
312+ prerelease string
313+ build string
314+ }
315+ tests := []test {
316+ {"" , "" , "" },
317+ {"0" , "" , "" },
318+ {"1" , "" , "" },
319+ {"0.1" , "" , "" },
320+ {"1.1" , "" , "" },
321+ {"0.2.3" , "" , "" },
322+ {"1.2.3-aaa" , "aaa" , "" },
323+ {"0.2-aaa" , "aaa" , "" },
324+ {"1-aaa" , "aaa" , "" },
325+ {"0.2.3+bbb" , "" , "bbb" },
326+ {"1.3+bbb" , "" , "bbb" },
327+ {"0+bbb" , "" , "bbb" },
328+ {"1.2.3-aaa+bbb" , "aaa" , "bbb" },
329+ {"0.2-aaa+bbb" , "aaa" , "bbb" },
330+ {"1-aaa+bbb" , "aaa" , "bbb" },
331+ {"0.2.3-aaa.4.5.6+bbb.7.8.9" , "aaa.4.5.6" , "bbb.7.8.9" },
332+ }
333+ for _ , tt := range tests {
334+ v := MustParse (tt .version )
335+ require .Equal (t , tt .version , v .String ())
336+ require .Equal (t , tt .prerelease != "" , v .IsPrerelase ())
337+ require .Equal (t , tt .prerelease , v .Prerelease ())
338+ require .Equal (t , tt .build != "" , v .HasBuildMetadata ())
339+ require .Equal (t , tt .build , v .BuildMetadata ())
340+ r := ParseRelaxed (tt .version )
341+ require .Equal (t , tt .version , r .String ())
342+ require .Equal (t , tt .prerelease != "" , r .IsPrerelase ())
343+ require .Equal (t , tt .prerelease , r .Prerelease ())
344+ require .Equal (t , tt .build != "" , r .HasBuildMetadata ())
345+ require .Equal (t , tt .build , r .BuildMetadata ())
346+ }
347+ relaxedTests := []test {
348+ {"asd" , "" , "" },
349+ {"123.123.123.123-123" , "" , "" },
350+ {"1.2.3-a@very@fancy@version" , "" , "" },
351+ }
352+ for _ , tt := range relaxedTests {
353+ v , err := Parse (tt .version )
354+ require .Error (t , err , "should not parse %s" , tt .version )
355+ require .Nil (t , v )
356+ r := ParseRelaxed (tt .version )
357+ require .Equal (t , tt .version , r .String ())
358+ require .Equal (t , tt .prerelease != "" , r .IsPrerelase ())
359+ require .Equal (t , tt .prerelease , r .Prerelease ())
360+ require .Equal (t , tt .build != "" , r .HasBuildMetadata ())
361+ require .Equal (t , tt .build , r .BuildMetadata ())
362+ }
363+ }
0 commit comments