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

Side by Side Diff: sdk/lib/_internal/pub_generated/test/version_test.dart

Issue 602253002: Use pub_semver package in pub. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 2 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 | Annotate | Revision Log
« no previous file with comments | « sdk/lib/_internal/pub_generated/test/version_solver_test.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 library version_test;
2 import 'package:unittest/unittest.dart';
3 import 'test_pub.dart';
4 import '../lib/src/version.dart';
5 main() {
6 initConfig();
7 final v114 = new Version.parse('1.1.4');
8 final v123 = new Version.parse('1.2.3');
9 final v124 = new Version.parse('1.2.4');
10 final v130 = new Version.parse('1.3.0');
11 final v140 = new Version.parse('1.4.0');
12 final v200 = new Version.parse('2.0.0');
13 final v201 = new Version.parse('2.0.1');
14 final v234 = new Version.parse('2.3.4');
15 final v250 = new Version.parse('2.5.0');
16 final v300 = new Version.parse('3.0.0');
17 group('Version', () {
18 test('none', () {
19 expect(Version.none.toString(), equals('0.0.0'));
20 });
21 group('constructor', () {
22 test('throws on negative numbers', () {
23 throwsIllegalArg(() => new Version(-1, 1, 1));
24 throwsIllegalArg(() => new Version(1, -1, 1));
25 throwsIllegalArg(() => new Version(1, 1, -1));
26 });
27 });
28 group('comparison', () {
29 var versions = [
30 '1.0.0-alpha',
31 '1.0.0-alpha.1',
32 '1.0.0-beta.2',
33 '1.0.0-beta.11',
34 '1.0.0-rc.1',
35 '1.0.0-rc.1+build.1',
36 '1.0.0',
37 '1.0.0+0.3.7',
38 '1.3.7+build',
39 '1.3.7+build.2.b8f12d7',
40 '1.3.7+build.11.e0f985a',
41 '2.0.0',
42 '2.1.0',
43 '2.2.0',
44 '2.11.0',
45 '2.11.1'];
46 test('compareTo()', () {
47 for (var i = 0; i < versions.length; i++) {
48 for (var j = 0; j < versions.length; j++) {
49 var a = new Version.parse(versions[i]);
50 var b = new Version.parse(versions[j]);
51 var expectation = i.compareTo(j);
52 expect(a.compareTo(b), equals(expectation));
53 }
54 }
55 });
56 test('operators', () {
57 for (var i = 0; i < versions.length; i++) {
58 for (var j = 0; j < versions.length; j++) {
59 var a = new Version.parse(versions[i]);
60 var b = new Version.parse(versions[j]);
61 expect(a < b, equals(i < j));
62 expect(a > b, equals(i > j));
63 expect(a <= b, equals(i <= j));
64 expect(a >= b, equals(i >= j));
65 expect(a == b, equals(i == j));
66 expect(a != b, equals(i != j));
67 }
68 }
69 });
70 test('equality', () {
71 expect(new Version.parse('01.2.3'), equals(new Version.parse('1.2.3')));
72 expect(new Version.parse('1.02.3'), equals(new Version.parse('1.2.3')));
73 expect(new Version.parse('1.2.03'), equals(new Version.parse('1.2.3')));
74 expect(
75 new Version.parse('1.2.3-01'),
76 equals(new Version.parse('1.2.3-1')));
77 expect(
78 new Version.parse('1.2.3+01'),
79 equals(new Version.parse('1.2.3+1')));
80 });
81 });
82 test('allows()', () {
83 expect(v123.allows(v123), isTrue);
84 expect(v123.allows(v114), isFalse);
85 expect(v123.allows(v124), isFalse);
86 });
87 test('intersect()', () {
88 expect(v123.intersect(v123), equals(v123));
89 expect(v123.intersect(v114).isEmpty, isTrue);
90 expect(
91 v123.intersect(new VersionRange(min: v114, max: v124)),
92 equals(v123));
93 expect(
94 v114.intersect(new VersionRange(min: v123, max: v124)).isEmpty,
95 isTrue);
96 });
97 test('isEmpty', () {
98 expect(v123.isEmpty, isFalse);
99 });
100 test('nextMajor', () {
101 expect(v123.nextMajor, equals(v200));
102 expect(v114.nextMajor, equals(v200));
103 expect(v200.nextMajor, equals(v300));
104 expect(new Version.parse('1.2.3-dev').nextMajor, equals(v200));
105 expect(new Version.parse('2.0.0-dev').nextMajor, equals(v200));
106 expect(new Version.parse('1.2.3+patch').nextMajor, equals(v200));
107 });
108 test('nextMinor', () {
109 expect(v123.nextMinor, equals(v130));
110 expect(v130.nextMinor, equals(v140));
111 expect(new Version.parse('1.2.3-dev').nextMinor, equals(v130));
112 expect(new Version.parse('1.3.0-dev').nextMinor, equals(v130));
113 expect(new Version.parse('1.2.3+patch').nextMinor, equals(v130));
114 });
115 test('nextPatch', () {
116 expect(v123.nextPatch, equals(v124));
117 expect(v200.nextPatch, equals(v201));
118 expect(new Version.parse('1.2.4-dev').nextPatch, equals(v124));
119 expect(new Version.parse('1.2.3+patch').nextPatch, equals(v124));
120 });
121 test('parse()', () {
122 expect(new Version.parse('0.0.0'), equals(new Version(0, 0, 0)));
123 expect(new Version.parse('12.34.56'), equals(new Version(12, 34, 56)));
124 expect(
125 new Version.parse('1.2.3-alpha.1'),
126 equals(new Version(1, 2, 3, pre: 'alpha.1')));
127 expect(
128 new Version.parse('1.2.3-x.7.z-92'),
129 equals(new Version(1, 2, 3, pre: 'x.7.z-92')));
130 expect(
131 new Version.parse('1.2.3+build.1'),
132 equals(new Version(1, 2, 3, build: 'build.1')));
133 expect(
134 new Version.parse('1.2.3+x.7.z-92'),
135 equals(new Version(1, 2, 3, build: 'x.7.z-92')));
136 expect(
137 new Version.parse('1.0.0-rc-1+build-1'),
138 equals(new Version(1, 0, 0, pre: 'rc-1', build: 'build-1')));
139 expect(() => new Version.parse('1.0'), throwsFormatException);
140 expect(() => new Version.parse('1.2.3.4'), throwsFormatException);
141 expect(() => new Version.parse('1234'), throwsFormatException);
142 expect(() => new Version.parse('-2.3.4'), throwsFormatException);
143 expect(() => new Version.parse('1.3-pre'), throwsFormatException);
144 expect(() => new Version.parse('1.3+build'), throwsFormatException);
145 expect(() => new Version.parse('1.3+bu?!3ild'), throwsFormatException);
146 });
147 test('toString()', () {
148 expect(new Version(0, 0, 0).toString(), equals('0.0.0'));
149 expect(new Version(12, 34, 56).toString(), equals('12.34.56'));
150 expect(
151 new Version(1, 2, 3, pre: 'alpha.1').toString(),
152 equals('1.2.3-alpha.1'));
153 expect(
154 new Version(1, 2, 3, pre: 'x.7.z-92').toString(),
155 equals('1.2.3-x.7.z-92'));
156 expect(
157 new Version(1, 2, 3, build: 'build.1').toString(),
158 equals('1.2.3+build.1'));
159 expect(
160 new Version(1, 2, 3, pre: 'pre', build: 'bui').toString(),
161 equals('1.2.3-pre+bui'));
162 });
163 });
164 group('VersionRange', () {
165 group('constructor', () {
166 test('takes a min and max', () {
167 var range = new VersionRange(min: v123, max: v124);
168 expect(range.isAny, isFalse);
169 expect(range.min, equals(v123));
170 expect(range.max, equals(v124));
171 });
172 test('allows omitting max', () {
173 var range = new VersionRange(min: v123);
174 expect(range.isAny, isFalse);
175 expect(range.min, equals(v123));
176 expect(range.max, isNull);
177 });
178 test('allows omitting min and max', () {
179 var range = new VersionRange();
180 expect(range.isAny, isTrue);
181 expect(range.min, isNull);
182 expect(range.max, isNull);
183 });
184 test('takes includeMin', () {
185 var range = new VersionRange(min: v123, includeMin: true);
186 expect(range.includeMin, isTrue);
187 });
188 test('includeMin defaults to false if omitted', () {
189 var range = new VersionRange(min: v123);
190 expect(range.includeMin, isFalse);
191 });
192 test('takes includeMax', () {
193 var range = new VersionRange(max: v123, includeMax: true);
194 expect(range.includeMax, isTrue);
195 });
196 test('includeMax defaults to false if omitted', () {
197 var range = new VersionRange(max: v123);
198 expect(range.includeMax, isFalse);
199 });
200 test('throws if min > max', () {
201 throwsIllegalArg(() => new VersionRange(min: v124, max: v123));
202 });
203 });
204 group('allows()', () {
205 test('version must be greater than min', () {
206 var range = new VersionRange(min: v123);
207 expect(range.allows(new Version.parse('1.2.2')), isFalse);
208 expect(range.allows(new Version.parse('1.2.3')), isFalse);
209 expect(range.allows(new Version.parse('1.3.3')), isTrue);
210 expect(range.allows(new Version.parse('2.3.3')), isTrue);
211 });
212 test('version must be min or greater if includeMin', () {
213 var range = new VersionRange(min: v123, includeMin: true);
214 expect(range.allows(new Version.parse('1.2.2')), isFalse);
215 expect(range.allows(new Version.parse('1.2.3')), isTrue);
216 expect(range.allows(new Version.parse('1.3.3')), isTrue);
217 expect(range.allows(new Version.parse('2.3.3')), isTrue);
218 });
219 test('pre-release versions of inclusive min are excluded', () {
220 var range = new VersionRange(min: v123, includeMin: true);
221 expect(range.allows(new Version.parse('1.2.3-dev')), isFalse);
222 expect(range.allows(new Version.parse('1.2.4-dev')), isTrue);
223 });
224 test('version must be less than max', () {
225 var range = new VersionRange(max: v234);
226 expect(range.allows(new Version.parse('2.3.3')), isTrue);
227 expect(range.allows(new Version.parse('2.3.4')), isFalse);
228 expect(range.allows(new Version.parse('2.4.3')), isFalse);
229 });
230 test('pre-release versions of non-pre-release max are excluded', () {
231 var range = new VersionRange(max: v234);
232 expect(range.allows(new Version.parse('2.3.3')), isTrue);
233 expect(range.allows(new Version.parse('2.3.4-dev')), isFalse);
234 expect(range.allows(new Version.parse('2.3.4')), isFalse);
235 });
236 test('pre-release versions of pre-release max are included', () {
237 var range = new VersionRange(max: new Version.parse('2.3.4-dev.2'));
238 expect(range.allows(new Version.parse('2.3.4-dev.1')), isTrue);
239 expect(range.allows(new Version.parse('2.3.4-dev.2')), isFalse);
240 expect(range.allows(new Version.parse('2.3.4-dev.3')), isFalse);
241 });
242 test('version must be max or less if includeMax', () {
243 var range = new VersionRange(min: v123, max: v234, includeMax: true);
244 expect(range.allows(new Version.parse('2.3.3')), isTrue);
245 expect(range.allows(new Version.parse('2.3.4')), isTrue);
246 expect(range.allows(new Version.parse('2.4.3')), isFalse);
247 expect(range.allows(new Version.parse('2.3.4-dev')), isTrue);
248 });
249 test('has no min if one was not set', () {
250 var range = new VersionRange(max: v123);
251 expect(range.allows(new Version.parse('0.0.0')), isTrue);
252 expect(range.allows(new Version.parse('1.2.3')), isFalse);
253 });
254 test('has no max if one was not set', () {
255 var range = new VersionRange(min: v123);
256 expect(range.allows(new Version.parse('1.2.3')), isFalse);
257 expect(range.allows(new Version.parse('1.3.3')), isTrue);
258 expect(range.allows(new Version.parse('999.3.3')), isTrue);
259 });
260 test('allows any version if there is no min or max', () {
261 var range = new VersionRange();
262 expect(range.allows(new Version.parse('0.0.0')), isTrue);
263 expect(range.allows(new Version.parse('999.99.9')), isTrue);
264 });
265 });
266 group('intersect()', () {
267 test('two overlapping ranges', () {
268 var a = new VersionRange(min: v123, max: v250);
269 var b = new VersionRange(min: v200, max: v300);
270 var intersect = a.intersect(b);
271 expect(intersect.min, equals(v200));
272 expect(intersect.max, equals(v250));
273 expect(intersect.includeMin, isFalse);
274 expect(intersect.includeMax, isFalse);
275 });
276 test('a non-overlapping range allows no versions', () {
277 var a = new VersionRange(min: v114, max: v124);
278 var b = new VersionRange(min: v200, max: v250);
279 expect(a.intersect(b).isEmpty, isTrue);
280 });
281 test('adjacent ranges allow no versions if exclusive', () {
282 var a = new VersionRange(min: v114, max: v124, includeMax: false);
283 var b = new VersionRange(min: v124, max: v200, includeMin: true);
284 expect(a.intersect(b).isEmpty, isTrue);
285 });
286 test('adjacent ranges allow version if inclusive', () {
287 var a = new VersionRange(min: v114, max: v124, includeMax: true);
288 var b = new VersionRange(min: v124, max: v200, includeMin: true);
289 expect(a.intersect(b), equals(v124));
290 });
291 test('with an open range', () {
292 var open = new VersionRange();
293 var a = new VersionRange(min: v114, max: v124);
294 expect(open.intersect(open), equals(open));
295 expect(a.intersect(open), equals(a));
296 });
297 test('returns the version if the range allows it', () {
298 expect(
299 new VersionRange(min: v114, max: v124).intersect(v123),
300 equals(v123));
301 expect(
302 new VersionRange(min: v123, max: v124).intersect(v114).isEmpty,
303 isTrue);
304 });
305 });
306 test('isEmpty', () {
307 expect(new VersionRange().isEmpty, isFalse);
308 expect(new VersionRange(min: v123, max: v124).isEmpty, isFalse);
309 });
310 });
311 group('VersionConstraint', () {
312 test('any', () {
313 expect(VersionConstraint.any.isAny, isTrue);
314 expect(
315 VersionConstraint.any,
316 allows(
317 [
318 new Version.parse('0.0.0-blah'),
319 new Version.parse('1.2.3'),
320 new Version.parse('12345.678.90')]));
321 });
322 test('empty', () {
323 expect(VersionConstraint.empty.isEmpty, isTrue);
324 expect(VersionConstraint.empty.isAny, isFalse);
325 expect(
326 VersionConstraint.empty,
327 doesNotAllow(
328 [
329 new Version.parse('0.0.0-blah'),
330 new Version.parse('1.2.3'),
331 new Version.parse('12345.678.90')]));
332 });
333 group('parse()', () {
334 test('parses an exact version', () {
335 var constraint = new VersionConstraint.parse('1.2.3-alpha');
336 expect(constraint is Version, isTrue);
337 expect(constraint, equals(new Version(1, 2, 3, pre: 'alpha')));
338 });
339 test('parses "any"', () {
340 var constraint = new VersionConstraint.parse('any');
341 expect(constraint is VersionConstraint, isTrue);
342 expect(
343 constraint,
344 allows(
345 [
346 new Version.parse('0.0.0'),
347 new Version.parse('1.2.3'),
348 new Version.parse('12345.678.90')]));
349 });
350 test('parses a ">" minimum version', () {
351 expect(
352 new VersionConstraint.parse('>1.2.3'),
353 allows([new Version.parse('1.2.3+foo'), new Version.parse('1.2.4')]) );
354 expect(
355 new VersionConstraint.parse('>1.2.3'),
356 doesNotAllow(
357 [
358 new Version.parse('1.2.1'),
359 new Version.parse('1.2.3-build'),
360 new Version.parse('1.2.3')]));
361 });
362 test('parses a ">=" minimum version', () {
363 expect(
364 new VersionConstraint.parse('>=1.2.3'),
365 allows(
366 [
367 new Version.parse('1.2.3'),
368 new Version.parse('1.2.3+foo'),
369 new Version.parse('1.2.4')]));
370 expect(
371 new VersionConstraint.parse('>=1.2.3'),
372 doesNotAllow([new Version.parse('1.2.1'), new Version.parse('1.2.3-b uild')]));
373 });
374 test('parses a "<" maximum version', () {
375 expect(
376 new VersionConstraint.parse('<1.2.3'),
377 allows([new Version.parse('1.2.1'), new Version.parse('1.2.2+foo')]) );
378 expect(
379 new VersionConstraint.parse('<1.2.3'),
380 doesNotAllow(
381 [
382 new Version.parse('1.2.3'),
383 new Version.parse('1.2.3+foo'),
384 new Version.parse('1.2.4')]));
385 });
386 test('parses a "<=" maximum version', () {
387 expect(
388 new VersionConstraint.parse('<=1.2.3'),
389 allows(
390 [
391 new Version.parse('1.2.1'),
392 new Version.parse('1.2.3-build'),
393 new Version.parse('1.2.3')]));
394 expect(
395 new VersionConstraint.parse('<=1.2.3'),
396 doesNotAllow([new Version.parse('1.2.3+foo'), new Version.parse('1.2 .4')]));
397 });
398 test('parses a series of space-separated constraints', () {
399 var constraint = new VersionConstraint.parse('>1.0.0 >=1.2.3 <1.3.0');
400 expect(
401 constraint,
402 allows([new Version.parse('1.2.3'), new Version.parse('1.2.5')]));
403 expect(
404 constraint,
405 doesNotAllow(
406 [
407 new Version.parse('1.2.3-pre'),
408 new Version.parse('1.3.0'),
409 new Version.parse('3.4.5')]));
410 });
411 test('ignores whitespace around operators', () {
412 var constraint = new VersionConstraint.parse(' >1.0.0>=1.2.3 < 1.3.0');
413 expect(
414 constraint,
415 allows([new Version.parse('1.2.3'), new Version.parse('1.2.5')]));
416 expect(
417 constraint,
418 doesNotAllow(
419 [
420 new Version.parse('1.2.3-pre'),
421 new Version.parse('1.3.0'),
422 new Version.parse('3.4.5')]));
423 });
424 test('does not allow "any" to be mixed with other constraints', () {
425 expect(
426 () => new VersionConstraint.parse('any 1.0.0'),
427 throwsFormatException);
428 });
429 test('throws FormatException on a bad string', () {
430 var bad = [
431 "",
432 " ",
433 "foo",
434 ">foo",
435 "1.0.0 foo",
436 "1.0.0foo",
437 "anything",
438 "<>1.0.0",
439 "1.0.0<"];
440 for (var text in bad) {
441 expect(
442 () => new VersionConstraint.parse(text),
443 throwsFormatException);
444 }
445 });
446 });
447 });
448 }
449 class VersionConstraintMatcher implements Matcher {
450 final List<Version> _expected;
451 final bool _allow;
452 VersionConstraintMatcher(this._expected, this._allow);
453 bool matches(item, Map matchState) =>
454 (item is VersionConstraint) &&
455 _expected.every((version) => item.allows(version) == _allow);
456 Description describe(Description description) =>
457 description.add(' ${_allow ? "allows" : "does not allow"} versions');
458 Description describeMismatch(item, Description mismatchDescription,
459 Map matchState, bool verbose) {
460 if (item is! VersionConstraint) {
461 mismatchDescription.add('was not a VersionConstraint');
462 return mismatchDescription;
463 }
464 bool first = true;
465 for (var version in _expected) {
466 if (item.allows(version) != _allow) {
467 if (first) {
468 if (_allow) {
469 mismatchDescription.addDescriptionOf(item).add('did not allow ');
470 } else {
471 mismatchDescription.addDescriptionOf(item).add('allowed ');
472 }
473 } else {
474 mismatchDescription.add(' and ');
475 }
476 first = false;
477 mismatchDescription.add(version.toString());
478 }
479 }
480 return mismatchDescription;
481 }
482 }
483 Matcher allows(List<Version> versions) =>
484 new VersionConstraintMatcher(versions, true);
485 Matcher doesNotAllow(List<Version> versions) =>
486 new VersionConstraintMatcher(versions, false);
487 throwsIllegalArg(function) {
488 expect(function, throwsA((e) => e is ArgumentError));
489 }
OLDNEW
« no previous file with comments | « sdk/lib/_internal/pub_generated/test/version_solver_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698