package lexicomai import "testing" func TestParseVersion(t *testing.T) { if got := ParseVersion("7.012").String(); got != "7.12" { t.Errorf("ParseVersion(7.012) = %q, want 7.12", got) } if got := ParseVersion("7").String(); got != "7" { t.Errorf("ParseVersion(7) = %q", got) } } func TestCompareVersions(t *testing.T) { cases := []struct { a, b string want int }{ {"7.12", "7.9", 1}, // семантически больше (в отличие от лексикографии) {"7.9", "7.12", -1}, {"7.5", "7.5", 0}, {"7", "7.0", -1}, // короткая версия меньше при равенстве сегментов } for _, c := range cases { if got := CompareVersions(c.a, c.b); got != c.want { t.Errorf("Compare(%q,%q) = %d, want %d", c.a, c.b, got, c.want) } } } func TestParseDistroName(t *testing.T) { p, err := parseDistroName("ups-7.012-release.sh") if err != nil { t.Fatalf("parse error: %v", err) } if p.Product != "ups" || p.Version != "7.012" || p.Branch != "release" { t.Errorf("unexpected parts %+v", p) } if _, err := parseDistroName("readme.txt"); err == nil { t.Error("non-distro name should error") } } func TestResolveDistro(t *testing.T) { names := []string{"ups-7.009-release.sh", "ups-7.012-release.sh", "ups-7.005-beta.sh", "spr-7.011-release.sh"} // последняя release got, err := ResolveDistro(names, "ups", "", "release") if err != nil || got != "ups-7.012-release.sh" { t.Errorf("latest release: %q, %v", got, err) } // точная версия got, _ = ResolveDistro(names, "ups", "7.009", "release") if got != "ups-7.009-release.sh" { t.Errorf("exact version: %q", got) } // ветка beta got, _ = ResolveDistro(names, "ups", "", "beta") if got != "ups-7.005-beta.sh" { t.Errorf("beta: %q", got) } // отсутствует if _, err := ResolveDistro(names, "ses", "", "release"); err == nil { t.Error("missing product should error") } } func TestNormalizeBranch(t *testing.T) { if b, _ := normalizeBranch(""); b != "release" { t.Errorf("empty branch = %q", b) } if b, _ := normalizeBranch("BETA"); b != "beta" { t.Errorf("BETA = %q", b) } if _, err := normalizeBranch("dev"); err == nil { t.Error("unknown branch should error") } }