Pulse/internal/utils/helpers_test.go
2026-03-18 16:06:30 +00:00

115 lines
2.4 KiB
Go

package utils
import "testing"
// --- IsHexString ---
func TestIsHexString(t *testing.T) {
tests := []struct {
input string
expected bool
}{
{"abcdef1234567890", true},
{"ABCDEF", true},
{"0", true},
{"", false},
{"xyz", false},
{"abc def", false},
{"12g4", false},
}
for _, tt := range tests {
got := IsHexString(tt.input)
if got != tt.expected {
t.Errorf("IsHexString(%q) = %v, want %v", tt.input, got, tt.expected)
}
}
}
// --- CompareVersions prerelease ---
func TestCompareVersions_Prerelease(t *testing.T) {
tests := []struct {
a, b string
expected int
}{
// Stable > prerelease
{"4.33.1", "4.33.1-rc1", 1},
{"4.33.1-rc1", "4.33.1", -1},
// Numeric prerelease comparison
{"4.33.1-rc2", "4.33.1-rc1", 1},
// More prerelease identifiers = higher
{"4.33.1-rc.1.1", "4.33.1-rc.1", 1},
// Both prerelease, same
{"4.33.1-rc1", "4.33.1-rc1", 0},
}
for _, tt := range tests {
got := CompareVersions(tt.a, tt.b)
if got != tt.expected {
t.Errorf("CompareVersions(%q, %q) = %d, want %d", tt.a, tt.b, got, tt.expected)
}
}
}
// --- CompareVersions build metadata ---
func TestCompareVersions_BuildMetadata(t *testing.T) {
// Build metadata MUST be ignored per semver
tests := []struct {
a, b string
expected int
}{
{"4.36.2+dirty", "4.36.2", 0},
{"4.36.2+git.14", "4.36.2+git.1", 0},
{"4.36.2+build123", "4.36.2+build789", 0},
}
for _, tt := range tests {
got := CompareVersions(tt.a, tt.b)
if got != tt.expected {
t.Errorf("CompareVersions(%q, %q) = %d, want %d", tt.a, tt.b, got, tt.expected)
}
}
}
// --- parseVersionNumber ---
func TestParseVersionNumber(t *testing.T) {
tests := []struct {
input string
expected int
}{
{"4", 4},
{"33", 33},
{"", 0},
{"abc", 0},
{"4abc", 4},
{" 4 ", 4},
}
for _, tt := range tests {
got := parseVersionNumber(tt.input)
if got != tt.expected {
t.Errorf("parseVersionNumber(%q) = %d, want %d", tt.input, got, tt.expected)
}
}
}
// --- parseNumericIdentifier ---
func TestParseNumericIdentifier(t *testing.T) {
tests := []struct {
input string
expected int
isNum bool
}{
{"42", 42, true},
{"0", 0, true},
{"", 0, false},
{"abc", 0, false},
{"12abc", 0, false},
}
for _, tt := range tests {
got, ok := parseNumericIdentifier(tt.input)
if got != tt.expected || ok != tt.isNum {
t.Errorf("parseNumericIdentifier(%q) = (%d, %v), want (%d, %v)", tt.input, got, ok, tt.expected, tt.isNum)
}
}
}