OLD | NEW |
(Empty) | |
| 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 |
| 3 // BSD-style license that can be found in the LICENSE file. |
| 4 |
| 5 library pub_semver.test.version_range_test; |
| 6 |
| 7 import 'package:unittest/unittest.dart'; |
| 8 |
| 9 import 'package:pub_semver/pub_semver.dart'; |
| 10 |
| 11 import 'utils.dart'; |
| 12 |
| 13 main() { |
| 14 group('constructor', () { |
| 15 test('takes a min and max', () { |
| 16 var range = new VersionRange(min: v123, max: v124); |
| 17 expect(range.isAny, isFalse); |
| 18 expect(range.min, equals(v123)); |
| 19 expect(range.max, equals(v124)); |
| 20 }); |
| 21 |
| 22 test('allows omitting max', () { |
| 23 var range = new VersionRange(min: v123); |
| 24 expect(range.isAny, isFalse); |
| 25 expect(range.min, equals(v123)); |
| 26 expect(range.max, isNull); |
| 27 }); |
| 28 |
| 29 test('allows omitting min and max', () { |
| 30 var range = new VersionRange(); |
| 31 expect(range.isAny, isTrue); |
| 32 expect(range.min, isNull); |
| 33 expect(range.max, isNull); |
| 34 }); |
| 35 |
| 36 test('takes includeMin', () { |
| 37 var range = new VersionRange(min: v123, includeMin: true); |
| 38 expect(range.includeMin, isTrue); |
| 39 }); |
| 40 |
| 41 test('includeMin defaults to false if omitted', () { |
| 42 var range = new VersionRange(min: v123); |
| 43 expect(range.includeMin, isFalse); |
| 44 }); |
| 45 |
| 46 test('takes includeMax', () { |
| 47 var range = new VersionRange(max: v123, includeMax: true); |
| 48 expect(range.includeMax, isTrue); |
| 49 }); |
| 50 |
| 51 test('includeMax defaults to false if omitted', () { |
| 52 var range = new VersionRange(max: v123); |
| 53 expect(range.includeMax, isFalse); |
| 54 }); |
| 55 |
| 56 test('throws if min > max', () { |
| 57 throwsArgError(() => new VersionRange(min: v124, max: v123)); |
| 58 }); |
| 59 }); |
| 60 |
| 61 group('allows()', () { |
| 62 test('version must be greater than min', () { |
| 63 var range = new VersionRange(min: v123); |
| 64 |
| 65 expect(range, allows( |
| 66 new Version.parse('1.3.3'), |
| 67 new Version.parse('2.3.3'))); |
| 68 expect(range, doesNotAllow( |
| 69 new Version.parse('1.2.2'), |
| 70 new Version.parse('1.2.3'))); |
| 71 }); |
| 72 |
| 73 test('version must be min or greater if includeMin', () { |
| 74 var range = new VersionRange(min: v123, includeMin: true); |
| 75 |
| 76 expect(range, allows( |
| 77 new Version.parse('1.2.3'), |
| 78 new Version.parse('1.3.3'), |
| 79 new Version.parse('2.3.3'))); |
| 80 expect(range, doesNotAllow(new Version.parse('1.2.2'))); |
| 81 }); |
| 82 |
| 83 test('pre-release versions of inclusive min are excluded', () { |
| 84 var range = new VersionRange(min: v123, includeMin: true); |
| 85 |
| 86 expect(range, allows(new Version.parse('1.2.4-dev'))); |
| 87 expect(range, doesNotAllow(new Version.parse('1.2.3-dev'))); |
| 88 }); |
| 89 |
| 90 test('version must be less than max', () { |
| 91 var range = new VersionRange(max: v234); |
| 92 |
| 93 expect(range, allows(new Version.parse('2.3.3'))); |
| 94 expect(range, doesNotAllow( |
| 95 new Version.parse('2.3.4'), |
| 96 new Version.parse('2.4.3'))); |
| 97 }); |
| 98 |
| 99 test('pre-release versions of non-pre-release max are excluded', () { |
| 100 var range = new VersionRange(max: v234); |
| 101 |
| 102 expect(range, allows(new Version.parse('2.3.3'))); |
| 103 expect(range, doesNotAllow( |
| 104 new Version.parse('2.3.4-dev'), |
| 105 new Version.parse('2.3.4'))); |
| 106 }); |
| 107 |
| 108 test('pre-release versions of pre-release max are included', () { |
| 109 var range = new VersionRange(max: new Version.parse('2.3.4-dev.2')); |
| 110 |
| 111 expect(range, allows( |
| 112 new Version.parse('2.3.4-dev.1'))); |
| 113 expect(range, doesNotAllow( |
| 114 new Version.parse('2.3.4-dev.2'), |
| 115 new Version.parse('2.3.4-dev.3'))); |
| 116 }); |
| 117 |
| 118 test('version must be max or less if includeMax', () { |
| 119 var range = new VersionRange(min: v123, max: v234, includeMax: true); |
| 120 |
| 121 expect(range, allows( |
| 122 new Version.parse('2.3.3'), |
| 123 new Version.parse('2.3.4'), |
| 124 // Pre-releases of the max are allowed. |
| 125 new Version.parse('2.3.4-dev'))); |
| 126 expect(range, doesNotAllow(new Version.parse('2.4.3'))); |
| 127 }); |
| 128 |
| 129 test('has no min if one was not set', () { |
| 130 var range = new VersionRange(max: v123); |
| 131 |
| 132 expect(range, allows(new Version.parse('0.0.0'))); |
| 133 expect(range, doesNotAllow(new Version.parse('1.2.3'))); |
| 134 }); |
| 135 |
| 136 test('has no max if one was not set', () { |
| 137 var range = new VersionRange(min: v123); |
| 138 |
| 139 expect(range, allows( |
| 140 new Version.parse('1.3.3'), |
| 141 new Version.parse('999.3.3'))); |
| 142 expect(range, doesNotAllow(new Version.parse('1.2.3'))); |
| 143 }); |
| 144 |
| 145 test('allows any version if there is no min or max', () { |
| 146 var range = new VersionRange(); |
| 147 |
| 148 expect(range, allows( |
| 149 new Version.parse('0.0.0'), |
| 150 new Version.parse('999.99.9'))); |
| 151 }); |
| 152 }); |
| 153 |
| 154 group('intersect()', () { |
| 155 test('two overlapping ranges', () { |
| 156 var a = new VersionRange(min: v123, max: v250); |
| 157 var b = new VersionRange(min: v200, max: v300); |
| 158 var intersect = a.intersect(b); |
| 159 expect(intersect.min, equals(v200)); |
| 160 expect(intersect.max, equals(v250)); |
| 161 expect(intersect.includeMin, isFalse); |
| 162 expect(intersect.includeMax, isFalse); |
| 163 }); |
| 164 |
| 165 test('a non-overlapping range allows no versions', () { |
| 166 var a = new VersionRange(min: v114, max: v124); |
| 167 var b = new VersionRange(min: v200, max: v250); |
| 168 expect(a.intersect(b).isEmpty, isTrue); |
| 169 }); |
| 170 |
| 171 test('adjacent ranges allow no versions if exclusive', () { |
| 172 var a = new VersionRange(min: v114, max: v124, includeMax: false); |
| 173 var b = new VersionRange(min: v124, max: v200, includeMin: true); |
| 174 expect(a.intersect(b).isEmpty, isTrue); |
| 175 }); |
| 176 |
| 177 test('adjacent ranges allow version if inclusive', () { |
| 178 var a = new VersionRange(min: v114, max: v124, includeMax: true); |
| 179 var b = new VersionRange(min: v124, max: v200, includeMin: true); |
| 180 expect(a.intersect(b), equals(v124)); |
| 181 }); |
| 182 |
| 183 test('with an open range', () { |
| 184 var open = new VersionRange(); |
| 185 var a = new VersionRange(min: v114, max: v124); |
| 186 expect(open.intersect(open), equals(open)); |
| 187 expect(a.intersect(open), equals(a)); |
| 188 }); |
| 189 |
| 190 test('returns the version if the range allows it', () { |
| 191 expect(new VersionRange(min: v114, max: v124).intersect(v123), |
| 192 equals(v123)); |
| 193 expect(new VersionRange(min: v123, max: v124).intersect(v114).isEmpty, |
| 194 isTrue); |
| 195 }); |
| 196 }); |
| 197 |
| 198 test('isEmpty', () { |
| 199 expect(new VersionRange().isEmpty, isFalse); |
| 200 expect(new VersionRange(min: v123, max: v124).isEmpty, isFalse); |
| 201 }); |
| 202 } |
OLD | NEW |