Add package semver

Signed-off-by: Jan Tytgat <jan.tytgat@corelayer.eu>
This commit is contained in:
Jan Tytgat
2025-04-15 09:36:26 +02:00
parent 30a3122202
commit 41bf5b86ea
5 changed files with 390 additions and 0 deletions

210
pkg/semver/version_test.go Normal file
View File

@ -0,0 +1,210 @@
package semver
import (
"reflect"
"testing"
)
var validVersionTests = []struct {
name string
input string
version Version
inputErr bool
commit string
date string
release string
full string
number string
}{
{
name: "stable",
input: "0.1.0",
version: Version{
Major: 0,
Minor: 1,
},
inputErr: false,
commit: "",
date: "",
release: "stable",
full: "0.1.0",
number: "0.1.0",
},
{
name: "stable.1",
input: "0.1.1",
version: Version{
Major: 0,
Minor: 1,
Patch: 1,
},
inputErr: false,
commit: "",
date: "",
release: "stable",
full: "0.1.1",
number: "0.1.1",
},
{
name: "stable.1+metadata",
input: "0.1.1+metadata",
version: Version{
Major: 0,
Minor: 1,
Patch: 1,
Metadata: "metadata",
},
inputErr: false,
commit: "metadata",
date: "metadata",
release: "stable",
full: "0.1.1+metadata",
number: "0.1.1",
},
{
name: "stable.1+metadata.date",
input: "0.1.1+metadata.20101112",
version: Version{
Major: 0,
Minor: 1,
Patch: 1,
Metadata: "metadata.20101112",
},
inputErr: false,
commit: "metadata",
date: "20101112",
release: "stable",
full: "0.1.1+metadata.20101112",
number: "0.1.1",
},
{
name: "alpha",
input: "0.1.1-alpha",
version: Version{
Major: 0,
Minor: 1,
Patch: 1,
PreRelease: "alpha",
},
inputErr: false,
commit: "",
release: "alpha",
full: "0.1.1-alpha",
number: "0.1.1",
},
{
name: "alpha.1",
input: "0.1.1-alpha.1",
version: Version{
Major: 0,
Minor: 1,
Patch: 1,
PreRelease: "alpha.1",
},
inputErr: false,
commit: "",
release: "alpha.1",
full: "0.1.1-alpha.1",
number: "0.1.1",
},
}
func TestParse(t *testing.T) {
for _, tt := range validVersionTests {
t.Run(tt.name, func(t *testing.T) {
got, err := Parse(tt.input)
if (err != nil) != tt.inputErr {
t.Errorf("Parse() error = %v, wantErr %v", err, tt.inputErr)
return
}
if !reflect.DeepEqual(got, tt.version) {
t.Errorf("Parse() got = %v, want %v", got, tt.version)
}
})
}
}
func TestVersion_Commit(t *testing.T) {
for _, tt := range validVersionTests {
t.Run(tt.name, func(t *testing.T) {
v := Version{
Major: tt.version.Major,
Minor: tt.version.Minor,
Patch: tt.version.Patch,
PreRelease: tt.version.PreRelease,
Metadata: tt.version.Metadata,
}
if got := v.Commit(); got != tt.commit {
t.Errorf("Commit() = %v, want %v", got, tt.commit)
}
})
}
}
func TestVersion_Date(t *testing.T) {
for _, tt := range validVersionTests {
t.Run(tt.name, func(t *testing.T) {
v := Version{
Major: tt.version.Major,
Minor: tt.version.Minor,
Patch: tt.version.Patch,
PreRelease: tt.version.PreRelease,
Metadata: tt.version.Metadata,
}
if got := v.Date(); got != tt.date {
t.Errorf("Date() = %v, want %v", got, tt.date)
}
})
}
}
func TestVersion_Release(t *testing.T) {
for _, tt := range validVersionTests {
t.Run(tt.name, func(t *testing.T) {
v := Version{
Major: tt.version.Major,
Minor: tt.version.Minor,
Patch: tt.version.Patch,
PreRelease: tt.version.PreRelease,
Metadata: tt.version.Metadata,
}
if got := v.Release(); got != tt.release {
t.Errorf("Release() = %v, want %v", got, tt.release)
}
})
}
}
func TestVersion_String(t *testing.T) {
for _, tt := range validVersionTests {
t.Run(tt.name, func(t *testing.T) {
v := Version{
Major: tt.version.Major,
Minor: tt.version.Minor,
Patch: tt.version.Patch,
PreRelease: tt.version.PreRelease,
Metadata: tt.version.Metadata,
}
if got := v.String(); got != tt.full {
t.Errorf("String() = %v, want %v", got, tt.full)
}
})
}
}
func TestVersion_VersionNumber(t *testing.T) {
for _, tt := range validVersionTests {
t.Run(tt.name, func(t *testing.T) {
v := Version{
Major: tt.version.Major,
Minor: tt.version.Minor,
Patch: tt.version.Patch,
PreRelease: tt.version.PreRelease,
Metadata: tt.version.Metadata,
}
if got := v.Number(); got != tt.number {
t.Errorf("Number() = %v, want %v", got, tt.number)
}
})
}
}