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

Unified Diff: test/version_range_test.dart

Issue 1127783002: Add more set-like version constraint operations. (Closed) Base URL: git@github.com:dart-lang/pub_semver@master
Patch Set: Code review changes Created 5 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: test/version_range_test.dart
diff --git a/test/version_range_test.dart b/test/version_range_test.dart
index e15539bec27e1d623b96ef6fc32e9bac72e8580f..ef35d802237936b7452d70e192728f31703c310b 100644
--- a/test/version_range_test.dart
+++ b/test/version_range_test.dart
@@ -151,6 +151,167 @@ 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);
+ expect(range.allowsAll(VersionConstraint.any), isFalse);
+ });
+
+ 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);
+ expect(range.allowsAll(VersionConstraint.any), isFalse);
+ });
+
+ 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 +356,81 @@ 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(v124);
+ expect(result, allows(v010));
+ expect(result, doesNotAllow(v123));
+ expect(result, allows(v124));
+ });
+
+ 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));
+
+ result = new VersionRange(min: v114, max: v200)
+ .union(new VersionRange(min: v003, max: v114));
+ 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)));
+
+ result = new VersionRange(min: v114, max: v200)
+ .union(new VersionRange(min: v003, max: v114, includeMax: true));
+ expect(result, equals(new VersionRange(min: v003, max: v200)));
+
+ result = new VersionRange(min: v114, max: v200, includeMin: true)
+ .union(new VersionRange(min: v003, max: v114));
+ 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);
« lib/src/version_range.dart ('K') | « pubspec.yaml ('k') | test/version_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698