list_test.go 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package version
  2. import (
  3. "sort"
  4. "testing"
  5. )
  6. func TestListSort(t *testing.T) {
  7. type TestCase struct {
  8. Input List
  9. Expected List
  10. }
  11. testCases := []TestCase{
  12. {
  13. Input: List{MustParse("1.1.1"), MustParse("1.0.1"), MustParse("1.1.0"), MustParse("1.0.0")},
  14. Expected: List{MustParse("1.0.0"), MustParse("1.0.1"), MustParse("1.1.0"), MustParse("1.1.1")},
  15. },
  16. {
  17. Input: List{MustParse("4.0.0"), MustParse("3.0.0"), MustParse("2.0.0"), MustParse("1.0.0")},
  18. Expected: List{MustParse("1.0.0"), MustParse("2.0.0"), MustParse("3.0.0"), MustParse("4.0.0")},
  19. },
  20. {
  21. Input: List{MustParse("2.0.4"), MustParse("1.2.4"), MustParse("1.2.3"), MustParse("1.3.1")},
  22. Expected: List{MustParse("1.2.3"), MustParse("1.2.4"), MustParse("1.3.1"), MustParse("2.0.4")},
  23. },
  24. }
  25. for i, testCase := range testCases {
  26. actual := List{}
  27. actual = append(actual, testCase.Input...)
  28. sort.Stable(actual)
  29. ok := true
  30. for j, v := range actual {
  31. expected := testCase.Expected[j]
  32. cmp := v.Compare(expected)
  33. if cmp != 0 {
  34. ok = false
  35. t.Errorf("test %d failed at position %d (expected %s, got %s)", i, j, expected, actual)
  36. }
  37. }
  38. if ok {
  39. t.Logf("test %d passed", i)
  40. }
  41. }
  42. }
  43. func TestList_Match(t *testing.T) {
  44. type TestCase struct {
  45. Input List
  46. Constraint *Constraint
  47. Expected List
  48. }
  49. testCases := []TestCase{
  50. {
  51. Input: List{MustParse("1.0.0"), MustParse("1.1.0"), MustParse("2.0.2"), MustParse("3.4.5")},
  52. Expected: List{MustParse("1.0.0"), MustParse("1.1.0"), MustParse("2.0.2"), MustParse("3.4.5")},
  53. },
  54. {
  55. Input: List{MustParse("1.0.0"), MustParse("1.1.0"), MustParse("2.0.2"), MustParse("3.4.5")},
  56. Constraint: &Constraint{Gt: MustParse("1.0.0")},
  57. Expected: List{MustParse("1.1.0"), MustParse("2.0.2"), MustParse("3.4.5")},
  58. },
  59. {
  60. Input: List{MustParse("1.0.0"), MustParse("1.1.0"), MustParse("2.0.2"), MustParse("3.4.5")},
  61. Constraint: &Constraint{Lt: MustParse("3.0.0")},
  62. Expected: List{MustParse("1.0.0"), MustParse("1.1.0"), MustParse("2.0.2")},
  63. },
  64. {
  65. Input: List{MustParse("1.0.0"), MustParse("1.1.0"), MustParse("2.0.2"), MustParse("3.4.5")},
  66. Constraint: &Constraint{Gte: MustParse("2.0.2")},
  67. Expected: List{MustParse("2.0.2"), MustParse("3.4.5")},
  68. },
  69. }
  70. for i, testCase := range testCases {
  71. actual := testCase.Input.Match(testCase.Constraint)
  72. ok := true
  73. for j, v := range actual {
  74. expected := testCase.Expected[j]
  75. cmp := v.Compare(expected)
  76. if cmp != 0 {
  77. ok = false
  78. t.Errorf("test %d failed at position %d (expected %s, got %s)", i, j, expected, actual)
  79. }
  80. }
  81. if ok {
  82. t.Logf("test %d passed", i)
  83. }
  84. }
  85. }