OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 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 | 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. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library pub_semver.test.version_range_test; | 5 library pub_semver.test.version_range_test; |
6 | 6 |
7 import 'package:test/test.dart'; | 7 import 'package:test/test.dart'; |
8 | 8 |
9 import 'package:pub_semver/pub_semver.dart'; | 9 import 'package:pub_semver/pub_semver.dart'; |
10 | 10 |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
144 | 144 |
145 test('allows any version if there is no min or max', () { | 145 test('allows any version if there is no min or max', () { |
146 var range = new VersionRange(); | 146 var range = new VersionRange(); |
147 | 147 |
148 expect(range, allows( | 148 expect(range, allows( |
149 new Version.parse('0.0.0'), | 149 new Version.parse('0.0.0'), |
150 new Version.parse('999.99.9'))); | 150 new Version.parse('999.99.9'))); |
151 }); | 151 }); |
152 }); | 152 }); |
153 | 153 |
| 154 group('allowsAll()', () { |
| 155 test('allows an empty constraint', () { |
| 156 expect( |
| 157 new VersionRange(min: v123, max: v250) |
| 158 .allowsAll(VersionConstraint.empty), |
| 159 isTrue); |
| 160 }); |
| 161 |
| 162 test('allows allowed versions', () { |
| 163 var range = new VersionRange(min: v123, max: v250, includeMax: true); |
| 164 expect(range.allowsAll(v123), isFalse); |
| 165 expect(range.allowsAll(v124), isTrue); |
| 166 expect(range.allowsAll(v250), isTrue); |
| 167 expect(range.allowsAll(v300), isFalse); |
| 168 }); |
| 169 |
| 170 test('with no min', () { |
| 171 var range = new VersionRange(max: v250); |
| 172 expect(range.allowsAll(new VersionRange(min: v080, max: v140)), isTrue); |
| 173 expect(range.allowsAll(new VersionRange(min: v080, max: v300)), isFalse); |
| 174 expect(range.allowsAll(new VersionRange(max: v140)), isTrue); |
| 175 expect(range.allowsAll(new VersionRange(max: v300)), isFalse); |
| 176 expect(range.allowsAll(range), isTrue); |
| 177 expect(range.allowsAll(VersionConstraint.any), isFalse); |
| 178 }); |
| 179 |
| 180 test('with no max', () { |
| 181 var range = new VersionRange(min: v010); |
| 182 expect(range.allowsAll(new VersionRange(min: v080, max: v140)), isTrue); |
| 183 expect(range.allowsAll(new VersionRange(min: v003, max: v140)), isFalse); |
| 184 expect(range.allowsAll(new VersionRange(min: v080)), isTrue); |
| 185 expect(range.allowsAll(new VersionRange(min: v003)), isFalse); |
| 186 expect(range.allowsAll(range), isTrue); |
| 187 expect(range.allowsAll(VersionConstraint.any), isFalse); |
| 188 }); |
| 189 |
| 190 test('with a min and max', () { |
| 191 var range = new VersionRange(min: v010, max: v250); |
| 192 expect(range.allowsAll(new VersionRange(min: v080, max: v140)), isTrue); |
| 193 expect(range.allowsAll(new VersionRange(min: v080, max: v300)), isFalse); |
| 194 expect(range.allowsAll(new VersionRange(min: v003, max: v140)), isFalse); |
| 195 expect(range.allowsAll(new VersionRange(min: v080)), isFalse); |
| 196 expect(range.allowsAll(new VersionRange(max: v140)), isFalse); |
| 197 expect(range.allowsAll(range), isTrue); |
| 198 }); |
| 199 |
| 200 test("allows a bordering range that's not more inclusive", () { |
| 201 var exclusive = new VersionRange(min: v010, max: v250); |
| 202 var inclusive = new VersionRange( |
| 203 min: v010, includeMin: true, max: v250, includeMax: true); |
| 204 expect(inclusive.allowsAll(exclusive), isTrue); |
| 205 expect(inclusive.allowsAll(inclusive), isTrue); |
| 206 expect(exclusive.allowsAll(inclusive), isFalse); |
| 207 expect(exclusive.allowsAll(exclusive), isTrue); |
| 208 }); |
| 209 |
| 210 test('allows unions that are completely contained', () { |
| 211 var range = new VersionRange(min: v114, max: v200); |
| 212 expect( |
| 213 range.allowsAll(new VersionRange(min: v123, max: v124).union(v140)), |
| 214 isTrue); |
| 215 expect( |
| 216 range.allowsAll(new VersionRange(min: v010, max: v124).union(v140)), |
| 217 isFalse); |
| 218 expect( |
| 219 range.allowsAll(new VersionRange(min: v123, max: v234).union(v140)), |
| 220 isFalse); |
| 221 }); |
| 222 }); |
| 223 |
| 224 group('allowsAny()', () { |
| 225 test('disallows an empty constraint', () { |
| 226 expect( |
| 227 new VersionRange(min: v123, max: v250) |
| 228 .allowsAny(VersionConstraint.empty), |
| 229 isFalse); |
| 230 }); |
| 231 |
| 232 test('allows allowed versions', () { |
| 233 var range = new VersionRange(min: v123, max: v250, includeMax: true); |
| 234 expect(range.allowsAny(v123), isFalse); |
| 235 expect(range.allowsAny(v124), isTrue); |
| 236 expect(range.allowsAny(v250), isTrue); |
| 237 expect(range.allowsAny(v300), isFalse); |
| 238 }); |
| 239 |
| 240 test('with no min', () { |
| 241 var range = new VersionRange(max: v200); |
| 242 expect(range.allowsAny(new VersionRange(min: v140, max: v300)), isTrue); |
| 243 expect(range.allowsAny(new VersionRange(min: v234, max: v300)), isFalse); |
| 244 expect(range.allowsAny(new VersionRange(min: v140)), isTrue); |
| 245 expect(range.allowsAny(new VersionRange(min: v234)), isFalse); |
| 246 expect(range.allowsAny(range), isTrue); |
| 247 }); |
| 248 |
| 249 test('with no max', () { |
| 250 var range = new VersionRange(min: v072); |
| 251 expect(range.allowsAny(new VersionRange(min: v003, max: v140)), isTrue); |
| 252 expect(range.allowsAny(new VersionRange(min: v003, max: v010)), isFalse); |
| 253 expect(range.allowsAny(new VersionRange(max: v080)), isTrue); |
| 254 expect(range.allowsAny(new VersionRange(max: v003)), isFalse); |
| 255 expect(range.allowsAny(range), isTrue); |
| 256 }); |
| 257 |
| 258 test('with a min and max', () { |
| 259 var range = new VersionRange(min: v072, max: v200); |
| 260 expect(range.allowsAny(new VersionRange(min: v003, max: v140)), isTrue); |
| 261 expect(range.allowsAny(new VersionRange(min: v140, max: v300)), isTrue); |
| 262 expect(range.allowsAny(new VersionRange(min: v003, max: v010)), isFalse); |
| 263 expect(range.allowsAny(new VersionRange(min: v234, max: v300)), isFalse); |
| 264 expect(range.allowsAny(new VersionRange(max: v010)), isFalse); |
| 265 expect(range.allowsAny(new VersionRange(min: v234)), isFalse); |
| 266 expect(range.allowsAny(range), isTrue); |
| 267 }); |
| 268 |
| 269 test('allows a bordering range when both are inclusive', () { |
| 270 expect(new VersionRange(max: v250).allowsAny(new VersionRange(min: v250)), |
| 271 isFalse); |
| 272 |
| 273 expect(new VersionRange(max: v250, includeMax: true) |
| 274 .allowsAny(new VersionRange(min: v250)), |
| 275 isFalse); |
| 276 |
| 277 expect(new VersionRange(max: v250) |
| 278 .allowsAny(new VersionRange(min: v250, includeMin: true)), |
| 279 isFalse); |
| 280 |
| 281 expect(new VersionRange(max: v250, includeMax: true) |
| 282 .allowsAny(new VersionRange(min: v250, includeMin: true)), |
| 283 isTrue); |
| 284 |
| 285 expect(new VersionRange(min: v250).allowsAny(new VersionRange(max: v250)), |
| 286 isFalse); |
| 287 |
| 288 expect(new VersionRange(min: v250, includeMin: true) |
| 289 .allowsAny(new VersionRange(max: v250)), |
| 290 isFalse); |
| 291 |
| 292 expect(new VersionRange(min: v250) |
| 293 .allowsAny(new VersionRange(max: v250, includeMax: true)), |
| 294 isFalse); |
| 295 |
| 296 expect(new VersionRange(min: v250, includeMin: true) |
| 297 .allowsAny(new VersionRange(max: v250, includeMax: true)), |
| 298 isTrue); |
| 299 }); |
| 300 |
| 301 test('allows unions that are partially contained', () { |
| 302 var range = new VersionRange(min: v114, max: v200); |
| 303 expect( |
| 304 range.allowsAny(new VersionRange(min: v010, max: v080).union(v140)), |
| 305 isTrue); |
| 306 expect( |
| 307 range.allowsAny(new VersionRange(min: v123, max: v234).union(v300)), |
| 308 isTrue); |
| 309 expect( |
| 310 range.allowsAny(new VersionRange(min: v234, max: v300).union(v010)), |
| 311 isFalse); |
| 312 }); |
| 313 }); |
| 314 |
154 group('intersect()', () { | 315 group('intersect()', () { |
155 test('two overlapping ranges', () { | 316 test('two overlapping ranges', () { |
156 var a = new VersionRange(min: v123, max: v250); | 317 var a = new VersionRange(min: v123, max: v250); |
157 var b = new VersionRange(min: v200, max: v300); | 318 var b = new VersionRange(min: v200, max: v300); |
158 var intersect = a.intersect(b); | 319 var intersect = a.intersect(b); |
159 expect(intersect.min, equals(v200)); | 320 expect(intersect.min, equals(v200)); |
160 expect(intersect.max, equals(v250)); | 321 expect(intersect.max, equals(v250)); |
161 expect(intersect.includeMin, isFalse); | 322 expect(intersect.includeMin, isFalse); |
162 expect(intersect.includeMax, isFalse); | 323 expect(intersect.includeMax, isFalse); |
163 }); | 324 }); |
(...skipping 24 matching lines...) Expand all Loading... |
188 }); | 349 }); |
189 | 350 |
190 test('returns the version if the range allows it', () { | 351 test('returns the version if the range allows it', () { |
191 expect(new VersionRange(min: v114, max: v124).intersect(v123), | 352 expect(new VersionRange(min: v114, max: v124).intersect(v123), |
192 equals(v123)); | 353 equals(v123)); |
193 expect(new VersionRange(min: v123, max: v124).intersect(v114).isEmpty, | 354 expect(new VersionRange(min: v123, max: v124).intersect(v114).isEmpty, |
194 isTrue); | 355 isTrue); |
195 }); | 356 }); |
196 }); | 357 }); |
197 | 358 |
| 359 group('union()', () { |
| 360 test("with a version returns the range if it contains the version", () { |
| 361 var range = new VersionRange(min: v114, max: v124); |
| 362 expect(range.union(v123), equals(range)); |
| 363 }); |
| 364 |
| 365 test("with a version on the edge of the range, expands the range", () { |
| 366 expect(new VersionRange(min: v114, max: v124).union(v124), |
| 367 equals(new VersionRange(min: v114, max: v124, includeMax: true))); |
| 368 expect(new VersionRange(min: v114, max: v124).union(v114), |
| 369 equals(new VersionRange(min: v114, max: v124, includeMin: true))); |
| 370 }); |
| 371 |
| 372 test("with a version allows both the range and the version if the range " |
| 373 "doesn't contain the version", () { |
| 374 var result = new VersionRange(min: v003, max: v114).union(v124); |
| 375 expect(result, allows(v010)); |
| 376 expect(result, doesNotAllow(v123)); |
| 377 expect(result, allows(v124)); |
| 378 }); |
| 379 |
| 380 test("returns a VersionUnion for a disjoint range", () { |
| 381 var result = new VersionRange(min: v003, max: v114) |
| 382 .union(new VersionRange(min: v130, max: v200)); |
| 383 expect(result, allows(v080)); |
| 384 expect(result, doesNotAllow(v123)); |
| 385 expect(result, allows(v140)); |
| 386 }); |
| 387 |
| 388 test("considers open ranges disjoint", () { |
| 389 var result = new VersionRange(min: v003, max: v114) |
| 390 .union(new VersionRange(min: v114, max: v200)); |
| 391 expect(result, allows(v080)); |
| 392 expect(result, doesNotAllow(v114)); |
| 393 expect(result, allows(v140)); |
| 394 |
| 395 result = new VersionRange(min: v114, max: v200) |
| 396 .union(new VersionRange(min: v003, max: v114)); |
| 397 expect(result, allows(v080)); |
| 398 expect(result, doesNotAllow(v114)); |
| 399 expect(result, allows(v140)); |
| 400 }); |
| 401 |
| 402 test("returns a merged range for an overlapping range", () { |
| 403 var result = new VersionRange(min: v003, max: v114) |
| 404 .union(new VersionRange(min: v080, max: v200)); |
| 405 expect(result, equals(new VersionRange(min: v003, max: v200))); |
| 406 }); |
| 407 |
| 408 test("considers closed ranges overlapping", () { |
| 409 var result = new VersionRange(min: v003, max: v114, includeMax: true) |
| 410 .union(new VersionRange(min: v114, max: v200)); |
| 411 expect(result, equals(new VersionRange(min: v003, max: v200))); |
| 412 |
| 413 result = new VersionRange(min: v003, max: v114) |
| 414 .union(new VersionRange(min: v114, max: v200, includeMin: true)); |
| 415 expect(result, equals(new VersionRange(min: v003, max: v200))); |
| 416 |
| 417 result = new VersionRange(min: v114, max: v200) |
| 418 .union(new VersionRange(min: v003, max: v114, includeMax: true)); |
| 419 expect(result, equals(new VersionRange(min: v003, max: v200))); |
| 420 |
| 421 result = new VersionRange(min: v114, max: v200, includeMin: true) |
| 422 .union(new VersionRange(min: v003, max: v114)); |
| 423 expect(result, equals(new VersionRange(min: v003, max: v200))); |
| 424 }); |
| 425 |
| 426 test("includes edges if either range does", () { |
| 427 var result = new VersionRange(min: v003, max: v114, includeMin: true) |
| 428 .union(new VersionRange(min: v003, max: v114, includeMax: true)); |
| 429 expect(result, equals(new VersionRange( |
| 430 min: v003, max: v114, includeMin: true, includeMax: true))); |
| 431 }); |
| 432 }); |
| 433 |
198 test('isEmpty', () { | 434 test('isEmpty', () { |
199 expect(new VersionRange().isEmpty, isFalse); | 435 expect(new VersionRange().isEmpty, isFalse); |
200 expect(new VersionRange(min: v123, max: v124).isEmpty, isFalse); | 436 expect(new VersionRange(min: v123, max: v124).isEmpty, isFalse); |
201 }); | 437 }); |
202 } | 438 } |
OLD | NEW |