Index: mojo/public/dart/third_party/pub_semver/test/version_range_test.dart |
diff --git a/mojo/public/dart/third_party/pub_semver/test/version_range_test.dart b/mojo/public/dart/third_party/pub_semver/test/version_range_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6df6b310adf199c130e15c614295ea4964931f8a |
--- /dev/null |
+++ b/mojo/public/dart/third_party/pub_semver/test/version_range_test.dart |
@@ -0,0 +1,450 @@ |
+// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+ |
+library pub_semver.test.version_range_test; |
+ |
+import 'package:test/test.dart'; |
+ |
+import 'package:pub_semver/pub_semver.dart'; |
+ |
+import 'utils.dart'; |
+ |
+main() { |
+ group('constructor', () { |
+ test('takes a min and max', () { |
+ var range = new VersionRange(min: v123, max: v124); |
+ expect(range.isAny, isFalse); |
+ expect(range.min, equals(v123)); |
+ expect(range.max, equals(v124)); |
+ }); |
+ |
+ test('allows omitting max', () { |
+ var range = new VersionRange(min: v123); |
+ expect(range.isAny, isFalse); |
+ expect(range.min, equals(v123)); |
+ expect(range.max, isNull); |
+ }); |
+ |
+ test('allows omitting min and max', () { |
+ var range = new VersionRange(); |
+ expect(range.isAny, isTrue); |
+ expect(range.min, isNull); |
+ expect(range.max, isNull); |
+ }); |
+ |
+ test('takes includeMin', () { |
+ var range = new VersionRange(min: v123, includeMin: true); |
+ expect(range.includeMin, isTrue); |
+ }); |
+ |
+ test('includeMin defaults to false if omitted', () { |
+ var range = new VersionRange(min: v123); |
+ expect(range.includeMin, isFalse); |
+ }); |
+ |
+ test('takes includeMax', () { |
+ var range = new VersionRange(max: v123, includeMax: true); |
+ expect(range.includeMax, isTrue); |
+ }); |
+ |
+ test('includeMax defaults to false if omitted', () { |
+ var range = new VersionRange(max: v123); |
+ expect(range.includeMax, isFalse); |
+ }); |
+ |
+ test('throws if min > max', () { |
+ expect(() => new VersionRange(min: v124, max: v123), throwsArgumentError); |
+ }); |
+ }); |
+ |
+ group('allows()', () { |
+ test('version must be greater than min', () { |
+ var range = new VersionRange(min: v123); |
+ |
+ expect(range, allows( |
+ new Version.parse('1.3.3'), |
+ new Version.parse('2.3.3'))); |
+ expect(range, doesNotAllow( |
+ new Version.parse('1.2.2'), |
+ new Version.parse('1.2.3'))); |
+ }); |
+ |
+ test('version must be min or greater if includeMin', () { |
+ var range = new VersionRange(min: v123, includeMin: true); |
+ |
+ expect(range, allows( |
+ new Version.parse('1.2.3'), |
+ new Version.parse('1.3.3'), |
+ new Version.parse('2.3.3'))); |
+ expect(range, doesNotAllow(new Version.parse('1.2.2'))); |
+ }); |
+ |
+ test('pre-release versions of inclusive min are excluded', () { |
+ var range = new VersionRange(min: v123, includeMin: true); |
+ |
+ expect(range, allows(new Version.parse('1.2.4-dev'))); |
+ expect(range, doesNotAllow(new Version.parse('1.2.3-dev'))); |
+ }); |
+ |
+ test('version must be less than max', () { |
+ var range = new VersionRange(max: v234); |
+ |
+ expect(range, allows(new Version.parse('2.3.3'))); |
+ expect(range, doesNotAllow( |
+ new Version.parse('2.3.4'), |
+ new Version.parse('2.4.3'))); |
+ }); |
+ |
+ test('pre-release versions of non-pre-release max are excluded', () { |
+ var range = new VersionRange(max: v234); |
+ |
+ expect(range, allows(new Version.parse('2.3.3'))); |
+ expect(range, doesNotAllow( |
+ new Version.parse('2.3.4-dev'), |
+ new Version.parse('2.3.4'))); |
+ }); |
+ |
+ test('pre-release versions of non-pre-release max are included if min is a ' |
+ 'pre-release of the same version', () { |
+ var range = new VersionRange( |
+ min: new Version.parse('2.3.4-dev.0'), max: v234); |
+ |
+ expect(range, allows(new Version.parse('2.3.4-dev.1'))); |
+ expect(range, doesNotAllow( |
+ new Version.parse('2.3.3'), |
+ new Version.parse('2.3.4-dev'), |
+ new Version.parse('2.3.4'))); |
+ }); |
+ |
+ test('pre-release versions of pre-release max are included', () { |
+ var range = new VersionRange(max: new Version.parse('2.3.4-dev.2')); |
+ |
+ expect(range, allows( |
+ new Version.parse('2.3.4-dev.1'))); |
+ expect(range, doesNotAllow( |
+ new Version.parse('2.3.4-dev.2'), |
+ new Version.parse('2.3.4-dev.3'))); |
+ }); |
+ |
+ test('version must be max or less if includeMax', () { |
+ var range = new VersionRange(min: v123, max: v234, includeMax: true); |
+ |
+ expect(range, allows( |
+ new Version.parse('2.3.3'), |
+ new Version.parse('2.3.4'), |
+ // Pre-releases of the max are allowed. |
+ new Version.parse('2.3.4-dev'))); |
+ expect(range, doesNotAllow(new Version.parse('2.4.3'))); |
+ }); |
+ |
+ test('has no min if one was not set', () { |
+ var range = new VersionRange(max: v123); |
+ |
+ expect(range, allows(new Version.parse('0.0.0'))); |
+ expect(range, doesNotAllow(new Version.parse('1.2.3'))); |
+ }); |
+ |
+ test('has no max if one was not set', () { |
+ var range = new VersionRange(min: v123); |
+ |
+ expect(range, allows( |
+ new Version.parse('1.3.3'), |
+ new Version.parse('999.3.3'))); |
+ expect(range, doesNotAllow(new Version.parse('1.2.3'))); |
+ }); |
+ |
+ test('allows any version if there is no min or max', () { |
+ var range = new VersionRange(); |
+ |
+ expect(range, allows( |
+ new Version.parse('0.0.0'), |
+ new Version.parse('999.99.9'))); |
+ }); |
+ }); |
+ |
+ 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); |
+ var b = new VersionRange(min: v200, max: v300); |
+ var intersect = a.intersect(b); |
+ expect(intersect.min, equals(v200)); |
+ expect(intersect.max, equals(v250)); |
+ expect(intersect.includeMin, isFalse); |
+ expect(intersect.includeMax, isFalse); |
+ }); |
+ |
+ test('a non-overlapping range allows no versions', () { |
+ var a = new VersionRange(min: v114, max: v124); |
+ var b = new VersionRange(min: v200, max: v250); |
+ expect(a.intersect(b).isEmpty, isTrue); |
+ }); |
+ |
+ 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); |
+ expect(a.intersect(b).isEmpty, isTrue); |
+ }); |
+ |
+ test('adjacent ranges allow version if inclusive', () { |
+ var a = new VersionRange(min: v114, max: v124, includeMax: true); |
+ var b = new VersionRange(min: v124, max: v200, includeMin: true); |
+ expect(a.intersect(b), equals(v124)); |
+ }); |
+ |
+ test('with an open range', () { |
+ var open = new VersionRange(); |
+ var a = new VersionRange(min: v114, max: v124); |
+ expect(open.intersect(open), equals(open)); |
+ expect(a.intersect(open), equals(a)); |
+ }); |
+ |
+ test('returns the version if the range allows it', () { |
+ expect(new VersionRange(min: v114, max: v124).intersect(v123), |
+ equals(v123)); |
+ expect(new VersionRange(min: v123, max: v124).intersect(v114).isEmpty, |
+ isTrue); |
+ }); |
+ }); |
+ |
+ 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); |
+ }); |
+} |