Index: test/version_range_test.dart |
diff --git a/test/version_range_test.dart b/test/version_range_test.dart |
index eaa473f033aba2ce71d14b743a96842305bab8f8..a2dbf98108e0d136309624224408c1bb7db2eece 100644 |
--- a/test/version_range_test.dart |
+++ b/test/version_range_test.dart |
@@ -340,8 +340,8 @@ main() { |
}); |
test('adjacent ranges allow no versions if exclusive', () { |
- var a = new VersionRange(min: v114, max: v124, includeMax: false); |
- var b = new VersionRange(min: v124, max: v200, includeMin: true); |
+ var a = new VersionRange(min: v114, max: v124); |
+ var b = new VersionRange(min: v124, max: v200); |
expect(a.intersect(b).isEmpty, isTrue); |
}); |
@@ -441,6 +441,164 @@ main() { |
}); |
}); |
+ group('difference()', () { |
+ test("with an empty range returns the original range", () { |
+ expect( |
+ new VersionRange(min: v003, max: v114) |
+ .difference(VersionConstraint.empty), |
+ equals(new VersionRange(min: v003, max: v114))); |
+ }); |
+ |
+ test("with a version outside the range returns the original range", () { |
+ expect( |
+ new VersionRange(min: v003, max: v114).difference(v200), |
+ equals(new VersionRange(min: v003, max: v114))); |
+ }); |
+ |
+ test("with a version in the range splits the range", () { |
+ expect( |
+ new VersionRange(min: v003, max: v114).difference(v072), |
+ equals(new VersionConstraint.unionOf([ |
+ new VersionRange(min: v003, max: v072), |
+ new VersionRange(min: v072, max: v114) |
+ ]))); |
+ }); |
+ |
+ test("with the max version makes the max exclusive", () { |
+ expect( |
+ new VersionRange(min: v003, max: v114, includeMax: true) |
+ .difference(v114), |
+ equals(new VersionRange(min: v003, max: v114))); |
+ }); |
+ |
+ test("with the min version makes the min exclusive", () { |
+ expect( |
+ new VersionRange(min: v003, max: v114, includeMin: true) |
+ .difference(v003), |
+ equals(new VersionRange(min: v003, max: v114))); |
+ }); |
+ |
+ test("with a disjoint range returns the original", () { |
+ expect( |
+ new VersionRange(min: v003, max: v114) |
+ .difference(new VersionRange(min: v123, max: v140)), |
+ equals(new VersionRange(min: v003, max: v114))); |
+ }); |
+ |
+ test("with an adjacent range returns the original", () { |
+ expect( |
+ new VersionRange(min: v003, max: v114, includeMax: true) |
+ .difference(new VersionRange(min: v114, max: v140)), |
+ equals(new VersionRange(min: v003, max: v114, includeMax: true))); |
+ }); |
+ |
+ test("with a range at the beginning cuts off the beginning of the range", |
+ () { |
+ expect( |
+ new VersionRange(min: v080, max: v130) |
+ .difference(new VersionRange(min: v010, max: v114)), |
+ equals(new VersionRange(min: v114, max: v130, includeMin: true))); |
+ expect( |
+ new VersionRange(min: v080, max: v130) |
+ .difference(new VersionRange(max: v114)), |
+ equals(new VersionRange(min: v114, max: v130, includeMin: true))); |
+ expect( |
+ new VersionRange(min: v080, max: v130).difference( |
+ new VersionRange(min: v010, max: v114, includeMax: true)), |
+ equals(new VersionRange(min: v114, max: v130))); |
+ expect( |
+ new VersionRange(min: v080, max: v130, includeMin: true).difference( |
+ new VersionRange(min: v010, max: v080, includeMax: true)), |
+ equals(new VersionRange(min: v080, max: v130))); |
+ expect( |
+ new VersionRange(min: v080, max: v130, includeMax: true) |
+ .difference(new VersionRange(min: v080, max: v130)), |
+ equals(v130)); |
+ }); |
+ |
+ test("with a range at the end cuts off the end of the range", |
+ () { |
+ expect( |
+ new VersionRange(min: v080, max: v130) |
+ .difference(new VersionRange(min: v114, max: v140)), |
+ equals(new VersionRange(min: v080, max: v114, includeMax: true))); |
+ expect( |
+ new VersionRange(min: v080, max: v130) |
+ .difference(new VersionRange(min: v114)), |
+ equals(new VersionRange(min: v080, max: v114, includeMax: true))); |
+ expect( |
+ new VersionRange(min: v080, max: v130).difference( |
+ new VersionRange(min: v114, max: v140, includeMin: true)), |
+ equals(new VersionRange(min: v080, max: v114))); |
+ expect( |
+ new VersionRange(min: v080, max: v130, includeMax: true).difference( |
+ new VersionRange(min: v130, max: v140, includeMin: true)), |
+ equals(new VersionRange(min: v080, max: v130))); |
+ expect( |
+ new VersionRange(min: v080, max: v130, includeMin: true) |
+ .difference(new VersionRange(min: v080, max: v130)), |
+ equals(v080)); |
+ }); |
+ |
+ test("with a range in the middle cuts the range in half", () { |
+ expect( |
+ new VersionRange(min: v003, max: v130) |
+ .difference(new VersionRange(min: v072, max: v114)), |
+ equals(new VersionConstraint.unionOf([ |
+ new VersionRange(min: v003, max: v072, includeMax: true), |
+ new VersionRange(min: v114, max: v130, includeMin: true) |
+ ]))); |
+ }); |
+ |
+ test("with a totally covering range returns empty", () { |
+ expect( |
+ new VersionRange(min: v114, max: v200) |
+ .difference(new VersionRange(min: v072, max: v300)), |
+ isEmpty); |
+ expect( |
+ new VersionRange(min: v003, max: v114) |
+ .difference(new VersionRange(min: v003, max: v114)), |
+ isEmpty); |
+ expect( |
+ new VersionRange( |
+ min: v003, max: v114, includeMin: true, includeMax: true) |
+ .difference(new VersionRange( |
+ min: v003, max: v114, includeMin: true, includeMax: true)), |
+ isEmpty); |
+ }); |
+ |
+ test("with a version union that doesn't cover the range, returns the " |
+ "original", () { |
+ expect( |
+ new VersionRange(min: v114, max: v140) |
+ .difference(new VersionConstraint.unionOf([v010, v200])), |
+ equals(new VersionRange(min: v114, max: v140))); |
+ }); |
+ |
+ test("with a version union that intersects the ends, chops them off", () { |
+ expect( |
+ new VersionRange(min: v114, max: v140) |
+ .difference(new VersionConstraint.unionOf([ |
+ new VersionRange(min: v080, max: v123), |
+ new VersionRange(min: v130, max: v200) |
+ ])), |
+ equals(new VersionRange( |
+ min: v123, max: v130, includeMin: true, includeMax: true))); |
+ }); |
+ |
+ test("with a version union that intersects the middle, chops it up", () { |
+ expect( |
+ new VersionRange(min: v114, max: v140) |
+ .difference(new VersionConstraint.unionOf([v123, v124, v130])), |
+ equals(new VersionConstraint.unionOf([ |
+ new VersionRange(min: v114, max: v123), |
+ new VersionRange(min: v123, max: v124), |
+ new VersionRange(min: v124, max: v130), |
+ new VersionRange(min: v130, max: v140) |
+ ]))); |
+ }); |
+ }); |
+ |
test('isEmpty', () { |
expect(new VersionRange().isEmpty, isFalse); |
expect(new VersionRange(min: v123, max: v124).isEmpty, isFalse); |