package release import "testing" func TestParseSemVer(t *testing.T) { good := map[string]SemVer{ "0.5.0": {0, 5, 0}, "1.0.0": {1, 0, 0}, "10.2.33": {10, 2, 33}, } for s, want := range good { got, ok := ParseSemVer(s) if !ok || got != want { t.Errorf("ParseSemVer(%q) = %v, %v; want %v, true", s, got, ok, want) } } bad := []string{"", "0.5", "0.5.0.1", "v0.5.0", "0.05.0", "01.0.0", "0.5.0-3", "0.5.x", "-1.0.0", "0.5.0 "} for _, s := range bad { if _, ok := ParseSemVer(s); ok { t.Errorf("ParseSemVer(%q) accepted; want refused", s) } } } func TestSemVerCompareAndNext(t *testing.T) { if c := (SemVer{0, 5, 0}).Compare(SemVer{0, 5, 1}); c >= 0 { t.Errorf("0.5.0 vs 0.5.1 = %d; want < 0", c) } if c := (SemVer{1, 0, 0}).Compare(SemVer{0, 9, 9}); c <= 0 { t.Errorf("1.0.0 vs 0.9.9 = %d; want > 0", c) } if c := (SemVer{0, 5, 0}).Compare(SemVer{0, 5, 0}); c != 0 { t.Errorf("equal compare = %d; want 0", c) } if got := (SemVer{0, 5, 0}).NextPatch(); got != (SemVer{0, 5, 1}) { t.Errorf("NextPatch = %v; want 0.5.1", got) } if got := (SemVer{0, 5, 0}).String(); got != "0.5.0" { t.Errorf("String = %q; want 0.5.0", got) } } func TestSplitIteration(t *testing.T) { tgt, n, ok := SplitIteration("0.5.0-3") if !ok || tgt != (SemVer{0, 5, 0}) || n != 3 { t.Fatalf("SplitIteration(0.5.0-3) = %v, %d, %v", tgt, n, ok) } if got := IterationVersion(SemVer{0, 5, 0}, 4); got != "0.5.0-4" { t.Errorf("IterationVersion = %q; want 0.5.0-4", got) } bad := []string{"de2766f8", "0.5.0", "0.5.0-0", "0.5.0-03", "0.5.0-x", "0.5.0-3-4", "0.5.0-", ""} for _, s := range bad { if _, _, ok := SplitIteration(s); ok { t.Errorf("SplitIteration(%q) accepted; want refused", s) } } }