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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 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 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. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library pub_semver.test.version_range_test; 5 library pub_semver.test.version_range_test;
6 6
7 import 'package:test/test.dart'; 7 import 'package:test/test.dart';
8 8
9 import 'package:pub_semver/pub_semver.dart'; 9 import 'package:pub_semver/pub_semver.dart';
10 10
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 144
145 test('allows any version if there is no min or max', () { 145 test('allows any version if there is no min or max', () {
146 var range = new VersionRange(); 146 var range = new VersionRange();
147 147
148 expect(range, allows( 148 expect(range, allows(
149 new Version.parse('0.0.0'), 149 new Version.parse('0.0.0'),
150 new Version.parse('999.99.9'))); 150 new Version.parse('999.99.9')));
151 }); 151 });
152 }); 152 });
153 153
154 group('allowsAll()', () {
155 test('allows an empty constraint', () {
156 expect(
157 new VersionRange(min: v123, max: v250)
158 .allowsAll(VersionConstraint.empty),
159 isTrue);
160 });
161
162 test('allows allowed versions', () {
163 var range = new VersionRange(min: v123, max: v250, includeMax: true);
164 expect(range.allowsAll(v123), isFalse);
165 expect(range.allowsAll(v124), isTrue);
166 expect(range.allowsAll(v250), isTrue);
167 expect(range.allowsAll(v300), isFalse);
168 });
169
170 test('with no min', () {
171 var range = new VersionRange(max: v250);
172 expect(range.allowsAll(new VersionRange(min: v080, max: v140)), isTrue);
173 expect(range.allowsAll(new VersionRange(min: v080, max: v300)), isFalse);
174 expect(range.allowsAll(new VersionRange(max: v140)), isTrue);
175 expect(range.allowsAll(new VersionRange(max: v300)), isFalse);
176 expect(range.allowsAll(range), isTrue);
177 expect(range.allowsAll(VersionConstraint.any), isFalse);
178 });
179
180 test('with no max', () {
181 var range = new VersionRange(min: v010);
182 expect(range.allowsAll(new VersionRange(min: v080, max: v140)), isTrue);
183 expect(range.allowsAll(new VersionRange(min: v003, max: v140)), isFalse);
184 expect(range.allowsAll(new VersionRange(min: v080)), isTrue);
185 expect(range.allowsAll(new VersionRange(min: v003)), isFalse);
186 expect(range.allowsAll(range), isTrue);
187 expect(range.allowsAll(VersionConstraint.any), isFalse);
188 });
189
190 test('with a min and max', () {
191 var range = new VersionRange(min: v010, max: v250);
192 expect(range.allowsAll(new VersionRange(min: v080, max: v140)), isTrue);
193 expect(range.allowsAll(new VersionRange(min: v080, max: v300)), isFalse);
194 expect(range.allowsAll(new VersionRange(min: v003, max: v140)), isFalse);
195 expect(range.allowsAll(new VersionRange(min: v080)), isFalse);
196 expect(range.allowsAll(new VersionRange(max: v140)), isFalse);
197 expect(range.allowsAll(range), isTrue);
198 });
199
200 test("allows a bordering range that's not more inclusive", () {
201 var exclusive = new VersionRange(min: v010, max: v250);
202 var inclusive = new VersionRange(
203 min: v010, includeMin: true, max: v250, includeMax: true);
204 expect(inclusive.allowsAll(exclusive), isTrue);
205 expect(inclusive.allowsAll(inclusive), isTrue);
206 expect(exclusive.allowsAll(inclusive), isFalse);
207 expect(exclusive.allowsAll(exclusive), isTrue);
208 });
209
210 test('allows unions that are completely contained', () {
211 var range = new VersionRange(min: v114, max: v200);
212 expect(
213 range.allowsAll(new VersionRange(min: v123, max: v124).union(v140)),
214 isTrue);
215 expect(
216 range.allowsAll(new VersionRange(min: v010, max: v124).union(v140)),
217 isFalse);
218 expect(
219 range.allowsAll(new VersionRange(min: v123, max: v234).union(v140)),
220 isFalse);
221 });
222 });
223
224 group('allowsAny()', () {
225 test('disallows an empty constraint', () {
226 expect(
227 new VersionRange(min: v123, max: v250)
228 .allowsAny(VersionConstraint.empty),
229 isFalse);
230 });
231
232 test('allows allowed versions', () {
233 var range = new VersionRange(min: v123, max: v250, includeMax: true);
234 expect(range.allowsAny(v123), isFalse);
235 expect(range.allowsAny(v124), isTrue);
236 expect(range.allowsAny(v250), isTrue);
237 expect(range.allowsAny(v300), isFalse);
238 });
239
240 test('with no min', () {
241 var range = new VersionRange(max: v200);
242 expect(range.allowsAny(new VersionRange(min: v140, max: v300)), isTrue);
243 expect(range.allowsAny(new VersionRange(min: v234, max: v300)), isFalse);
244 expect(range.allowsAny(new VersionRange(min: v140)), isTrue);
245 expect(range.allowsAny(new VersionRange(min: v234)), isFalse);
246 expect(range.allowsAny(range), isTrue);
247 });
248
249 test('with no max', () {
250 var range = new VersionRange(min: v072);
251 expect(range.allowsAny(new VersionRange(min: v003, max: v140)), isTrue);
252 expect(range.allowsAny(new VersionRange(min: v003, max: v010)), isFalse);
253 expect(range.allowsAny(new VersionRange(max: v080)), isTrue);
254 expect(range.allowsAny(new VersionRange(max: v003)), isFalse);
255 expect(range.allowsAny(range), isTrue);
256 });
257
258 test('with a min and max', () {
259 var range = new VersionRange(min: v072, max: v200);
260 expect(range.allowsAny(new VersionRange(min: v003, max: v140)), isTrue);
261 expect(range.allowsAny(new VersionRange(min: v140, max: v300)), isTrue);
262 expect(range.allowsAny(new VersionRange(min: v003, max: v010)), isFalse);
263 expect(range.allowsAny(new VersionRange(min: v234, max: v300)), isFalse);
264 expect(range.allowsAny(new VersionRange(max: v010)), isFalse);
265 expect(range.allowsAny(new VersionRange(min: v234)), isFalse);
266 expect(range.allowsAny(range), isTrue);
267 });
268
269 test('allows a bordering range when both are inclusive', () {
270 expect(new VersionRange(max: v250).allowsAny(new VersionRange(min: v250)),
271 isFalse);
272
273 expect(new VersionRange(max: v250, includeMax: true)
274 .allowsAny(new VersionRange(min: v250)),
275 isFalse);
276
277 expect(new VersionRange(max: v250)
278 .allowsAny(new VersionRange(min: v250, includeMin: true)),
279 isFalse);
280
281 expect(new VersionRange(max: v250, includeMax: true)
282 .allowsAny(new VersionRange(min: v250, includeMin: true)),
283 isTrue);
284
285 expect(new VersionRange(min: v250).allowsAny(new VersionRange(max: v250)),
286 isFalse);
287
288 expect(new VersionRange(min: v250, includeMin: true)
289 .allowsAny(new VersionRange(max: v250)),
290 isFalse);
291
292 expect(new VersionRange(min: v250)
293 .allowsAny(new VersionRange(max: v250, includeMax: true)),
294 isFalse);
295
296 expect(new VersionRange(min: v250, includeMin: true)
297 .allowsAny(new VersionRange(max: v250, includeMax: true)),
298 isTrue);
299 });
300
301 test('allows unions that are partially contained', () {
302 var range = new VersionRange(min: v114, max: v200);
303 expect(
304 range.allowsAny(new VersionRange(min: v010, max: v080).union(v140)),
305 isTrue);
306 expect(
307 range.allowsAny(new VersionRange(min: v123, max: v234).union(v300)),
308 isTrue);
309 expect(
310 range.allowsAny(new VersionRange(min: v234, max: v300).union(v010)),
311 isFalse);
312 });
313 });
314
154 group('intersect()', () { 315 group('intersect()', () {
155 test('two overlapping ranges', () { 316 test('two overlapping ranges', () {
156 var a = new VersionRange(min: v123, max: v250); 317 var a = new VersionRange(min: v123, max: v250);
157 var b = new VersionRange(min: v200, max: v300); 318 var b = new VersionRange(min: v200, max: v300);
158 var intersect = a.intersect(b); 319 var intersect = a.intersect(b);
159 expect(intersect.min, equals(v200)); 320 expect(intersect.min, equals(v200));
160 expect(intersect.max, equals(v250)); 321 expect(intersect.max, equals(v250));
161 expect(intersect.includeMin, isFalse); 322 expect(intersect.includeMin, isFalse);
162 expect(intersect.includeMax, isFalse); 323 expect(intersect.includeMax, isFalse);
163 }); 324 });
(...skipping 24 matching lines...) Expand all
188 }); 349 });
189 350
190 test('returns the version if the range allows it', () { 351 test('returns the version if the range allows it', () {
191 expect(new VersionRange(min: v114, max: v124).intersect(v123), 352 expect(new VersionRange(min: v114, max: v124).intersect(v123),
192 equals(v123)); 353 equals(v123));
193 expect(new VersionRange(min: v123, max: v124).intersect(v114).isEmpty, 354 expect(new VersionRange(min: v123, max: v124).intersect(v114).isEmpty,
194 isTrue); 355 isTrue);
195 }); 356 });
196 }); 357 });
197 358
359 group('union()', () {
360 test("with a version returns the range if it contains the version", () {
361 var range = new VersionRange(min: v114, max: v124);
362 expect(range.union(v123), equals(range));
363 });
364
365 test("with a version on the edge of the range, expands the range", () {
366 expect(new VersionRange(min: v114, max: v124).union(v124),
367 equals(new VersionRange(min: v114, max: v124, includeMax: true)));
368 expect(new VersionRange(min: v114, max: v124).union(v114),
369 equals(new VersionRange(min: v114, max: v124, includeMin: true)));
370 });
371
372 test("with a version allows both the range and the version if the range "
373 "doesn't contain the version", () {
374 var result = new VersionRange(min: v003, max: v114).union(v124);
375 expect(result, allows(v010));
376 expect(result, doesNotAllow(v123));
377 expect(result, allows(v124));
378 });
379
380 test("returns a VersionUnion for a disjoint range", () {
381 var result = new VersionRange(min: v003, max: v114)
382 .union(new VersionRange(min: v130, max: v200));
383 expect(result, allows(v080));
384 expect(result, doesNotAllow(v123));
385 expect(result, allows(v140));
386 });
387
388 test("considers open ranges disjoint", () {
389 var result = new VersionRange(min: v003, max: v114)
390 .union(new VersionRange(min: v114, max: v200));
391 expect(result, allows(v080));
392 expect(result, doesNotAllow(v114));
393 expect(result, allows(v140));
394
395 result = new VersionRange(min: v114, max: v200)
396 .union(new VersionRange(min: v003, max: v114));
397 expect(result, allows(v080));
398 expect(result, doesNotAllow(v114));
399 expect(result, allows(v140));
400 });
401
402 test("returns a merged range for an overlapping range", () {
403 var result = new VersionRange(min: v003, max: v114)
404 .union(new VersionRange(min: v080, max: v200));
405 expect(result, equals(new VersionRange(min: v003, max: v200)));
406 });
407
408 test("considers closed ranges overlapping", () {
409 var result = new VersionRange(min: v003, max: v114, includeMax: true)
410 .union(new VersionRange(min: v114, max: v200));
411 expect(result, equals(new VersionRange(min: v003, max: v200)));
412
413 result = new VersionRange(min: v003, max: v114)
414 .union(new VersionRange(min: v114, max: v200, includeMin: true));
415 expect(result, equals(new VersionRange(min: v003, max: v200)));
416
417 result = new VersionRange(min: v114, max: v200)
418 .union(new VersionRange(min: v003, max: v114, includeMax: true));
419 expect(result, equals(new VersionRange(min: v003, max: v200)));
420
421 result = new VersionRange(min: v114, max: v200, includeMin: true)
422 .union(new VersionRange(min: v003, max: v114));
423 expect(result, equals(new VersionRange(min: v003, max: v200)));
424 });
425
426 test("includes edges if either range does", () {
427 var result = new VersionRange(min: v003, max: v114, includeMin: true)
428 .union(new VersionRange(min: v003, max: v114, includeMax: true));
429 expect(result, equals(new VersionRange(
430 min: v003, max: v114, includeMin: true, includeMax: true)));
431 });
432 });
433
198 test('isEmpty', () { 434 test('isEmpty', () {
199 expect(new VersionRange().isEmpty, isFalse); 435 expect(new VersionRange().isEmpty, isFalse);
200 expect(new VersionRange(min: v123, max: v124).isEmpty, isFalse); 436 expect(new VersionRange(min: v123, max: v124).isEmpty, isFalse);
201 }); 437 });
202 } 438 }
OLDNEW
« 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