package updater import "testing" func TestParseVersion(t *testing.T) { cases := []struct { in string want Version }{ {"v1.2.0", Version{1, 2, 0, ""}}, {"1.2.0", Version{1, 2, 0, ""}}, {"1.2", Version{1, 2, 0, ""}}, {"1", Version{1, 0, 0, ""}}, {"v1.2.0-rc1", Version{1, 2, 0, "rc1"}}, {"1.2.0+build7", Version{1, 2, 0, ""}}, {" v0.1.0 ", Version{0, 1, 0, ""}}, } for _, tc := range cases { got, err := ParseVersion(tc.in) if err != nil { t.Errorf("ParseVersion(%q) errored: %v", tc.in, err) continue } if got != tc.want { t.Errorf("ParseVersion(%q) = %+v, want %+v", tc.in, got, tc.want) } } for _, in := range []string{"", "v", "abc", "1.2.3.4", "1.x", "-1.0.0"} { if got, err := ParseVersion(in); err == nil { t.Errorf("ParseVersion(%q) = %+v, want error", in, got) } } } func TestIsNewer(t *testing.T) { yes := [][2]string{ {"v1.2.1", "v1.2.0"}, {"v1.3.0", "v1.2.9"}, {"v2.0.0", "v1.99.99"}, {"v1.2.0", "v1.2.0-rc1"}, } for _, tc := range yes { if !IsNewer(tc[0], tc[1]) { t.Errorf("IsNewer(%q, %q) = false, want true", tc[0], tc[1]) } } no := [][2]string{ {"v1.2.0", "v1.2.0"}, {"v1.2.0", "v1.2.1"}, {"v1.2.0-rc1", "v1.2.0"}, // An unreadable tag must never trigger an update offer. {"garbage", "v1.2.0"}, {"v1.2.0", "garbage"}, {"", "v1.0.0"}, } for _, tc := range no { if IsNewer(tc[0], tc[1]) { t.Errorf("IsNewer(%q, %q) = true, want false", tc[0], tc[1]) } } }