Index: test/version_range_test.dart |
diff --git a/test/version_range_test.dart b/test/version_range_test.dart |
index e15539bec27e1d623b96ef6fc32e9bac72e8580f..1dcc22e5e60c1d7226724ebd550508437ef5500d 100644 |
--- a/test/version_range_test.dart |
+++ b/test/version_range_test.dart |
@@ -151,6 +151,165 @@ main() { |
}); |
}); |
+ group('allowsAll()', () { |
+ test('allows an empty constraint', () { |
+ expect( |
+ new VersionRange(min: v123, max: v250) |
+ .allowsAll(VersionConstraint.empty), |
+ isTrue); |
+ }); |
+ |
+ test('allows allowed versions', () { |
+ var range = new VersionRange(min: v123, max: v250, includeMax: true); |
+ expect(range.allowsAll(v123), isFalse); |
+ expect(range.allowsAll(v124), isTrue); |
+ expect(range.allowsAll(v250), isTrue); |
+ expect(range.allowsAll(v300), isFalse); |
+ }); |
+ |
+ test('with no min', () { |
+ var range = new VersionRange(max: v250); |
+ expect(range.allowsAll(new VersionRange(min: v080, max: v140)), isTrue); |
+ expect(range.allowsAll(new VersionRange(min: v080, max: v300)), isFalse); |
+ expect(range.allowsAll(new VersionRange(max: v140)), isTrue); |
+ expect(range.allowsAll(new VersionRange(max: v300)), isFalse); |
+ expect(range.allowsAll(range), isTrue); |
Bob Nystrom
2015/05/05 20:49:09
Maybe test against new VersionRange() (i.e. the op
nweiz
2015/05/05 22:52:34
Done.
|
+ }); |
+ |
+ test('with no max', () { |
+ var range = new VersionRange(min: v010); |
+ expect(range.allowsAll(new VersionRange(min: v080, max: v140)), isTrue); |
+ expect(range.allowsAll(new VersionRange(min: v003, max: v140)), isFalse); |
+ expect(range.allowsAll(new VersionRange(min: v080)), isTrue); |
+ expect(range.allowsAll(new VersionRange(min: v003)), isFalse); |
+ expect(range.allowsAll(range), isTrue); |
+ }); |
+ |
+ test('with a min and max', () { |
+ var range = new VersionRange(min: v010, max: v250); |
+ expect(range.allowsAll(new VersionRange(min: v080, max: v140)), isTrue); |
+ expect(range.allowsAll(new VersionRange(min: v080, max: v300)), isFalse); |
+ expect(range.allowsAll(new VersionRange(min: v003, max: v140)), isFalse); |
+ expect(range.allowsAll(new VersionRange(min: v080)), isFalse); |
+ expect(range.allowsAll(new VersionRange(max: v140)), isFalse); |
+ expect(range.allowsAll(range), isTrue); |
+ }); |
+ |
+ test("allows a bordering range that's not more inclusive", () { |
+ var exclusive = new VersionRange(min: v010, max: v250); |
+ var inclusive = new VersionRange( |
+ min: v010, includeMin: true, max: v250, includeMax: true); |
+ expect(inclusive.allowsAll(exclusive), isTrue); |
+ expect(inclusive.allowsAll(inclusive), isTrue); |
+ expect(exclusive.allowsAll(inclusive), isFalse); |
+ expect(exclusive.allowsAll(exclusive), isTrue); |
+ }); |
+ |
+ test('allows unions that are completely contained', () { |
+ var range = new VersionRange(min: v114, max: v200); |
+ expect( |
+ range.allowsAll(new VersionRange(min: v123, max: v124).union(v140)), |
+ isTrue); |
+ expect( |
+ range.allowsAll(new VersionRange(min: v010, max: v124).union(v140)), |
+ isFalse); |
+ expect( |
+ range.allowsAll(new VersionRange(min: v123, max: v234).union(v140)), |
+ isFalse); |
+ }); |
+ }); |
+ |
+ group('allowsAny()', () { |
+ test('disallows an empty constraint', () { |
+ expect( |
+ new VersionRange(min: v123, max: v250) |
+ .allowsAny(VersionConstraint.empty), |
+ isFalse); |
+ }); |
+ |
+ test('allows allowed versions', () { |
+ var range = new VersionRange(min: v123, max: v250, includeMax: true); |
+ expect(range.allowsAny(v123), isFalse); |
+ expect(range.allowsAny(v124), isTrue); |
+ expect(range.allowsAny(v250), isTrue); |
+ expect(range.allowsAny(v300), isFalse); |
+ }); |
+ |
+ test('with no min', () { |
+ var range = new VersionRange(max: v200); |
+ expect(range.allowsAny(new VersionRange(min: v140, max: v300)), isTrue); |
+ expect(range.allowsAny(new VersionRange(min: v234, max: v300)), isFalse); |
+ expect(range.allowsAny(new VersionRange(min: v140)), isTrue); |
+ expect(range.allowsAny(new VersionRange(min: v234)), isFalse); |
+ expect(range.allowsAny(range), isTrue); |
+ }); |
+ |
+ test('with no max', () { |
+ var range = new VersionRange(min: v072); |
+ expect(range.allowsAny(new VersionRange(min: v003, max: v140)), isTrue); |
+ expect(range.allowsAny(new VersionRange(min: v003, max: v010)), isFalse); |
+ expect(range.allowsAny(new VersionRange(max: v080)), isTrue); |
+ expect(range.allowsAny(new VersionRange(max: v003)), isFalse); |
+ expect(range.allowsAny(range), isTrue); |
+ }); |
+ |
+ test('with a min and max', () { |
+ var range = new VersionRange(min: v072, max: v200); |
+ expect(range.allowsAny(new VersionRange(min: v003, max: v140)), isTrue); |
+ expect(range.allowsAny(new VersionRange(min: v140, max: v300)), isTrue); |
+ expect(range.allowsAny(new VersionRange(min: v003, max: v010)), isFalse); |
+ expect(range.allowsAny(new VersionRange(min: v234, max: v300)), isFalse); |
+ expect(range.allowsAny(new VersionRange(max: v010)), isFalse); |
+ expect(range.allowsAny(new VersionRange(min: v234)), isFalse); |
+ expect(range.allowsAny(range), isTrue); |
+ }); |
+ |
+ test('allows a bordering range when both are inclusive', () { |
+ expect(new VersionRange(max: v250).allowsAny(new VersionRange(min: v250)), |
+ isFalse); |
+ |
+ expect(new VersionRange(max: v250, includeMax: true) |
+ .allowsAny(new VersionRange(min: v250)), |
+ isFalse); |
+ |
+ expect(new VersionRange(max: v250) |
+ .allowsAny(new VersionRange(min: v250, includeMin: true)), |
+ isFalse); |
+ |
+ expect(new VersionRange(max: v250, includeMax: true) |
+ .allowsAny(new VersionRange(min: v250, includeMin: true)), |
+ isTrue); |
+ |
+ expect(new VersionRange(min: v250).allowsAny(new VersionRange(max: v250)), |
+ isFalse); |
+ |
+ expect(new VersionRange(min: v250, includeMin: true) |
+ .allowsAny(new VersionRange(max: v250)), |
+ isFalse); |
+ |
+ expect(new VersionRange(min: v250) |
+ .allowsAny(new VersionRange(max: v250, includeMax: true)), |
+ isFalse); |
+ |
+ expect(new VersionRange(min: v250, includeMin: true) |
+ .allowsAny(new VersionRange(max: v250, includeMax: true)), |
+ isTrue); |
+ }); |
+ |
+ test('allows unions that are partially contained', () { |
+ var range = new VersionRange(min: v114, max: v200); |
+ expect( |
+ range.allowsAny(new VersionRange(min: v010, max: v080).union(v140)), |
+ isTrue); |
+ expect( |
+ range.allowsAny(new VersionRange(min: v123, max: v234).union(v300)), |
+ isTrue); |
+ expect( |
+ range.allowsAny(new VersionRange(min: v234, max: v300).union(v010)), |
+ isFalse); |
+ }); |
+ }); |
+ |
group('intersect()', () { |
test('two overlapping ranges', () { |
var a = new VersionRange(min: v123, max: v250); |
@@ -195,6 +354,66 @@ main() { |
}); |
}); |
+ group('union()', () { |
+ test("with a version returns the range if it contains the version", () { |
+ var range = new VersionRange(min: v114, max: v124); |
+ expect(range.union(v123), equals(range)); |
+ }); |
+ |
+ test("with a version on the edge of the range, expands the range", () { |
+ expect(new VersionRange(min: v114, max: v124).union(v124), |
+ equals(new VersionRange(min: v114, max: v124, includeMax: true))); |
+ expect(new VersionRange(min: v114, max: v124).union(v114), |
+ equals(new VersionRange(min: v114, max: v124, includeMin: true))); |
+ }); |
+ |
+ test("with a version allows both the range and the version if the range " |
+ "doesn't contain the version", () { |
+ var result = new VersionRange(min: v003, max: v114).union(v123); |
+ expect(result, allows(v123)); |
Bob Nystrom
2015/05/05 20:49:09
To match the next tests, maybe put a doesNotAllow
nweiz
2015/05/05 22:52:34
Done.
|
+ expect(result, allows(v010)); |
+ }); |
+ |
+ test("returns a VersionUnion for a disjoint range", () { |
+ var result = new VersionRange(min: v003, max: v114) |
+ .union(new VersionRange(min: v130, max: v200)); |
+ expect(result, allows(v080)); |
+ expect(result, doesNotAllow(v123)); |
+ expect(result, allows(v140)); |
+ }); |
+ |
+ test("considers open ranges disjoint", () { |
+ var result = new VersionRange(min: v003, max: v114) |
+ .union(new VersionRange(min: v114, max: v200)); |
+ expect(result, allows(v080)); |
+ expect(result, doesNotAllow(v114)); |
+ expect(result, allows(v140)); |
+ }); |
+ |
+ test("returns a merged range for an overlapping range", () { |
+ var result = new VersionRange(min: v003, max: v114) |
+ .union(new VersionRange(min: v080, max: v200)); |
+ expect(result, equals(new VersionRange(min: v003, max: v200))); |
+ }); |
+ |
+ test("considers closed ranges overlapping", () { |
+ var result = new VersionRange(min: v003, max: v114, includeMax: true) |
+ .union(new VersionRange(min: v114, max: v200)); |
+ expect(result, equals(new VersionRange(min: v003, max: v200))); |
+ |
+ result = new VersionRange(min: v003, max: v114) |
+ .union(new VersionRange(min: v114, max: v200, includeMin: true)); |
+ expect(result, equals(new VersionRange(min: v003, max: v200))); |
+ }); |
+ |
+ test("includes edges if either range does", () { |
+ var result = new VersionRange(min: v003, max: v114, includeMin: true) |
+ .union(new VersionRange(min: v003, max: v114, includeMax: true)); |
+ expect(result, equals(new VersionRange( |
+ min: v003, max: v114, includeMin: true, includeMax: true))); |
+ }); |
+ }); |
+ |
test('isEmpty', () { |
expect(new VersionRange().isEmpty, isFalse); |
expect(new VersionRange(min: v123, max: v124).isEmpty, isFalse); |