package main import ( "testing" . "gopkg.in/check.v1" ) func Test(t *testing.T) { TestingT(t) } var _ = Suite(&VersionSuite{}) type VersionSuite struct{} var versionParseTests = []struct { major, minor, patch int s string }{ {-1, -1, -1, "v"}, {-1, -1, -1, "v-1"}, {-1, -1, -1, "v01"}, {-1, -1, -1, "v1.01"}, {-1, -1, -1, "a1"}, {-1, -1, -1, "v1a"}, {-1, -1, -1, "v1..2"}, {-1, -1, -1, "v1.2.3.4"}, {-1, -1, -1, "v1."}, {-1, -1, -1, "v1.2."}, {-1, -1, -1, "v1.2.3."}, {0, -1, -1, "v0"}, {1, -1, -1, "v1"}, {1, 2, -1, "v1.2"}, {1, 2, 3, "v1.2.3"}, {12, 34, 56, "v12.34.56"}, } func (s *VersionSuite) TestParse(c *C) { for _, t := range versionParseTests { got, ok := parseVersion(t.s) if t.major == -1 { if ok || got != InvalidVersion { c.Fatalf("version %q is invalid but parsed as %#v", t.s, got) } } else { want := Version{t.major, t.minor, t.patch} if got != want { c.Fatalf("version %q must parse as %#v, got %#v", t.s, want, got) } if got.String() != t.s { c.Fatalf("version %q got parsed as %#v and stringified as %q", t.s, got, got.String()) } } } } var versionLessTests = []struct { oneMajor, oneMinor, onePatch int twoMajor, twoMinor, twoPatch int less bool }{ {0, 0, 0, 0, 0, 0, false}, {1, 0, 0, 1, 0, 0, false}, {1, 0, 0, 1, 1, 0, true}, {1, 0, 0, 2, 0, 0, true}, {0, 1, 0, 0, 1, 0, false}, {0, 1, 0, 0, 1, 1, true}, {0, 0, 0, 0, 2, 0, true}, {0, 0, 1, 0, 0, 1, false}, {0, 0, 1, 0, 0, 2, true}, } func (s *VersionSuite) TestLess(c *C) { for _, t := range versionLessTests { one := Version{t.oneMajor, t.oneMinor, t.onePatch} two := Version{t.twoMajor, t.twoMinor, t.twoPatch} if one.Less(two) != t.less { c.Fatalf("version %s < %s returned %v", one, two, !t.less) } } } var versionContainsTests = []struct { oneMajor, oneMinor, onePatch int twoMajor, twoMinor, twoPatch int contains bool }{ {12, 34, 56, 12, 34, 56, true}, {12, 34, 56, 12, 34, 78, false}, {12, 34, -1, 12, 34, 56, true}, {12, 34, -1, 12, 78, 56, false}, {12, -1, -1, 12, 34, 56, true}, {12, -1, -1, 78, 34, 56, false}, } func (s *VersionSuite) TestContains(c *C) { for _, t := range versionContainsTests { one := Version{t.oneMajor, t.oneMinor, t.onePatch} two := Version{t.twoMajor, t.twoMinor, t.twoPatch} if one.Contains(two) != t.contains { c.Fatalf("version %s.Contains(%s) returned %v", one, two, !t.contains) } } } func (s *VersionSuite) TestIsValid(c *C) { c.Assert(InvalidVersion.IsValid(), Equals, false) c.Assert(Version{0, 0, 0}.IsValid(), Equals, true) }