Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(90)

Side by Side Diff: test/version_range_test.dart

Issue 2045803002: Add VersionConstraint.difference(). (Closed) Base URL: git@github.com:dart-lang/pub_semver@master
Patch Set: Code review changes Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « pubspec.yaml ('k') | test/version_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 import 'package:test/test.dart'; 5 import 'package:test/test.dart';
6 6
7 import 'package:pub_semver/pub_semver.dart'; 7 import 'package:pub_semver/pub_semver.dart';
8 8
9 import 'utils.dart'; 9 import 'utils.dart';
10 10
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 expect(intersect.includeMax, isFalse); 333 expect(intersect.includeMax, isFalse);
334 }); 334 });
335 335
336 test('a non-overlapping range allows no versions', () { 336 test('a non-overlapping range allows no versions', () {
337 var a = new VersionRange(min: v114, max: v124); 337 var a = new VersionRange(min: v114, max: v124);
338 var b = new VersionRange(min: v200, max: v250); 338 var b = new VersionRange(min: v200, max: v250);
339 expect(a.intersect(b).isEmpty, isTrue); 339 expect(a.intersect(b).isEmpty, isTrue);
340 }); 340 });
341 341
342 test('adjacent ranges allow no versions if exclusive', () { 342 test('adjacent ranges allow no versions if exclusive', () {
343 var a = new VersionRange(min: v114, max: v124, includeMax: false); 343 var a = new VersionRange(min: v114, max: v124);
344 var b = new VersionRange(min: v124, max: v200, includeMin: true); 344 var b = new VersionRange(min: v124, max: v200);
345 expect(a.intersect(b).isEmpty, isTrue); 345 expect(a.intersect(b).isEmpty, isTrue);
346 }); 346 });
347 347
348 test('adjacent ranges allow version if inclusive', () { 348 test('adjacent ranges allow version if inclusive', () {
349 var a = new VersionRange(min: v114, max: v124, includeMax: true); 349 var a = new VersionRange(min: v114, max: v124, includeMax: true);
350 var b = new VersionRange(min: v124, max: v200, includeMin: true); 350 var b = new VersionRange(min: v124, max: v200, includeMin: true);
351 expect(a.intersect(b), equals(v124)); 351 expect(a.intersect(b), equals(v124));
352 }); 352 });
353 353
354 test('with an open range', () { 354 test('with an open range', () {
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
434 }); 434 });
435 435
436 test("includes edges if either range does", () { 436 test("includes edges if either range does", () {
437 var result = new VersionRange(min: v003, max: v114, includeMin: true) 437 var result = new VersionRange(min: v003, max: v114, includeMin: true)
438 .union(new VersionRange(min: v003, max: v114, includeMax: true)); 438 .union(new VersionRange(min: v003, max: v114, includeMax: true));
439 expect(result, equals(new VersionRange( 439 expect(result, equals(new VersionRange(
440 min: v003, max: v114, includeMin: true, includeMax: true))); 440 min: v003, max: v114, includeMin: true, includeMax: true)));
441 }); 441 });
442 }); 442 });
443 443
444 group('difference()', () {
445 test("with an empty range returns the original range", () {
446 expect(
447 new VersionRange(min: v003, max: v114)
448 .difference(VersionConstraint.empty),
449 equals(new VersionRange(min: v003, max: v114)));
450 });
451
452 test("with a version outside the range returns the original range", () {
453 expect(
454 new VersionRange(min: v003, max: v114).difference(v200),
455 equals(new VersionRange(min: v003, max: v114)));
456 });
457
458 test("with a version in the range splits the range", () {
459 expect(
460 new VersionRange(min: v003, max: v114).difference(v072),
461 equals(new VersionConstraint.unionOf([
462 new VersionRange(min: v003, max: v072),
463 new VersionRange(min: v072, max: v114)
464 ])));
465 });
466
467 test("with the max version makes the max exclusive", () {
468 expect(
469 new VersionRange(min: v003, max: v114, includeMax: true)
470 .difference(v114),
471 equals(new VersionRange(min: v003, max: v114)));
472 });
473
474 test("with the min version makes the min exclusive", () {
475 expect(
476 new VersionRange(min: v003, max: v114, includeMin: true)
477 .difference(v003),
478 equals(new VersionRange(min: v003, max: v114)));
479 });
480
481 test("with a disjoint range returns the original", () {
482 expect(
483 new VersionRange(min: v003, max: v114)
484 .difference(new VersionRange(min: v123, max: v140)),
485 equals(new VersionRange(min: v003, max: v114)));
486 });
487
488 test("with an adjacent range returns the original", () {
489 expect(
490 new VersionRange(min: v003, max: v114, includeMax: true)
491 .difference(new VersionRange(min: v114, max: v140)),
492 equals(new VersionRange(min: v003, max: v114, includeMax: true)));
493 });
494
495 test("with a range at the beginning cuts off the beginning of the range",
496 () {
497 expect(
498 new VersionRange(min: v080, max: v130)
499 .difference(new VersionRange(min: v010, max: v114)),
500 equals(new VersionRange(min: v114, max: v130, includeMin: true)));
501 expect(
502 new VersionRange(min: v080, max: v130)
503 .difference(new VersionRange(max: v114)),
504 equals(new VersionRange(min: v114, max: v130, includeMin: true)));
505 expect(
506 new VersionRange(min: v080, max: v130).difference(
507 new VersionRange(min: v010, max: v114, includeMax: true)),
508 equals(new VersionRange(min: v114, max: v130)));
509 expect(
510 new VersionRange(min: v080, max: v130, includeMin: true).difference(
511 new VersionRange(min: v010, max: v080, includeMax: true)),
512 equals(new VersionRange(min: v080, max: v130)));
513 expect(
514 new VersionRange(min: v080, max: v130, includeMax: true)
515 .difference(new VersionRange(min: v080, max: v130)),
516 equals(v130));
517 });
518
519 test("with a range at the end cuts off the end of the range",
520 () {
521 expect(
522 new VersionRange(min: v080, max: v130)
523 .difference(new VersionRange(min: v114, max: v140)),
524 equals(new VersionRange(min: v080, max: v114, includeMax: true)));
525 expect(
526 new VersionRange(min: v080, max: v130)
527 .difference(new VersionRange(min: v114)),
528 equals(new VersionRange(min: v080, max: v114, includeMax: true)));
529 expect(
530 new VersionRange(min: v080, max: v130).difference(
531 new VersionRange(min: v114, max: v140, includeMin: true)),
532 equals(new VersionRange(min: v080, max: v114)));
533 expect(
534 new VersionRange(min: v080, max: v130, includeMax: true).difference(
535 new VersionRange(min: v130, max: v140, includeMin: true)),
536 equals(new VersionRange(min: v080, max: v130)));
537 expect(
538 new VersionRange(min: v080, max: v130, includeMin: true)
539 .difference(new VersionRange(min: v080, max: v130)),
540 equals(v080));
541 });
542
543 test("with a range in the middle cuts the range in half", () {
544 expect(
545 new VersionRange(min: v003, max: v130)
546 .difference(new VersionRange(min: v072, max: v114)),
547 equals(new VersionConstraint.unionOf([
548 new VersionRange(min: v003, max: v072, includeMax: true),
549 new VersionRange(min: v114, max: v130, includeMin: true)
550 ])));
551 });
552
553 test("with a totally covering range returns empty", () {
554 expect(
555 new VersionRange(min: v114, max: v200)
556 .difference(new VersionRange(min: v072, max: v300)),
557 isEmpty);
558 expect(
559 new VersionRange(min: v003, max: v114)
560 .difference(new VersionRange(min: v003, max: v114)),
561 isEmpty);
562 expect(
563 new VersionRange(
564 min: v003, max: v114, includeMin: true, includeMax: true)
565 .difference(new VersionRange(
566 min: v003, max: v114, includeMin: true, includeMax: true)),
567 isEmpty);
568 });
569
570 test("with a version union that doesn't cover the range, returns the "
571 "original", () {
572 expect(
573 new VersionRange(min: v114, max: v140)
574 .difference(new VersionConstraint.unionOf([v010, v200])),
575 equals(new VersionRange(min: v114, max: v140)));
576 });
577
578 test("with a version union that intersects the ends, chops them off", () {
579 expect(
580 new VersionRange(min: v114, max: v140)
581 .difference(new VersionConstraint.unionOf([
582 new VersionRange(min: v080, max: v123),
583 new VersionRange(min: v130, max: v200)
584 ])),
585 equals(new VersionRange(
586 min: v123, max: v130, includeMin: true, includeMax: true)));
587 });
588
589 test("with a version union that intersects the middle, chops it up", () {
590 expect(
591 new VersionRange(min: v114, max: v140)
592 .difference(new VersionConstraint.unionOf([v123, v124, v130])),
593 equals(new VersionConstraint.unionOf([
594 new VersionRange(min: v114, max: v123),
595 new VersionRange(min: v123, max: v124),
596 new VersionRange(min: v124, max: v130),
597 new VersionRange(min: v130, max: v140)
598 ])));
599 });
600 });
601
444 test('isEmpty', () { 602 test('isEmpty', () {
445 expect(new VersionRange().isEmpty, isFalse); 603 expect(new VersionRange().isEmpty, isFalse);
446 expect(new VersionRange(min: v123, max: v124).isEmpty, isFalse); 604 expect(new VersionRange(min: v123, max: v124).isEmpty, isFalse);
447 }); 605 });
448 606
449 group('compareTo()', () { 607 group('compareTo()', () {
450 test("orders by minimum first", () { 608 test("orders by minimum first", () {
451 _expectComparesSmaller( 609 _expectComparesSmaller(
452 new VersionRange(min: v003, max: v080), 610 new VersionRange(min: v003, max: v080),
453 new VersionRange(min: v010, max: v072)); 611 new VersionRange(min: v010, max: v072));
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
496 }); 654 });
497 }); 655 });
498 } 656 }
499 657
500 void _expectComparesSmaller(VersionRange smaller, VersionRange larger) { 658 void _expectComparesSmaller(VersionRange smaller, VersionRange larger) {
501 expect(smaller.compareTo(larger), lessThan(0), 659 expect(smaller.compareTo(larger), lessThan(0),
502 reason: "expected $smaller to sort below $larger"); 660 reason: "expected $smaller to sort below $larger");
503 expect(larger.compareTo(smaller), greaterThan(0), 661 expect(larger.compareTo(smaller), greaterThan(0),
504 reason: "expected $larger to sort above $smaller"); 662 reason: "expected $larger to sort above $smaller");
505 } 663 }
OLDNEW
« no previous file with comments | « pubspec.yaml ('k') | test/version_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698