OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. |
| 4 |
| 5 library pub_semver.test.version_test; |
| 6 |
| 7 import 'package:test/test.dart'; |
| 8 |
| 9 import 'package:pub_semver/pub_semver.dart'; |
| 10 |
| 11 import 'utils.dart'; |
| 12 |
| 13 main() { |
| 14 test('none', () { |
| 15 expect(Version.none.toString(), equals('0.0.0')); |
| 16 }); |
| 17 |
| 18 test('prioritize()', () { |
| 19 // A correctly sorted list of versions in order of increasing priority. |
| 20 var versions = [ |
| 21 '1.0.0-alpha', |
| 22 '2.0.0-alpha', |
| 23 '1.0.0', |
| 24 '1.0.0+build', |
| 25 '1.0.1', |
| 26 '1.1.0', |
| 27 '2.0.0' |
| 28 ]; |
| 29 |
| 30 // Ensure that every pair of versions is prioritized in the order that it |
| 31 // appears in the list. |
| 32 for (var i = 0; i < versions.length; i++) { |
| 33 for (var j = 0; j < versions.length; j++) { |
| 34 var a = new Version.parse(versions[i]); |
| 35 var b = new Version.parse(versions[j]); |
| 36 expect(Version.prioritize(a, b), equals(i.compareTo(j))); |
| 37 } |
| 38 } |
| 39 }); |
| 40 |
| 41 test('antiprioritize()', () { |
| 42 // A correctly sorted list of versions in order of increasing antipriority. |
| 43 var versions = [ |
| 44 '2.0.0-alpha', |
| 45 '1.0.0-alpha', |
| 46 '2.0.0', |
| 47 '1.1.0', |
| 48 '1.0.1', |
| 49 '1.0.0+build', |
| 50 '1.0.0' |
| 51 ]; |
| 52 |
| 53 // Ensure that every pair of versions is prioritized in the order that it |
| 54 // appears in the list. |
| 55 for (var i = 0; i < versions.length; i++) { |
| 56 for (var j = 0; j < versions.length; j++) { |
| 57 var a = new Version.parse(versions[i]); |
| 58 var b = new Version.parse(versions[j]); |
| 59 expect(Version.antiprioritize(a, b), equals(i.compareTo(j))); |
| 60 } |
| 61 } |
| 62 }); |
| 63 |
| 64 group('constructor', () { |
| 65 test('throws on negative numbers', () { |
| 66 expect(() => new Version(-1, 1, 1), throwsArgumentError); |
| 67 expect(() => new Version(1, -1, 1), throwsArgumentError); |
| 68 expect(() => new Version(1, 1, -1), throwsArgumentError); |
| 69 }); |
| 70 }); |
| 71 |
| 72 group('comparison', () { |
| 73 // A correctly sorted list of versions. |
| 74 var versions = [ |
| 75 '1.0.0-alpha', |
| 76 '1.0.0-alpha.1', |
| 77 '1.0.0-beta.2', |
| 78 '1.0.0-beta.11', |
| 79 '1.0.0-rc.1', |
| 80 '1.0.0-rc.1+build.1', |
| 81 '1.0.0', |
| 82 '1.0.0+0.3.7', |
| 83 '1.3.7+build', |
| 84 '1.3.7+build.2.b8f12d7', |
| 85 '1.3.7+build.11.e0f985a', |
| 86 '2.0.0', |
| 87 '2.1.0', |
| 88 '2.2.0', |
| 89 '2.11.0', |
| 90 '2.11.1' |
| 91 ]; |
| 92 |
| 93 test('compareTo()', () { |
| 94 // Ensure that every pair of versions compares in the order that it |
| 95 // appears in the list. |
| 96 for (var i = 0; i < versions.length; i++) { |
| 97 for (var j = 0; j < versions.length; j++) { |
| 98 var a = new Version.parse(versions[i]); |
| 99 var b = new Version.parse(versions[j]); |
| 100 expect(a.compareTo(b), equals(i.compareTo(j))); |
| 101 } |
| 102 } |
| 103 }); |
| 104 |
| 105 test('operators', () { |
| 106 for (var i = 0; i < versions.length; i++) { |
| 107 for (var j = 0; j < versions.length; j++) { |
| 108 var a = new Version.parse(versions[i]); |
| 109 var b = new Version.parse(versions[j]); |
| 110 expect(a < b, equals(i < j)); |
| 111 expect(a > b, equals(i > j)); |
| 112 expect(a <= b, equals(i <= j)); |
| 113 expect(a >= b, equals(i >= j)); |
| 114 expect(a == b, equals(i == j)); |
| 115 expect(a != b, equals(i != j)); |
| 116 } |
| 117 } |
| 118 }); |
| 119 |
| 120 test('equality', () { |
| 121 expect(new Version.parse('01.2.3'), equals(new Version.parse('1.2.3'))); |
| 122 expect(new Version.parse('1.02.3'), equals(new Version.parse('1.2.3'))); |
| 123 expect(new Version.parse('1.2.03'), equals(new Version.parse('1.2.3'))); |
| 124 expect(new Version.parse('1.2.3-01'), |
| 125 equals(new Version.parse('1.2.3-1'))); |
| 126 expect(new Version.parse('1.2.3+01'), |
| 127 equals(new Version.parse('1.2.3+1'))); |
| 128 }); |
| 129 }); |
| 130 |
| 131 test('allows()', () { |
| 132 expect(v123, allows(v123)); |
| 133 expect(v123, doesNotAllow( |
| 134 new Version.parse('2.2.3'), |
| 135 new Version.parse('1.3.3'), |
| 136 new Version.parse('1.2.4'), |
| 137 new Version.parse('1.2.3-dev'), |
| 138 new Version.parse('1.2.3+build'))); |
| 139 }); |
| 140 |
| 141 test('allowsAll()', () { |
| 142 expect(v123.allowsAll(v123), isTrue); |
| 143 expect(v123.allowsAll(v003), isFalse); |
| 144 expect(v123.allowsAll(new VersionRange(min: v114, max: v124)), isFalse); |
| 145 expect(v123.allowsAll(VersionConstraint.any), isFalse); |
| 146 expect(v123.allowsAll(VersionConstraint.empty), isTrue); |
| 147 }); |
| 148 |
| 149 test('allowsAny()', () { |
| 150 expect(v123.allowsAny(v123), isTrue); |
| 151 expect(v123.allowsAny(v003), isFalse); |
| 152 expect(v123.allowsAny(new VersionRange(min: v114, max: v124)), isTrue); |
| 153 expect(v123.allowsAny(VersionConstraint.any), isTrue); |
| 154 expect(v123.allowsAny(VersionConstraint.empty), isFalse); |
| 155 }); |
| 156 |
| 157 test('intersect()', () { |
| 158 // Intersecting the same version returns the version. |
| 159 expect(v123.intersect(v123), equals(v123)); |
| 160 |
| 161 // Intersecting a different version allows no versions. |
| 162 expect(v123.intersect(v114).isEmpty, isTrue); |
| 163 |
| 164 // Intersecting a range returns the version if the range allows it. |
| 165 expect(v123.intersect(new VersionRange(min: v114, max: v124)), |
| 166 equals(v123)); |
| 167 |
| 168 // Intersecting a range allows no versions if the range doesn't allow it. |
| 169 expect(v114.intersect(new VersionRange(min: v123, max: v124)).isEmpty, |
| 170 isTrue); |
| 171 }); |
| 172 |
| 173 group('union()', () { |
| 174 test("with the same version returns the version", () { |
| 175 expect(v123.union(v123), equals(v123)); |
| 176 }); |
| 177 |
| 178 test("with a different version returns a version that matches both", () { |
| 179 var result = v123.union(v080); |
| 180 expect(result, allows(v123)); |
| 181 expect(result, allows(v080)); |
| 182 |
| 183 // Nothing in between should match. |
| 184 expect(result, doesNotAllow(v114)); |
| 185 }); |
| 186 |
| 187 test("with a range returns the range if it contains the version", () { |
| 188 var range = new VersionRange(min: v114, max: v124); |
| 189 expect(v123.union(range), equals(range)); |
| 190 }); |
| 191 |
| 192 test("with a range with the version on the edge, expands the range", () { |
| 193 expect(v124.union(new VersionRange(min: v114, max: v124)), |
| 194 equals(new VersionRange(min: v114, max: v124, includeMax: true))); |
| 195 expect(v114.union(new VersionRange(min: v114, max: v124)), |
| 196 equals(new VersionRange(min: v114, max: v124, includeMin: true))); |
| 197 }); |
| 198 |
| 199 test("with a range allows both the range and the version if the range " |
| 200 "doesn't contain the version", () { |
| 201 var result = v123.union(new VersionRange(min: v003, max: v114)); |
| 202 expect(result, allows(v123)); |
| 203 expect(result, allows(v010)); |
| 204 }); |
| 205 }); |
| 206 |
| 207 test('isEmpty', () { |
| 208 expect(v123.isEmpty, isFalse); |
| 209 }); |
| 210 |
| 211 test('nextMajor', () { |
| 212 expect(v123.nextMajor, equals(v200)); |
| 213 expect(v114.nextMajor, equals(v200)); |
| 214 expect(v200.nextMajor, equals(v300)); |
| 215 |
| 216 // Ignores pre-release if not on a major version. |
| 217 expect(new Version.parse('1.2.3-dev').nextMajor, equals(v200)); |
| 218 |
| 219 // Just removes it if on a major version. |
| 220 expect(new Version.parse('2.0.0-dev').nextMajor, equals(v200)); |
| 221 |
| 222 // Strips build suffix. |
| 223 expect(new Version.parse('1.2.3+patch').nextMajor, equals(v200)); |
| 224 }); |
| 225 |
| 226 test('nextMinor', () { |
| 227 expect(v123.nextMinor, equals(v130)); |
| 228 expect(v130.nextMinor, equals(v140)); |
| 229 |
| 230 // Ignores pre-release if not on a minor version. |
| 231 expect(new Version.parse('1.2.3-dev').nextMinor, equals(v130)); |
| 232 |
| 233 // Just removes it if on a minor version. |
| 234 expect(new Version.parse('1.3.0-dev').nextMinor, equals(v130)); |
| 235 |
| 236 // Strips build suffix. |
| 237 expect(new Version.parse('1.2.3+patch').nextMinor, equals(v130)); |
| 238 }); |
| 239 |
| 240 test('nextPatch', () { |
| 241 expect(v123.nextPatch, equals(v124)); |
| 242 expect(v200.nextPatch, equals(v201)); |
| 243 |
| 244 // Just removes pre-release version if present. |
| 245 expect(new Version.parse('1.2.4-dev').nextPatch, equals(v124)); |
| 246 |
| 247 // Strips build suffix. |
| 248 expect(new Version.parse('1.2.3+patch').nextPatch, equals(v124)); |
| 249 }); |
| 250 |
| 251 test('nextBreaking', () { |
| 252 expect(v123.nextBreaking, equals(v200)); |
| 253 expect(v072.nextBreaking, equals(v080)); |
| 254 expect(v003.nextBreaking, equals(v010)); |
| 255 |
| 256 // Removes pre-release version if present. |
| 257 expect(new Version.parse('1.2.3-dev').nextBreaking, equals(v200)); |
| 258 |
| 259 // Strips build suffix. |
| 260 expect(new Version.parse('1.2.3+patch').nextBreaking, equals(v200)); |
| 261 }); |
| 262 |
| 263 test('parse()', () { |
| 264 expect(new Version.parse('0.0.0'), equals(new Version(0, 0, 0))); |
| 265 expect(new Version.parse('12.34.56'), equals(new Version(12, 34, 56))); |
| 266 |
| 267 expect(new Version.parse('1.2.3-alpha.1'), |
| 268 equals(new Version(1, 2, 3, pre: 'alpha.1'))); |
| 269 expect(new Version.parse('1.2.3-x.7.z-92'), |
| 270 equals(new Version(1, 2, 3, pre: 'x.7.z-92'))); |
| 271 |
| 272 expect(new Version.parse('1.2.3+build.1'), |
| 273 equals(new Version(1, 2, 3, build: 'build.1'))); |
| 274 expect(new Version.parse('1.2.3+x.7.z-92'), |
| 275 equals(new Version(1, 2, 3, build: 'x.7.z-92'))); |
| 276 |
| 277 expect(new Version.parse('1.0.0-rc-1+build-1'), |
| 278 equals(new Version(1, 0, 0, pre: 'rc-1', build: 'build-1'))); |
| 279 |
| 280 expect(() => new Version.parse('1.0'), throwsFormatException); |
| 281 expect(() => new Version.parse('1.2.3.4'), throwsFormatException); |
| 282 expect(() => new Version.parse('1234'), throwsFormatException); |
| 283 expect(() => new Version.parse('-2.3.4'), throwsFormatException); |
| 284 expect(() => new Version.parse('1.3-pre'), throwsFormatException); |
| 285 expect(() => new Version.parse('1.3+build'), throwsFormatException); |
| 286 expect(() => new Version.parse('1.3+bu?!3ild'), throwsFormatException); |
| 287 }); |
| 288 |
| 289 group('toString()', () { |
| 290 test('returns the version string', () { |
| 291 expect(new Version(0, 0, 0).toString(), equals('0.0.0')); |
| 292 expect(new Version(12, 34, 56).toString(), equals('12.34.56')); |
| 293 |
| 294 expect(new Version(1, 2, 3, pre: 'alpha.1').toString(), |
| 295 equals('1.2.3-alpha.1')); |
| 296 expect(new Version(1, 2, 3, pre: 'x.7.z-92').toString(), |
| 297 equals('1.2.3-x.7.z-92')); |
| 298 |
| 299 expect(new Version(1, 2, 3, build: 'build.1').toString(), |
| 300 equals('1.2.3+build.1')); |
| 301 expect(new Version(1, 2, 3, pre: 'pre', build: 'bui').toString(), |
| 302 equals('1.2.3-pre+bui')); |
| 303 }); |
| 304 |
| 305 test('preserves leading zeroes', () { |
| 306 expect(new Version.parse('001.02.0003-01.dev+pre.002').toString(), |
| 307 equals('001.02.0003-01.dev+pre.002')); |
| 308 }); |
| 309 }); |
| 310 } |
OLD | NEW |