package upgrade import "testing" func TestCompare(t *testing.T) { cases := []struct { a, b string want int }{ {"1.0.0", "1.0.0", 0}, {"v1.0.0", "1.0.0", 0}, {"1.0.0", "1.0.1", -1}, {"1.2.0", "1.10.0", -1}, {"1.0.9", "1.0.10", -1}, {"2.0.0", "1.9.9", 1}, {"1.0.0-rc1", "1.0.0", -1}, {"1.0", "1.0.0", 0}, } for _, c := range cases { if got := Compare(c.a, c.b); got != c.want { t.Errorf("Compare(%q,%q)=%d 期望 %d", c.a, c.b, got, c.want) } } } func TestIsDev(t *testing.T) { for _, v := range []string{"", "dev", "1.0.0-dev", "1.0.0-dirty"} { if !(Info{Version: v}).IsDev() { t.Errorf("%q 应识别为开发版", v) } } for _, v := range []string{"1.0.0", "v1.2.3", "2.0.0-rc1"} { if (Info{Version: v}).IsDev() { t.Errorf("%q 不应识别为开发版", v) } } } func TestValidVersion(t *testing.T) { for _, v := range []string{"1", "1.2", "1.2.3", "v1.2.3", "0.0.1"} { if !ValidVersion(v) { t.Errorf("%q 应为合法版本", v) } } for _, v := range []string{"", "abc", "v"} { if ValidVersion(v) { t.Errorf("%q 应为非法版本", v) } } } func TestPickRelease(t *testing.T) { m := &Manifest{Latest: "1.1.0", Releases: []Release{ {Version: "1.1.0", OS: "plan9", Arch: "mips", URL: "https://x/other"}, {Version: "1.0.0", URL: "https://x/all"}, }} if r := pickRelease(m, "1.0.0"); r == nil || r.URL != "https://x/all" { t.Errorf("未标注平台的版本应可选,实际 %+v", r) } if r := pickRelease(m, "1.1.0"); r != nil { t.Error("平台不匹配不应被选中") } if r := pickRelease(m, "9.9.9"); r != nil { t.Error("清单外的版本不应被选中") } }