Files
soft_quay/core/domain/semver_test.go
T

80 lines
1.6 KiB
Go

package domain
import (
"errors"
"testing"
)
func TestSemVerPrecedence(t *testing.T) {
ordered := []string{
"1.0.0-alpha",
"1.0.0-alpha.1",
"1.0.0-alpha.beta",
"1.0.0-beta",
"1.0.0-beta.2",
"1.0.0-beta.11",
"1.0.0-rc.1",
"1.0.0",
"1.0.1",
"1.1.0",
"2.0.0",
}
for index := 0; index < len(ordered)-1; index++ {
comparison, err := CompareSemVer(ordered[index], ordered[index+1])
if err != nil {
t.Fatalf("CompareSemVer() error = %v", err)
}
if comparison >= 0 {
t.Fatalf("%q should precede %q", ordered[index], ordered[index+1])
}
}
}
func TestSemVerIgnoresBuildMetadata(t *testing.T) {
comparison, err := CompareSemVer("1.2.3+build.1", "1.2.3+build.99")
if err != nil {
t.Fatalf("CompareSemVer() error = %v", err)
}
if comparison != 0 {
t.Fatalf("comparison = %d, want 0", comparison)
}
}
func TestSemVerSupportsLargeNumericIdentifiers(t *testing.T) {
comparison, err := CompareSemVer(
"999999999999999999999999999.0.0",
"1000000000000000000000000000.0.0",
)
if err != nil {
t.Fatalf("CompareSemVer() error = %v", err)
}
if comparison >= 0 {
t.Fatalf("comparison = %d, want negative", comparison)
}
}
func TestSemVerRejectsInvalidValues(t *testing.T) {
for _, value := range []string{
"",
"1",
"1.2",
"01.2.3",
"1.02.3",
"1.2.03",
"1.2.3-",
"1.2.3-alpha..1",
"1.2.3-01",
"1.2.3+",
"1.2.3+build..1",
"v1.2.3",
"1.2.3 alpha",
} {
t.Run(value, func(t *testing.T) {
_, err := ParseSemVer(value)
if !errors.Is(err, ErrInvalidSemVer) {
t.Fatalf("ParseSemVer(%q) error = %v, want %v", value, err, ErrInvalidSemVer)
}
})
}
}