Aneurin Barker Snook před 11 měsíci
rodič
revize
e69de8b117
4 změnil soubory, kde provedl 73 přidání a 5 odebrání
  1. 19 0
      list.go
  2. 49 0
      list_test.go
  3. 2 2
      parse_test.go
  4. 3 3
      version_test.go

+ 19 - 0
list.go

@@ -0,0 +1,19 @@
+package version
+
+// List is a slice of versions that implements sort.Interface.
+type List []*Version
+
+func (list List) Len() int {
+	return len(list)
+}
+
+func (list List) Less(i, j int) bool {
+	return list[i].Less(list[j])
+}
+
+func (list List) Swap(i, j int) {
+	a := list[i]
+	b := list[j]
+	list[i] = b
+	list[j] = a
+}

+ 49 - 0
list_test.go

@@ -0,0 +1,49 @@
+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)
+		}
+	}
+}

+ 2 - 2
parse_test.go

@@ -39,14 +39,14 @@ func TestVersion_Parse(t *testing.T) {
 			} else if !errors.Is(err, testCase.Err) {
 				t.Errorf("test %d failed (expected error %q, actual error %q)", i, testCase.Err, err)
 			} else {
-				t.Logf("test %d succeeded with error %q for %q\n", i, testCase.Err, testCase.Input)
+				t.Logf("test %d passed with error %q for %q\n", i, testCase.Err, testCase.Input)
 			}
 		} else if err != nil {
 			t.Errorf("test %d failed (expected error nil, actual error %q)", i, err)
 		} else if actual.Major != testCase.Expected.Major || actual.Minor != testCase.Expected.Minor || actual.Patch != testCase.Expected.Patch || actual.Text != testCase.Expected.Text {
 			t.Errorf("test %d failed (expected %v, actual %v)", i, testCase.Expected, actual)
 		} else {
-			t.Logf("test %d succeeded with %v\n", i, actual)
+			t.Logf("test %d passed with %v\n", i, actual)
 		}
 	}
 }

+ 3 - 3
version_test.go

@@ -29,7 +29,7 @@ func TestVersion_String(t *testing.T) {
 		if actual != testCase.Expected {
 			t.Errorf("test %d failed (expected %s, actual %s)", i, testCase.Expected, actual)
 		} else {
-			t.Logf("test %d succeeded with %s\n", i, actual)
+			t.Logf("test %d passed with %s\n", i, actual)
 		}
 	}
 }
@@ -62,7 +62,7 @@ func TestVersion_Compare(t *testing.T) {
 		if actual != testCase.Expected {
 			t.Errorf("test %d failed (expected %d, actual %d)", i, testCase.Expected, actual)
 		} else {
-			t.Logf("test %d succeeded with %d", i, actual)
+			t.Logf("test %d passed with %d", i, actual)
 		}
 	}
 }
@@ -95,7 +95,7 @@ func TestVersion_Less(t *testing.T) {
 		if actual != testCase.Expected {
 			t.Errorf("test %d failed (expected %v, actual %v)", i, testCase.Expected, actual)
 		} else {
-			t.Logf("test %d succeeded with %v", i, actual)
+			t.Logf("test %d passed with %v", i, actual)
 		}
 	}
 }