parse_test.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package version
  2. import (
  3. "errors"
  4. "testing"
  5. )
  6. func TestVersion_Parse(t *testing.T) {
  7. type TestCase struct {
  8. Input string
  9. Expected Version
  10. Err error
  11. }
  12. testCases := []TestCase{
  13. {Input: "0.0.0", Expected: Version{Text: "0.0.0"}},
  14. {Input: "1.0.0", Expected: Version{Major: 1, Text: "1.0.0"}},
  15. {Input: "0.1.0", Expected: Version{Minor: 1, Text: "0.1.0"}},
  16. {Input: "0.0.1", Expected: Version{Patch: 1, Text: "0.0.1"}},
  17. {Input: "10.20.30", Expected: Version{Major: 10, Minor: 20, Patch: 30, Text: "10.20.30"}},
  18. {Input: "27.31.15", Expected: Version{Major: 27, Minor: 31, Patch: 15, Text: "27.31.15"}},
  19. {Input: "v1.2.3", Expected: Version{Major: 1, Minor: 2, Patch: 3, Text: "v1.2.3"}},
  20. {Input: "v1", Expected: Version{Major: 1, Text: "v1"}},
  21. {Input: "v2.31", Expected: Version{Major: 2, Minor: 31, Text: "v2.31"}},
  22. {Input: "v1.2.0a", Expected: Version{Major: 1, Minor: 2, Extension: "a", Text: "v1.2.0a"}},
  23. {Input: "v1.2a", Expected: Version{Major: 1, Minor: 2, Extension: "a", Text: "v1.2a"}},
  24. {Input: "v1-alpha2", Expected: Version{Major: 1, Extension: "-alpha2", Text: "v1-alpha2"}},
  25. {Input: "invalid version", Err: ErrInvalidVersion},
  26. {Input: "v.01", Err: ErrInvalidVersion},
  27. {Input: "v-any", Err: ErrInvalidVersion},
  28. }
  29. for i, testCase := range testCases {
  30. actual, err := Parse(testCase.Input)
  31. if testCase.Err != nil {
  32. if err == nil {
  33. t.Errorf("test %d failed (expected error %s, actual nil)", i, testCase.Err)
  34. } else if !errors.Is(err, testCase.Err) {
  35. t.Errorf("test %d failed (expected error %s, actual error %s)", i, testCase.Err, err)
  36. } else {
  37. t.Logf("test %d passed with error %s for %q\n", i, err, testCase.Input)
  38. }
  39. } else if err != nil {
  40. t.Errorf("test %d failed (expected error nil, actual error %s)", i, err)
  41. } else if actual.Major != testCase.Expected.Major || actual.Minor != testCase.Expected.Minor || actual.Patch != testCase.Expected.Patch || actual.Text != testCase.Expected.Text {
  42. t.Errorf("test %d failed (expected %v, actual %v)", i, testCase.Expected, actual)
  43. } else {
  44. t.Logf("test %d passed with %v\n", i, actual)
  45. }
  46. }
  47. }