package update import ( "strings" "testing" ) // TestParseVersion 验证 parseVersion 能够解析各种版本号格式,包括带 v/V 前缀、预发布和构建元数据 func TestParseVersion(t *testing.T) { tests := []struct { input string want string }{ {"v1.2.3", "1.2.3"}, {"V1.2.3", "1.2.3"}, {"1.2.3-beta.1", "1.2.3-beta.1"}, {"v1.2.3+meta", "1.2.3+meta"}, {"1.2.3-pre.1+build.123", "1.2.3-pre.1+build.123"}, {" v2.0.0 ", "2.0.0"}, {"invalid", ""}, } for _, tt := range tests { got, err := parseVersion(strings.TrimSpace(tt.input)) if tt.want == "" { if err == nil { t.Errorf("parseVersion(%q) expected error, got %v", tt.input, got) } } else { if err != nil { t.Errorf("parseVersion(%q) unexpected error: %v", tt.input, err) continue } if got.String() != tt.want { t.Errorf("parseVersion(%q) = %q, want %q", tt.input, got.String(), tt.want) } } } } // TestNeedUpdate 验证 needUpdate 在不同版本组合下的判断 func TestNeedUpdate(t *testing.T) { tests := []struct { current string latest string want bool }{ {"1.0.0", "1.0.1", true}, {"v1.0.0", "1.1.0", true}, {"1.2.3", "1.2.3", false}, {"1.2.4", "1.2.3", false}, {"1.2.3-beta", "1.2.3", true}, {"1.2.3", "1.2.3-beta", false}, {"0.0.5", "0.0.6+build.1", true}, {"0.0.6", "v0.0.6+build.1", false}, } for _, tt := range tests { cur, err := parseVersion(strings.TrimSpace(tt.current)) if err != nil { t.Fatalf("parseVersion(%q) error: %v", tt.current, err) } lat, err := parseVersion(strings.TrimSpace(tt.latest)) if err != nil { t.Fatalf("parseVersion(%q) error: %v", tt.latest, err) } got := needUpdate(cur, lat) if got != tt.want { t.Errorf("needUpdate(%q, %q) = %v, want %v", tt.current, tt.latest, got, tt.want) } } }