98 lines
2.6 KiB
Go
98 lines
2.6 KiB
Go
package version
|
|
|
|
import (
|
|
"sort"
|
|
"testing"
|
|
)
|
|
|
|
func TestListSort(t *testing.T) {
|
|
type TestCase struct {
|
|
Input List
|
|
Expected List
|
|
}
|
|
|
|
testCases := []TestCase{
|
|
{
|
|
Input: List{MustParse("1.1.1"), MustParse("1.0.1"), MustParse("1.1.0"), MustParse("1.0.0")},
|
|
Expected: List{MustParse("1.0.0"), MustParse("1.0.1"), MustParse("1.1.0"), MustParse("1.1.1")},
|
|
},
|
|
{
|
|
Input: List{MustParse("4.0.0"), MustParse("3.0.0"), MustParse("2.0.0"), MustParse("1.0.0")},
|
|
Expected: List{MustParse("1.0.0"), MustParse("2.0.0"), MustParse("3.0.0"), MustParse("4.0.0")},
|
|
},
|
|
{
|
|
Input: List{MustParse("2.0.4"), MustParse("1.2.4"), MustParse("1.2.3"), MustParse("1.3.1")},
|
|
Expected: List{MustParse("1.2.3"), MustParse("1.2.4"), MustParse("1.3.1"), MustParse("2.0.4")},
|
|
},
|
|
}
|
|
|
|
for i, testCase := range testCases {
|
|
actual := List{}
|
|
actual = append(actual, testCase.Input...)
|
|
|
|
sort.Stable(actual)
|
|
|
|
ok := true
|
|
for j, v := range actual {
|
|
expected := testCase.Expected[j]
|
|
cmp := v.Compare(expected)
|
|
if cmp != 0 {
|
|
ok = false
|
|
t.Errorf("test %d failed at position %d (expected %s, got %s)", i, j, expected, actual)
|
|
}
|
|
}
|
|
|
|
if ok {
|
|
t.Logf("test %d passed", i)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestList_Match(t *testing.T) {
|
|
type TestCase struct {
|
|
Input List
|
|
Constraint *Constraint
|
|
Expected List
|
|
}
|
|
|
|
testCases := []TestCase{
|
|
{
|
|
Input: List{MustParse("1.0.0"), MustParse("1.1.0"), MustParse("2.0.2"), MustParse("3.4.5")},
|
|
Expected: List{MustParse("1.0.0"), MustParse("1.1.0"), MustParse("2.0.2"), MustParse("3.4.5")},
|
|
},
|
|
{
|
|
Input: List{MustParse("1.0.0"), MustParse("1.1.0"), MustParse("2.0.2"), MustParse("3.4.5")},
|
|
Constraint: &Constraint{Gt: MustParse("1.0.0")},
|
|
Expected: List{MustParse("1.1.0"), MustParse("2.0.2"), MustParse("3.4.5")},
|
|
},
|
|
{
|
|
Input: List{MustParse("1.0.0"), MustParse("1.1.0"), MustParse("2.0.2"), MustParse("3.4.5")},
|
|
Constraint: &Constraint{Lt: MustParse("3.0.0")},
|
|
Expected: List{MustParse("1.0.0"), MustParse("1.1.0"), MustParse("2.0.2")},
|
|
},
|
|
{
|
|
Input: List{MustParse("1.0.0"), MustParse("1.1.0"), MustParse("2.0.2"), MustParse("3.4.5")},
|
|
Constraint: &Constraint{Gte: MustParse("2.0.2")},
|
|
Expected: List{MustParse("2.0.2"), MustParse("3.4.5")},
|
|
},
|
|
}
|
|
|
|
for i, testCase := range testCases {
|
|
actual := testCase.Input.Match(testCase.Constraint)
|
|
|
|
ok := true
|
|
for j, v := range actual {
|
|
expected := testCase.Expected[j]
|
|
cmp := v.Compare(expected)
|
|
if cmp != 0 {
|
|
ok = false
|
|
t.Errorf("test %d failed at position %d (expected %s, got %s)", i, j, expected, actual)
|
|
}
|
|
}
|
|
|
|
if ok {
|
|
t.Logf("test %d passed", i)
|
|
}
|
|
}
|
|
}
|