package config import "testing" func TestCompareVersions(t *testing.T) { tests := []struct { a, b string want int }{ {"v1.0.0", "v1.0.0", 0}, {"1.0.0", "v1.0.0", 0}, // 'v' prefix optional {"v1.0.0", "v1.0.1", -1}, {"v1.0.1", "v1.0.0", 1}, {"v1.1.0", "v1.0.99", 1}, {"v2.0.0", "v1.99.99", 1}, {"v0.3.0-dev", "v0.3.0", 0}, // pre-release suffix ignored {"v0.2.5", "v0.3.0", -1}, {"v0.3.0", "v0.2.999", 1}, {"v1.2", "v1.2.0", 0}, // missing component defaults to 0 {"v1", "v1.0.0", 0}, } for _, tt := range tests { got, err := CompareVersions(tt.a, tt.b) if err != nil { t.Errorf("CompareVersions(%q, %q): %v", tt.a, tt.b, err) continue } if got != tt.want { t.Errorf("CompareVersions(%q, %q) = %d, want %d", tt.a, tt.b, got, tt.want) } } } func TestCompareVersionsRejectsGarbage(t *testing.T) { bad := []string{ "not-a-version", "v.1.2", "vabc", "", } for _, s := range bad { if _, err := CompareVersions(s, "v1.0.0"); err == nil { t.Errorf("CompareVersions(%q, ...) accepted, want error", s) } } }