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_range_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 group('constructor', () { |
| 15 test('takes a min and max', () { |
| 16 var range = new VersionRange(min: v123, max: v124); |
| 17 expect(range.isAny, isFalse); |
| 18 expect(range.min, equals(v123)); |
| 19 expect(range.max, equals(v124)); |
| 20 }); |
| 21 |
| 22 test('allows omitting max', () { |
| 23 var range = new VersionRange(min: v123); |
| 24 expect(range.isAny, isFalse); |
| 25 expect(range.min, equals(v123)); |
| 26 expect(range.max, isNull); |
| 27 }); |
| 28 |
| 29 test('allows omitting min and max', () { |
| 30 var range = new VersionRange(); |
| 31 expect(range.isAny, isTrue); |
| 32 expect(range.min, isNull); |
| 33 expect(range.max, isNull); |
| 34 }); |
| 35 |
| 36 test('takes includeMin', () { |
| 37 var range = new VersionRange(min: v123, includeMin: true); |
| 38 expect(range.includeMin, isTrue); |
| 39 }); |
| 40 |
| 41 test('includeMin defaults to false if omitted', () { |
| 42 var range = new VersionRange(min: v123); |
| 43 expect(range.includeMin, isFalse); |
| 44 }); |
| 45 |
| 46 test('takes includeMax', () { |
| 47 var range = new VersionRange(max: v123, includeMax: true); |
| 48 expect(range.includeMax, isTrue); |
| 49 }); |
| 50 |
| 51 test('includeMax defaults to false if omitted', () { |
| 52 var range = new VersionRange(max: v123); |
| 53 expect(range.includeMax, isFalse); |
| 54 }); |
| 55 |
| 56 test('throws if min > max', () { |
| 57 expect(() => new VersionRange(min: v124, max: v123), throwsArgumentError); |
| 58 }); |
| 59 }); |
| 60 |
| 61 group('allows()', () { |
| 62 test('version must be greater than min', () { |
| 63 var range = new VersionRange(min: v123); |
| 64 |
| 65 expect(range, allows( |
| 66 new Version.parse('1.3.3'), |
| 67 new Version.parse('2.3.3'))); |
| 68 expect(range, doesNotAllow( |
| 69 new Version.parse('1.2.2'), |
| 70 new Version.parse('1.2.3'))); |
| 71 }); |
| 72 |
| 73 test('version must be min or greater if includeMin', () { |
| 74 var range = new VersionRange(min: v123, includeMin: true); |
| 75 |
| 76 expect(range, allows( |
| 77 new Version.parse('1.2.3'), |
| 78 new Version.parse('1.3.3'), |
| 79 new Version.parse('2.3.3'))); |
| 80 expect(range, doesNotAllow(new Version.parse('1.2.2'))); |
| 81 }); |
| 82 |
| 83 test('pre-release versions of inclusive min are excluded', () { |
| 84 var range = new VersionRange(min: v123, includeMin: true); |
| 85 |
| 86 expect(range, allows(new Version.parse('1.2.4-dev'))); |
| 87 expect(range, doesNotAllow(new Version.parse('1.2.3-dev'))); |
| 88 }); |
| 89 |
| 90 test('version must be less than max', () { |
| 91 var range = new VersionRange(max: v234); |
| 92 |
| 93 expect(range, allows(new Version.parse('2.3.3'))); |
| 94 expect(range, doesNotAllow( |
| 95 new Version.parse('2.3.4'), |
| 96 new Version.parse('2.4.3'))); |
| 97 }); |
| 98 |
| 99 test('pre-release versions of non-pre-release max are excluded', () { |
| 100 var range = new VersionRange(max: v234); |
| 101 |
| 102 expect(range, allows(new Version.parse('2.3.3'))); |
| 103 expect(range, doesNotAllow( |
| 104 new Version.parse('2.3.4-dev'), |
| 105 new Version.parse('2.3.4'))); |
| 106 }); |
| 107 |
| 108 test('pre-release versions of non-pre-release max are included if min is a ' |
| 109 'pre-release of the same version', () { |
| 110 var range = new VersionRange( |
| 111 min: new Version.parse('2.3.4-dev.0'), max: v234); |
| 112 |
| 113 expect(range, allows(new Version.parse('2.3.4-dev.1'))); |
| 114 expect(range, doesNotAllow( |
| 115 new Version.parse('2.3.3'), |
| 116 new Version.parse('2.3.4-dev'), |
| 117 new Version.parse('2.3.4'))); |
| 118 }); |
| 119 |
| 120 test('pre-release versions of pre-release max are included', () { |
| 121 var range = new VersionRange(max: new Version.parse('2.3.4-dev.2')); |
| 122 |
| 123 expect(range, allows( |
| 124 new Version.parse('2.3.4-dev.1'))); |
| 125 expect(range, doesNotAllow( |
| 126 new Version.parse('2.3.4-dev.2'), |
| 127 new Version.parse('2.3.4-dev.3'))); |
| 128 }); |
| 129 |
| 130 test('version must be max or less if includeMax', () { |
| 131 var range = new VersionRange(min: v123, max: v234, includeMax: true); |
| 132 |
| 133 expect(range, allows( |
| 134 new Version.parse('2.3.3'), |
| 135 new Version.parse('2.3.4'), |
| 136 // Pre-releases of the max are allowed. |
| 137 new Version.parse('2.3.4-dev'))); |
| 138 expect(range, doesNotAllow(new Version.parse('2.4.3'))); |
| 139 }); |
| 140 |
| 141 test('has no min if one was not set', () { |
| 142 var range = new VersionRange(max: v123); |
| 143 |
| 144 expect(range, allows(new Version.parse('0.0.0'))); |
| 145 expect(range, doesNotAllow(new Version.parse('1.2.3'))); |
| 146 }); |
| 147 |
| 148 test('has no max if one was not set', () { |
| 149 var range = new VersionRange(min: v123); |
| 150 |
| 151 expect(range, allows( |
| 152 new Version.parse('1.3.3'), |
| 153 new Version.parse('999.3.3'))); |
| 154 expect(range, doesNotAllow(new Version.parse('1.2.3'))); |
| 155 }); |
| 156 |
| 157 test('allows any version if there is no min or max', () { |
| 158 var range = new VersionRange(); |
| 159 |
| 160 expect(range, allows( |
| 161 new Version.parse('0.0.0'), |
| 162 new Version.parse('999.99.9'))); |
| 163 }); |
| 164 }); |
| 165 |
| 166 group('allowsAll()', () { |
| 167 test('allows an empty constraint', () { |
| 168 expect( |
| 169 new VersionRange(min: v123, max: v250) |
| 170 .allowsAll(VersionConstraint.empty), |
| 171 isTrue); |
| 172 }); |
| 173 |
| 174 test('allows allowed versions', () { |
| 175 var range = new VersionRange(min: v123, max: v250, includeMax: true); |
| 176 expect(range.allowsAll(v123), isFalse); |
| 177 expect(range.allowsAll(v124), isTrue); |
| 178 expect(range.allowsAll(v250), isTrue); |
| 179 expect(range.allowsAll(v300), isFalse); |
| 180 }); |
| 181 |
| 182 test('with no min', () { |
| 183 var range = new VersionRange(max: v250); |
| 184 expect(range.allowsAll(new VersionRange(min: v080, max: v140)), isTrue); |
| 185 expect(range.allowsAll(new VersionRange(min: v080, max: v300)), isFalse); |
| 186 expect(range.allowsAll(new VersionRange(max: v140)), isTrue); |
| 187 expect(range.allowsAll(new VersionRange(max: v300)), isFalse); |
| 188 expect(range.allowsAll(range), isTrue); |
| 189 expect(range.allowsAll(VersionConstraint.any), isFalse); |
| 190 }); |
| 191 |
| 192 test('with no max', () { |
| 193 var range = new VersionRange(min: v010); |
| 194 expect(range.allowsAll(new VersionRange(min: v080, max: v140)), isTrue); |
| 195 expect(range.allowsAll(new VersionRange(min: v003, max: v140)), isFalse); |
| 196 expect(range.allowsAll(new VersionRange(min: v080)), isTrue); |
| 197 expect(range.allowsAll(new VersionRange(min: v003)), isFalse); |
| 198 expect(range.allowsAll(range), isTrue); |
| 199 expect(range.allowsAll(VersionConstraint.any), isFalse); |
| 200 }); |
| 201 |
| 202 test('with a min and max', () { |
| 203 var range = new VersionRange(min: v010, max: v250); |
| 204 expect(range.allowsAll(new VersionRange(min: v080, max: v140)), isTrue); |
| 205 expect(range.allowsAll(new VersionRange(min: v080, max: v300)), isFalse); |
| 206 expect(range.allowsAll(new VersionRange(min: v003, max: v140)), isFalse); |
| 207 expect(range.allowsAll(new VersionRange(min: v080)), isFalse); |
| 208 expect(range.allowsAll(new VersionRange(max: v140)), isFalse); |
| 209 expect(range.allowsAll(range), isTrue); |
| 210 }); |
| 211 |
| 212 test("allows a bordering range that's not more inclusive", () { |
| 213 var exclusive = new VersionRange(min: v010, max: v250); |
| 214 var inclusive = new VersionRange( |
| 215 min: v010, includeMin: true, max: v250, includeMax: true); |
| 216 expect(inclusive.allowsAll(exclusive), isTrue); |
| 217 expect(inclusive.allowsAll(inclusive), isTrue); |
| 218 expect(exclusive.allowsAll(inclusive), isFalse); |
| 219 expect(exclusive.allowsAll(exclusive), isTrue); |
| 220 }); |
| 221 |
| 222 test('allows unions that are completely contained', () { |
| 223 var range = new VersionRange(min: v114, max: v200); |
| 224 expect( |
| 225 range.allowsAll(new VersionRange(min: v123, max: v124).union(v140)), |
| 226 isTrue); |
| 227 expect( |
| 228 range.allowsAll(new VersionRange(min: v010, max: v124).union(v140)), |
| 229 isFalse); |
| 230 expect( |
| 231 range.allowsAll(new VersionRange(min: v123, max: v234).union(v140)), |
| 232 isFalse); |
| 233 }); |
| 234 }); |
| 235 |
| 236 group('allowsAny()', () { |
| 237 test('disallows an empty constraint', () { |
| 238 expect( |
| 239 new VersionRange(min: v123, max: v250) |
| 240 .allowsAny(VersionConstraint.empty), |
| 241 isFalse); |
| 242 }); |
| 243 |
| 244 test('allows allowed versions', () { |
| 245 var range = new VersionRange(min: v123, max: v250, includeMax: true); |
| 246 expect(range.allowsAny(v123), isFalse); |
| 247 expect(range.allowsAny(v124), isTrue); |
| 248 expect(range.allowsAny(v250), isTrue); |
| 249 expect(range.allowsAny(v300), isFalse); |
| 250 }); |
| 251 |
| 252 test('with no min', () { |
| 253 var range = new VersionRange(max: v200); |
| 254 expect(range.allowsAny(new VersionRange(min: v140, max: v300)), isTrue); |
| 255 expect(range.allowsAny(new VersionRange(min: v234, max: v300)), isFalse); |
| 256 expect(range.allowsAny(new VersionRange(min: v140)), isTrue); |
| 257 expect(range.allowsAny(new VersionRange(min: v234)), isFalse); |
| 258 expect(range.allowsAny(range), isTrue); |
| 259 }); |
| 260 |
| 261 test('with no max', () { |
| 262 var range = new VersionRange(min: v072); |
| 263 expect(range.allowsAny(new VersionRange(min: v003, max: v140)), isTrue); |
| 264 expect(range.allowsAny(new VersionRange(min: v003, max: v010)), isFalse); |
| 265 expect(range.allowsAny(new VersionRange(max: v080)), isTrue); |
| 266 expect(range.allowsAny(new VersionRange(max: v003)), isFalse); |
| 267 expect(range.allowsAny(range), isTrue); |
| 268 }); |
| 269 |
| 270 test('with a min and max', () { |
| 271 var range = new VersionRange(min: v072, max: v200); |
| 272 expect(range.allowsAny(new VersionRange(min: v003, max: v140)), isTrue); |
| 273 expect(range.allowsAny(new VersionRange(min: v140, max: v300)), isTrue); |
| 274 expect(range.allowsAny(new VersionRange(min: v003, max: v010)), isFalse); |
| 275 expect(range.allowsAny(new VersionRange(min: v234, max: v300)), isFalse); |
| 276 expect(range.allowsAny(new VersionRange(max: v010)), isFalse); |
| 277 expect(range.allowsAny(new VersionRange(min: v234)), isFalse); |
| 278 expect(range.allowsAny(range), isTrue); |
| 279 }); |
| 280 |
| 281 test('allows a bordering range when both are inclusive', () { |
| 282 expect(new VersionRange(max: v250).allowsAny(new VersionRange(min: v250)), |
| 283 isFalse); |
| 284 |
| 285 expect(new VersionRange(max: v250, includeMax: true) |
| 286 .allowsAny(new VersionRange(min: v250)), |
| 287 isFalse); |
| 288 |
| 289 expect(new VersionRange(max: v250) |
| 290 .allowsAny(new VersionRange(min: v250, includeMin: true)), |
| 291 isFalse); |
| 292 |
| 293 expect(new VersionRange(max: v250, includeMax: true) |
| 294 .allowsAny(new VersionRange(min: v250, includeMin: true)), |
| 295 isTrue); |
| 296 |
| 297 expect(new VersionRange(min: v250).allowsAny(new VersionRange(max: v250)), |
| 298 isFalse); |
| 299 |
| 300 expect(new VersionRange(min: v250, includeMin: true) |
| 301 .allowsAny(new VersionRange(max: v250)), |
| 302 isFalse); |
| 303 |
| 304 expect(new VersionRange(min: v250) |
| 305 .allowsAny(new VersionRange(max: v250, includeMax: true)), |
| 306 isFalse); |
| 307 |
| 308 expect(new VersionRange(min: v250, includeMin: true) |
| 309 .allowsAny(new VersionRange(max: v250, includeMax: true)), |
| 310 isTrue); |
| 311 }); |
| 312 |
| 313 test('allows unions that are partially contained', () { |
| 314 var range = new VersionRange(min: v114, max: v200); |
| 315 expect( |
| 316 range.allowsAny(new VersionRange(min: v010, max: v080).union(v140)), |
| 317 isTrue); |
| 318 expect( |
| 319 range.allowsAny(new VersionRange(min: v123, max: v234).union(v300)), |
| 320 isTrue); |
| 321 expect( |
| 322 range.allowsAny(new VersionRange(min: v234, max: v300).union(v010)), |
| 323 isFalse); |
| 324 }); |
| 325 }); |
| 326 |
| 327 group('intersect()', () { |
| 328 test('two overlapping ranges', () { |
| 329 var a = new VersionRange(min: v123, max: v250); |
| 330 var b = new VersionRange(min: v200, max: v300); |
| 331 var intersect = a.intersect(b); |
| 332 expect(intersect.min, equals(v200)); |
| 333 expect(intersect.max, equals(v250)); |
| 334 expect(intersect.includeMin, isFalse); |
| 335 expect(intersect.includeMax, isFalse); |
| 336 }); |
| 337 |
| 338 test('a non-overlapping range allows no versions', () { |
| 339 var a = new VersionRange(min: v114, max: v124); |
| 340 var b = new VersionRange(min: v200, max: v250); |
| 341 expect(a.intersect(b).isEmpty, isTrue); |
| 342 }); |
| 343 |
| 344 test('adjacent ranges allow no versions if exclusive', () { |
| 345 var a = new VersionRange(min: v114, max: v124, includeMax: false); |
| 346 var b = new VersionRange(min: v124, max: v200, includeMin: true); |
| 347 expect(a.intersect(b).isEmpty, isTrue); |
| 348 }); |
| 349 |
| 350 test('adjacent ranges allow version if inclusive', () { |
| 351 var a = new VersionRange(min: v114, max: v124, includeMax: true); |
| 352 var b = new VersionRange(min: v124, max: v200, includeMin: true); |
| 353 expect(a.intersect(b), equals(v124)); |
| 354 }); |
| 355 |
| 356 test('with an open range', () { |
| 357 var open = new VersionRange(); |
| 358 var a = new VersionRange(min: v114, max: v124); |
| 359 expect(open.intersect(open), equals(open)); |
| 360 expect(a.intersect(open), equals(a)); |
| 361 }); |
| 362 |
| 363 test('returns the version if the range allows it', () { |
| 364 expect(new VersionRange(min: v114, max: v124).intersect(v123), |
| 365 equals(v123)); |
| 366 expect(new VersionRange(min: v123, max: v124).intersect(v114).isEmpty, |
| 367 isTrue); |
| 368 }); |
| 369 }); |
| 370 |
| 371 group('union()', () { |
| 372 test("with a version returns the range if it contains the version", () { |
| 373 var range = new VersionRange(min: v114, max: v124); |
| 374 expect(range.union(v123), equals(range)); |
| 375 }); |
| 376 |
| 377 test("with a version on the edge of the range, expands the range", () { |
| 378 expect(new VersionRange(min: v114, max: v124).union(v124), |
| 379 equals(new VersionRange(min: v114, max: v124, includeMax: true))); |
| 380 expect(new VersionRange(min: v114, max: v124).union(v114), |
| 381 equals(new VersionRange(min: v114, max: v124, includeMin: true))); |
| 382 }); |
| 383 |
| 384 test("with a version allows both the range and the version if the range " |
| 385 "doesn't contain the version", () { |
| 386 var result = new VersionRange(min: v003, max: v114).union(v124); |
| 387 expect(result, allows(v010)); |
| 388 expect(result, doesNotAllow(v123)); |
| 389 expect(result, allows(v124)); |
| 390 }); |
| 391 |
| 392 test("returns a VersionUnion for a disjoint range", () { |
| 393 var result = new VersionRange(min: v003, max: v114) |
| 394 .union(new VersionRange(min: v130, max: v200)); |
| 395 expect(result, allows(v080)); |
| 396 expect(result, doesNotAllow(v123)); |
| 397 expect(result, allows(v140)); |
| 398 }); |
| 399 |
| 400 test("considers open ranges disjoint", () { |
| 401 var result = new VersionRange(min: v003, max: v114) |
| 402 .union(new VersionRange(min: v114, max: v200)); |
| 403 expect(result, allows(v080)); |
| 404 expect(result, doesNotAllow(v114)); |
| 405 expect(result, allows(v140)); |
| 406 |
| 407 result = new VersionRange(min: v114, max: v200) |
| 408 .union(new VersionRange(min: v003, max: v114)); |
| 409 expect(result, allows(v080)); |
| 410 expect(result, doesNotAllow(v114)); |
| 411 expect(result, allows(v140)); |
| 412 }); |
| 413 |
| 414 test("returns a merged range for an overlapping range", () { |
| 415 var result = new VersionRange(min: v003, max: v114) |
| 416 .union(new VersionRange(min: v080, max: v200)); |
| 417 expect(result, equals(new VersionRange(min: v003, max: v200))); |
| 418 }); |
| 419 |
| 420 test("considers closed ranges overlapping", () { |
| 421 var result = new VersionRange(min: v003, max: v114, includeMax: true) |
| 422 .union(new VersionRange(min: v114, max: v200)); |
| 423 expect(result, equals(new VersionRange(min: v003, max: v200))); |
| 424 |
| 425 result = new VersionRange(min: v003, max: v114) |
| 426 .union(new VersionRange(min: v114, max: v200, includeMin: true)); |
| 427 expect(result, equals(new VersionRange(min: v003, max: v200))); |
| 428 |
| 429 result = new VersionRange(min: v114, max: v200) |
| 430 .union(new VersionRange(min: v003, max: v114, includeMax: true)); |
| 431 expect(result, equals(new VersionRange(min: v003, max: v200))); |
| 432 |
| 433 result = new VersionRange(min: v114, max: v200, includeMin: true) |
| 434 .union(new VersionRange(min: v003, max: v114)); |
| 435 expect(result, equals(new VersionRange(min: v003, max: v200))); |
| 436 }); |
| 437 |
| 438 test("includes edges if either range does", () { |
| 439 var result = new VersionRange(min: v003, max: v114, includeMin: true) |
| 440 .union(new VersionRange(min: v003, max: v114, includeMax: true)); |
| 441 expect(result, equals(new VersionRange( |
| 442 min: v003, max: v114, includeMin: true, includeMax: true))); |
| 443 }); |
| 444 }); |
| 445 |
| 446 test('isEmpty', () { |
| 447 expect(new VersionRange().isEmpty, isFalse); |
| 448 expect(new VersionRange(min: v123, max: v124).isEmpty, isFalse); |
| 449 }); |
| 450 } |
OLD | NEW |