version_test.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package version
  2. import (
  3. "testing"
  4. )
  5. func TestVersion_String(t *testing.T) {
  6. type TestCase struct {
  7. Expected string // Expected
  8. Input Version // Input
  9. }
  10. testCases := []TestCase{
  11. {Expected: "0.0.0", Input: Version{}},
  12. {Expected: "1.0.0", Input: Version{Major: 1}},
  13. {Expected: "0.1.0", Input: Version{Minor: 1}},
  14. {Expected: "0.0.1", Input: Version{Patch: 1}},
  15. {Expected: "10.20.30", Input: Version{Major: 10, Minor: 20, Patch: 30}},
  16. {Expected: "27.31.15", Input: Version{Major: 27, Minor: 31, Patch: 15}},
  17. {Expected: "v1.2.3", Input: Version{Major: 1, Minor: 2, Patch: 3, Text: "v1.2.3"}},
  18. {Expected: "v1.2.3", Input: Version{Text: "v1.2.3"}},
  19. {Expected: "v1.2.0a", Input: Version{Major: 1, Minor: 2, Extension: "a", Text: "v1.2.0a"}},
  20. {Expected: "v1-alpha2", Input: Version{Major: 1, Extension: "-alpha2", Text: "v1-alpha2"}},
  21. }
  22. for i, testCase := range testCases {
  23. actual := testCase.Input.String()
  24. if actual != testCase.Expected {
  25. t.Errorf("test %d failed (expected %s, actual %s)", i, testCase.Expected, actual)
  26. } else {
  27. t.Logf("test %d succeeded with %s\n", i, actual)
  28. }
  29. }
  30. }
  31. func TestVersion_Compare(t *testing.T) {
  32. type TestCase struct {
  33. A *Version
  34. B *Version
  35. Expected int
  36. }
  37. testCases := []TestCase{
  38. {A: MustParse("0.0.1"), B: MustParse("0.0.1"), Expected: 0},
  39. {A: MustParse("0.1.0"), B: MustParse("0.1.0"), Expected: 0},
  40. {A: MustParse("1.0.0"), B: MustParse("1.0.0"), Expected: 0},
  41. {A: MustParse("1.0.0"), B: MustParse("0.1.0"), Expected: 1},
  42. {A: MustParse("1.0.0"), B: MustParse("0.0.1"), Expected: 1},
  43. {A: MustParse("1.0.0"), B: MustParse("1.1.0"), Expected: -1},
  44. {A: MustParse("1.0.0"), B: MustParse("1.0.1"), Expected: -1},
  45. {A: MustParse("1.0.0"), B: MustParse("2.0.0"), Expected: -1},
  46. {A: MustParse("1.1.0"), B: MustParse("1.2.0"), Expected: -1},
  47. {A: MustParse("1.1.1"), B: MustParse("1.2.0"), Expected: -1},
  48. {A: MustParse("1.20.0"), B: MustParse("1.2.0"), Expected: 1},
  49. {A: MustParse("1.20.0"), B: MustParse("1.2.20"), Expected: 1},
  50. {A: MustParse("1.20.0"), B: MustParse("1.20.1"), Expected: -1},
  51. }
  52. for i, testCase := range testCases {
  53. actual := testCase.A.Compare(testCase.B)
  54. if actual != testCase.Expected {
  55. t.Errorf("test %d failed (expected %d, actual %d)", i, testCase.Expected, actual)
  56. } else {
  57. t.Logf("test %d succeeded with %d", i, actual)
  58. }
  59. }
  60. }
  61. func TestVersion_Less(t *testing.T) {
  62. type TestCase struct {
  63. A *Version
  64. B *Version
  65. Expected bool
  66. }
  67. testCases := []TestCase{
  68. {A: MustParse("0.0.1"), B: MustParse("0.0.1"), Expected: false},
  69. {A: MustParse("0.1.0"), B: MustParse("0.1.0"), Expected: false},
  70. {A: MustParse("1.0.0"), B: MustParse("1.0.0"), Expected: false},
  71. {A: MustParse("1.0.0"), B: MustParse("0.1.0"), Expected: false},
  72. {A: MustParse("1.0.0"), B: MustParse("0.0.1"), Expected: false},
  73. {A: MustParse("1.0.0"), B: MustParse("1.1.0"), Expected: true},
  74. {A: MustParse("1.0.0"), B: MustParse("1.0.1"), Expected: true},
  75. {A: MustParse("1.0.0"), B: MustParse("2.0.0"), Expected: true},
  76. {A: MustParse("1.1.0"), B: MustParse("1.2.0"), Expected: true},
  77. {A: MustParse("1.1.1"), B: MustParse("1.2.0"), Expected: true},
  78. {A: MustParse("1.20.0"), B: MustParse("1.2.0"), Expected: false},
  79. {A: MustParse("1.20.0"), B: MustParse("1.2.20"), Expected: false},
  80. {A: MustParse("1.20.0"), B: MustParse("1.20.1"), Expected: true},
  81. }
  82. for i, testCase := range testCases {
  83. actual := testCase.A.Less(testCase.B)
  84. if actual != testCase.Expected {
  85. t.Errorf("test %d failed (expected %v, actual %v)", i, testCase.Expected, actual)
  86. } else {
  87. t.Logf("test %d succeeded with %v", i, actual)
  88. }
  89. }
  90. }