80 lines
1.6 KiB
Go
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)
|
|
}
|
|
})
|
|
}
|
|
}
|