Stable APIs for Go. https://go.code.as
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

115 lines
2.6 KiB

  1. package main
  2. import (
  3. "testing"
  4. . "gopkg.in/check.v1"
  5. )
  6. func Test(t *testing.T) { TestingT(t) }
  7. var _ = Suite(&VersionSuite{})
  8. type VersionSuite struct{}
  9. var versionParseTests = []struct {
  10. major, minor, patch int
  11. s string
  12. }{
  13. {-1, -1, -1, "v"},
  14. {-1, -1, -1, "v-1"},
  15. {-1, -1, -1, "v01"},
  16. {-1, -1, -1, "v1.01"},
  17. {-1, -1, -1, "a1"},
  18. {-1, -1, -1, "v1a"},
  19. {-1, -1, -1, "v1..2"},
  20. {-1, -1, -1, "v1.2.3.4"},
  21. {-1, -1, -1, "v1."},
  22. {-1, -1, -1, "v1.2."},
  23. {-1, -1, -1, "v1.2.3."},
  24. {0, -1, -1,
  25. "v0"},
  26. {1, -1, -1,
  27. "v1"},
  28. {1, 2, -1,
  29. "v1.2"},
  30. {1, 2, 3,
  31. "v1.2.3"},
  32. {12, 34, 56,
  33. "v12.34.56"},
  34. }
  35. func (s *VersionSuite) TestParse(c *C) {
  36. for _, t := range versionParseTests {
  37. got, ok := parseVersion(t.s)
  38. if t.major == -1 {
  39. if ok || got != InvalidVersion {
  40. c.Fatalf("version %q is invalid but parsed as %#v", t.s, got)
  41. }
  42. } else {
  43. want := Version{t.major, t.minor, t.patch}
  44. if got != want {
  45. c.Fatalf("version %q must parse as %#v, got %#v", t.s, want, got)
  46. }
  47. if got.String() != t.s {
  48. c.Fatalf("version %q got parsed as %#v and stringified as %q", t.s, got, got.String())
  49. }
  50. }
  51. }
  52. }
  53. var versionLessTests = []struct {
  54. oneMajor, oneMinor, onePatch int
  55. twoMajor, twoMinor, twoPatch int
  56. less bool
  57. }{
  58. {0, 0, 0, 0, 0, 0, false},
  59. {1, 0, 0, 1, 0, 0, false},
  60. {1, 0, 0, 1, 1, 0, true},
  61. {1, 0, 0, 2, 0, 0, true},
  62. {0, 1, 0, 0, 1, 0, false},
  63. {0, 1, 0, 0, 1, 1, true},
  64. {0, 0, 0, 0, 2, 0, true},
  65. {0, 0, 1, 0, 0, 1, false},
  66. {0, 0, 1, 0, 0, 2, true},
  67. }
  68. func (s *VersionSuite) TestLess(c *C) {
  69. for _, t := range versionLessTests {
  70. one := Version{t.oneMajor, t.oneMinor, t.onePatch}
  71. two := Version{t.twoMajor, t.twoMinor, t.twoPatch}
  72. if one.Less(two) != t.less {
  73. c.Fatalf("version %s < %s returned %v", one, two, !t.less)
  74. }
  75. }
  76. }
  77. var versionContainsTests = []struct {
  78. oneMajor, oneMinor, onePatch int
  79. twoMajor, twoMinor, twoPatch int
  80. contains bool
  81. }{
  82. {12, 34, 56, 12, 34, 56, true},
  83. {12, 34, 56, 12, 34, 78, false},
  84. {12, 34, -1, 12, 34, 56, true},
  85. {12, 34, -1, 12, 78, 56, false},
  86. {12, -1, -1, 12, 34, 56, true},
  87. {12, -1, -1, 78, 34, 56, false},
  88. }
  89. func (s *VersionSuite) TestContains(c *C) {
  90. for _, t := range versionContainsTests {
  91. one := Version{t.oneMajor, t.oneMinor, t.onePatch}
  92. two := Version{t.twoMajor, t.twoMinor, t.twoPatch}
  93. if one.Contains(two) != t.contains {
  94. c.Fatalf("version %s.Contains(%s) returned %v", one, two, !t.contains)
  95. }
  96. }
  97. }
  98. func (s *VersionSuite) TestIsValid(c *C) {
  99. c.Assert(InvalidVersion.IsValid(), Equals, false)
  100. c.Assert(Version{0, 0, 0}.IsValid(), Equals, true)
  101. }