1package deb 2 3import ( 4 . "gopkg.in/check.v1" 5) 6 7type VersionSuite struct { 8} 9 10var _ = Suite(&VersionSuite{}) 11 12func (s *VersionSuite) TestParseVersion(c *C) { 13 e, u, d := parseVersion("1.3.4") 14 c.Check([]string{e, u, d}, DeepEquals, []string{"", "1.3.4", ""}) 15 16 e, u, d = parseVersion("4:1.3:4") 17 c.Check([]string{e, u, d}, DeepEquals, []string{"4", "1.3:4", ""}) 18 19 e, u, d = parseVersion("1.3.4-1") 20 c.Check([]string{e, u, d}, DeepEquals, []string{"", "1.3.4", "1"}) 21 22 e, u, d = parseVersion("1.3-pre4-1") 23 c.Check([]string{e, u, d}, DeepEquals, []string{"", "1.3-pre4", "1"}) 24 25 e, u, d = parseVersion("4:1.3-pre4-1") 26 c.Check([]string{e, u, d}, DeepEquals, []string{"4", "1.3-pre4", "1"}) 27} 28 29func (s *VersionSuite) TestCompareLexicographic(c *C) { 30 c.Check(compareLexicographic("", ""), Equals, 0) 31 c.Check(compareLexicographic("pre", "pre"), Equals, 0) 32 33 c.Check(compareLexicographic("pr", "pre"), Equals, -1) 34 c.Check(compareLexicographic("pre", "pr"), Equals, 1) 35 36 c.Check(compareLexicographic("pra", "prb"), Equals, -1) 37 c.Check(compareLexicographic("prb", "pra"), Equals, 1) 38 39 c.Check(compareLexicographic("prx", "pr+"), Equals, -1) 40 c.Check(compareLexicographic("pr+", "prx"), Equals, 1) 41 42 c.Check(compareLexicographic("pr~", "pra"), Equals, -1) 43 c.Check(compareLexicographic("pra", "pr~"), Equals, 1) 44 45 c.Check(compareLexicographic("~~", "~~a"), Equals, -1) 46 c.Check(compareLexicographic("~~a", "~"), Equals, -1) 47 c.Check(compareLexicographic("~", ""), Equals, -1) 48 49 c.Check(compareLexicographic("~~a", "~~"), Equals, 1) 50 c.Check(compareLexicographic("~", "~~a"), Equals, 1) 51 c.Check(compareLexicographic("", "~"), Equals, 1) 52} 53 54func (s *VersionSuite) TestCompareVersionPart(c *C) { 55 c.Check(compareVersionPart("", ""), Equals, 0) 56 c.Check(compareVersionPart("pre", "pre"), Equals, 0) 57 c.Check(compareVersionPart("12", "12"), Equals, 0) 58 c.Check(compareVersionPart("1.3.5", "1.3.5"), Equals, 0) 59 c.Check(compareVersionPart("1.3.5-pre1", "1.3.5-pre1"), Equals, 0) 60 61 c.Check(compareVersionPart("1.0~beta1~svn1245", "1.0~beta1"), Equals, -1) 62 c.Check(compareVersionPart("1.0~beta1", "1.0"), Equals, -1) 63 64 c.Check(compareVersionPart("1.0~beta1", "1.0~beta1~svn1245"), Equals, 1) 65 c.Check(compareVersionPart("1.0", "1.0~beta1"), Equals, 1) 66 67 c.Check(compareVersionPart("1.pr", "1.pre"), Equals, -1) 68 c.Check(compareVersionPart("1.pre", "1.pr"), Equals, 1) 69 70 c.Check(compareVersionPart("1.pra", "1.prb"), Equals, -1) 71 c.Check(compareVersionPart("1.prb", "1.pra"), Equals, 1) 72 73 c.Check(compareVersionPart("3.prx", "3.pr+"), Equals, -1) 74 c.Check(compareVersionPart("3.pr+", "3.prx"), Equals, 1) 75 76 c.Check(compareVersionPart("3.pr~", "3.pra"), Equals, -1) 77 c.Check(compareVersionPart("3.pra", "3.pr~"), Equals, 1) 78 79 c.Check(compareVersionPart("2~~", "2~~a"), Equals, -1) 80 c.Check(compareVersionPart("2~~a", "2~"), Equals, -1) 81 c.Check(compareVersionPart("2~", "2"), Equals, -1) 82 83 c.Check(compareVersionPart("2~~a", "2~~"), Equals, 1) 84 c.Check(compareVersionPart("2~", "2~~a"), Equals, 1) 85 c.Check(compareVersionPart("2", "2~"), Equals, 1) 86} 87 88func (s *VersionSuite) TestCompareVersions(c *C) { 89 c.Check(CompareVersions("3:1.0~beta1~svn1245-1", "3:1.0~beta1~svn1245-1"), Equals, 0) 90 91 c.Check(CompareVersions("1:1.0~beta1~svn1245-1", "3:1.0~beta1~svn1245-1"), Equals, -1) 92 c.Check(CompareVersions("1:1.0~beta1~svn1245-1", "1.0~beta1~svn1245-1"), Equals, 1) 93 c.Check(CompareVersions("1.0~beta1~svn1245-1", "1.0~beta1~svn1245-2"), Equals, -1) 94 c.Check(CompareVersions("3:1.0~beta1~svn1245-1", "3:1.0~beta1-1"), Equals, -1) 95 96 c.Check(CompareVersions("1.0~beta1~svn1245", "1.0~beta1"), Equals, -1) 97 c.Check(CompareVersions("1.0~beta1", "1.0"), Equals, -1) 98 99 c.Check(CompareVersions("1.0-133-avc", "1.1"), Equals, -1) 100 c.Check(CompareVersions("1.0-133-avc", "1.0"), Equals, 1) 101} 102 103func (s *VersionSuite) TestParseDependency(c *C) { 104 d, e := ParseDependency("dpkg (>= 1.6)") 105 c.Check(e, IsNil) 106 c.Check(d.Pkg, Equals, "dpkg") 107 c.Check(d.Relation, Equals, VersionGreaterOrEqual) 108 c.Check(d.Version, Equals, "1.6") 109 c.Check(d.Architecture, Equals, "") 110 111 d, e = ParseDependency("dpkg(>>1.6)") 112 c.Check(e, IsNil) 113 c.Check(d.Pkg, Equals, "dpkg") 114 c.Check(d.Relation, Equals, VersionGreater) 115 c.Check(d.Version, Equals, "1.6") 116 117 d, e = ParseDependency("dpkg(1.6)") 118 c.Check(e, IsNil) 119 c.Check(d.Pkg, Equals, "dpkg") 120 c.Check(d.Relation, Equals, VersionEqual) 121 c.Check(d.Version, Equals, "1.6") 122 123 d, e = ParseDependency("dpkg ( 1.6)") 124 c.Check(e, IsNil) 125 c.Check(d.Pkg, Equals, "dpkg") 126 c.Check(d.Relation, Equals, VersionEqual) 127 c.Check(d.Version, Equals, "1.6") 128 129 d, e = ParseDependency("dpkg (> 1.6)") 130 c.Check(e, IsNil) 131 c.Check(d.Pkg, Equals, "dpkg") 132 c.Check(d.Relation, Equals, VersionGreaterOrEqual) 133 c.Check(d.Version, Equals, "1.6") 134 135 d, e = ParseDependency("dpkg (< 1.6)") 136 c.Check(e, IsNil) 137 c.Check(d.Pkg, Equals, "dpkg") 138 c.Check(d.Relation, Equals, VersionLessOrEqual) 139 c.Check(d.Version, Equals, "1.6") 140 141 d, e = ParseDependency("dpkg (= 1.6)") 142 c.Check(e, IsNil) 143 c.Check(d.Pkg, Equals, "dpkg") 144 c.Check(d.Relation, Equals, VersionEqual) 145 c.Check(d.Version, Equals, "1.6") 146 147 d, e = ParseDependency("dpkg (<< 1.6)") 148 c.Check(e, IsNil) 149 c.Check(d.Pkg, Equals, "dpkg") 150 c.Check(d.Relation, Equals, VersionLess) 151 c.Check(d.Version, Equals, "1.6") 152 153 d, e = ParseDependency("dpkg(>>1.6)") 154 c.Check(e, IsNil) 155 c.Check(d.Pkg, Equals, "dpkg") 156 c.Check(d.Relation, Equals, VersionGreater) 157 c.Check(d.Version, Equals, "1.6") 158 159 d, e = ParseDependency("dpkg (>>1.6) {i386}") 160 c.Check(e, IsNil) 161 c.Check(d.Pkg, Equals, "dpkg") 162 c.Check(d.Relation, Equals, VersionGreater) 163 c.Check(d.Version, Equals, "1.6") 164 c.Check(d.Architecture, Equals, "i386") 165 166 d, e = ParseDependency("python:any (>= 2.7~)") 167 c.Check(e, IsNil) 168 c.Check(d.Pkg, Equals, "python") 169 c.Check(d.Relation, Equals, VersionGreaterOrEqual) 170 c.Check(d.Version, Equals, "2.7~") 171 c.Check(d.Architecture, Equals, "") 172 173 d, e = ParseDependency("python:amd64 (>= 2.7~)") 174 c.Check(e, IsNil) 175 c.Check(d.Pkg, Equals, "python") 176 c.Check(d.Relation, Equals, VersionGreaterOrEqual) 177 c.Check(d.Version, Equals, "2.7~") 178 c.Check(d.Architecture, Equals, "amd64") 179 180 d, e = ParseDependency("dpkg{i386}") 181 c.Check(e, IsNil) 182 c.Check(d.Pkg, Equals, "dpkg") 183 c.Check(d.Relation, Equals, VersionDontCare) 184 c.Check(d.Version, Equals, "") 185 c.Check(d.Architecture, Equals, "i386") 186 187 d, e = ParseDependency("dpkg ") 188 c.Check(e, IsNil) 189 c.Check(d.Pkg, Equals, "dpkg") 190 c.Check(d.Relation, Equals, VersionDontCare) 191 c.Check(d.Version, Equals, "") 192 193 d, e = ParseDependency("dpkg(==1.6)") 194 c.Check(e, ErrorMatches, "relation unknown.*") 195 196 d, e = ParseDependency("dpkg==1.6)") 197 c.Check(e, ErrorMatches, "unable to parse.*") 198 199 d, e = ParseDependency("dpkg i386}") 200 c.Check(e, ErrorMatches, "unable to parse.*") 201 202 d, e = ParseDependency("dpkg ) {i386}") 203 c.Check(e, ErrorMatches, "unable to parse.*") 204} 205 206func (s *VersionSuite) TestParseDependencyVariants(c *C) { 207 l, e := ParseDependencyVariants("dpkg (>= 1.6)") 208 c.Check(e, IsNil) 209 c.Check(l, HasLen, 1) 210 c.Check(l[0].Pkg, Equals, "dpkg") 211 c.Check(l[0].Relation, Equals, VersionGreaterOrEqual) 212 c.Check(l[0].Version, Equals, "1.6") 213 214 l, e = ParseDependencyVariants("dpkg (>= 1.6) | mailer-agent") 215 c.Check(e, IsNil) 216 c.Check(l, HasLen, 2) 217 c.Check(l[0].Pkg, Equals, "dpkg") 218 c.Check(l[0].Relation, Equals, VersionGreaterOrEqual) 219 c.Check(l[0].Version, Equals, "1.6") 220 c.Check(l[1].Pkg, Equals, "mailer-agent") 221 c.Check(l[1].Relation, Equals, VersionDontCare) 222 223 _, e = ParseDependencyVariants("dpkg(==1.6)") 224 c.Check(e, ErrorMatches, "relation unknown.*") 225} 226 227func (s *VersionSuite) TestDependencyString(c *C) { 228 d, _ := ParseDependency("dpkg(>>1.6)") 229 d.Architecture = "i386" 230 c.Check(d.String(), Equals, "dpkg (>> 1.6) [i386]") 231 232 d, _ = ParseDependency("dpkg") 233 d.Architecture = "i386" 234 c.Check(d.String(), Equals, "dpkg [i386]") 235} 236