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

Side by Side Diff: test/version_union_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
« lib/src/version_range.dart ('K') | « test/version_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 // Copyright (c) 2015, 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 import 'package:test/test.dart';
6
7 import 'package:pub_semver/pub_semver.dart';
8
9 import 'utils.dart';
10
11 main() {
12 group('factory', () {
13 test('ignores empty constraints', () {
14 expect(new VersionConstraint.unionOf([
15 VersionConstraint.empty,
16 VersionConstraint.empty,
17 v123,
18 VersionConstraint.empty
19 ]), equals(v123));
20
21 expect(new VersionConstraint.unionOf([
22 VersionConstraint.empty,
23 VersionConstraint.empty
24 ]), isEmpty);
25 });
26
27 test('returns an empty constraint for an empty list', () {
28 expect(new VersionConstraint.unionOf([]), isEmpty);
29 });
30
31 test('any constraints override everything', () {
32 expect(new VersionConstraint.unionOf([
33 v123,
34 VersionConstraint.any,
35 v200,
36 new VersionRange(min: v234, max: v250)
37 ]), equals(VersionConstraint.any));
38 });
39
40 test('flattens other unions', () {
41 expect(new VersionConstraint.unionOf([
42 v072,
43 new VersionConstraint.unionOf([v123, v124]),
44 v250
45 ]), equals(new VersionConstraint.unionOf([v072, v123, v124, v250])));
46 });
47
48 test('returns a single merged range as-is', () {
49 expect(new VersionConstraint.unionOf([
50 new VersionRange(min: v080, max: v140),
51 new VersionRange(min: v123, max: v200)
52 ]), equals(new VersionRange(min: v080, max: v200)));
53 });
54 });
55
56 group('equality', () {
57 test("doesn't depend on original order", () {
58 expect(new VersionConstraint.unionOf([
59 v250,
60 new VersionRange(min: v201, max: v234),
61 v124,
62 v072,
63 new VersionRange(min: v080, max: v114),
64 v123
65 ]), equals(new VersionConstraint.unionOf([
66 v072,
67 new VersionRange(min: v080, max: v114),
68 v123,
69 v124,
70 new VersionRange(min: v201, max: v234),
71 v250
72 ])));
73 });
74
75 test("merges overlapping ranges", () {
76 expect(new VersionConstraint.unionOf([
77 new VersionRange(min: v003, max: v072),
78 new VersionRange(min: v010, max: v080),
79 new VersionRange(min: v114, max: v124),
80 new VersionRange(min: v123, max: v130)
81 ]), equals(new VersionConstraint.unionOf([
82 new VersionRange(min: v003, max: v080),
83 new VersionRange(min: v114, max: v130)
84 ])));
85 });
86
87 test("merges adjacent ranges", () {
88 expect(new VersionConstraint.unionOf([
89 new VersionRange(min: v003, max: v072, includeMax: true),
90 new VersionRange(min: v072, max: v080),
91 new VersionRange(min: v114, max: v124),
92 new VersionRange(min: v124, max: v130, includeMin: true)
93 ]), equals(new VersionConstraint.unionOf([
94 new VersionRange(min: v003, max: v080),
95 new VersionRange(min: v114, max: v130)
96 ])));
97 });
98
99 test("doesn't merge not-quite-adjacent ranges", () {
100 expect(new VersionConstraint.unionOf([
101 new VersionRange(min: v003, max: v072),
102 new VersionRange(min: v072, max: v080)
103 ]), equals(new VersionConstraint.unionOf([
104 new VersionRange(min: v003, max: v072),
105 new VersionRange(min: v072, max: v080)
106 ])));
107 });
108
109 test("merges version numbers into ranges", () {
110 expect(new VersionConstraint.unionOf([
111 new VersionRange(min: v003, max: v072),
112 v010,
113 new VersionRange(min: v114, max: v124),
114 v123
115 ]), equals(new VersionConstraint.unionOf([
116 new VersionRange(min: v003, max: v072),
117 new VersionRange(min: v114, max: v124)
118 ])));
119 });
120
121 test("merges adjacent version numbers into ranges", () {
122 expect(new VersionConstraint.unionOf([
123 new VersionRange(min: v003, max: v072),
124 v072,
125 v114,
126 new VersionRange(min: v114, max: v124)
127 ]), equals(new VersionConstraint.unionOf([
128 new VersionRange(min: v003, max: v072, includeMax: true),
129 new VersionRange(min: v114, max: v124, includeMin: true)
130 ])));
131 });
132 });
133
134 test('isEmpty returns false', () {
135 expect(new VersionConstraint.unionOf([
136 new VersionRange(min: v003, max: v080),
137 new VersionRange(min: v123, max: v130),
138 ]), isNot(isEmpty));
139 });
140
141 test('isAny returns false', () {
142 expect(new VersionConstraint.unionOf([
143 new VersionRange(min: v003, max: v080),
144 new VersionRange(min: v123, max: v130),
145 ]).isAny, isFalse);
146 });
147
148 test('allows() allows anything the components allow', () {
149 var union = new VersionConstraint.unionOf([
150 new VersionRange(min: v003, max: v080),
151 new VersionRange(min: v123, max: v130),
152 v200
153 ]);
154
155 expect(union, allows(v010));
156 expect(union, doesNotAllow(v080));
157 expect(union, allows(v124));
158 expect(union, doesNotAllow(v140));
159 expect(union, allows(v200));
160 });
161
162 group('allowsAll()', () {
163 test('for a version, returns true if any component allows the version', () {
164 var union = new VersionConstraint.unionOf([
165 new VersionRange(min: v003, max: v080),
166 new VersionRange(min: v123, max: v130),
167 v200
168 ]);
169
170 expect(union.allowsAll(v010), isTrue);
171 expect(union.allowsAll(v080), isFalse);
172 expect(union.allowsAll(v124), isTrue);
173 expect(union.allowsAll(v140), isFalse);
174 expect(union.allowsAll(v200), isTrue);
175 });
176
177 test('for a version range, returns true if any component allows the whole '
178 'range', () {
179 var union = new VersionConstraint.unionOf([
180 new VersionRange(min: v003, max: v080),
181 new VersionRange(min: v123, max: v130)
182 ]);
183
184 expect(union.allowsAll(new VersionRange(min: v003, max: v080)), isTrue);
185 expect(union.allowsAll(new VersionRange(min: v010, max: v072)), isTrue);
186 expect(union.allowsAll(new VersionRange(min: v010, max: v124)), isFalse);
187 });
188
189 group('for a union,', () {
190 var union = new VersionConstraint.unionOf([
191 new VersionRange(min: v003, max: v080),
192 new VersionRange(min: v123, max: v130)
193 ]);
194
195 test('returns true if every constraint matches a different constraint',
196 () {
197 expect(union.allowsAll(new VersionConstraint.unionOf([
198 new VersionRange(min: v010, max: v072),
199 new VersionRange(min: v124, max: v130)
200 ])), isTrue);
201 });
202
203 test('returns true if every constraint matches the same constraint', () {
204 expect(union.allowsAll(new VersionConstraint.unionOf([
205 new VersionRange(min: v003, max: v010),
206 new VersionRange(min: v072, max: v080)
207 ])), isTrue);
208 });
209
210 test("returns false if there's an unmatched constraint", () {
211 expect(union.allowsAll(new VersionConstraint.unionOf([
212 new VersionRange(min: v010, max: v072),
213 new VersionRange(min: v124, max: v130),
214 new VersionRange(min: v140, max: v200)
215 ])), isFalse);
216 });
217
218 test("returns false if a constraint isn't fully matched", () {
219 expect(union.allowsAll(new VersionConstraint.unionOf([
220 new VersionRange(min: v010, max: v114),
221 new VersionRange(min: v124, max: v130)
222 ])), isFalse);
223 });
224 });
225 });
226
227 group('allowsAny()', () {
228 test('for a version, returns true if any component allows the version', () {
229 var union = new VersionConstraint.unionOf([
230 new VersionRange(min: v003, max: v080),
231 new VersionRange(min: v123, max: v130),
232 v200
233 ]);
234
235 expect(union.allowsAny(v010), isTrue);
236 expect(union.allowsAny(v080), isFalse);
237 expect(union.allowsAny(v124), isTrue);
238 expect(union.allowsAny(v140), isFalse);
239 expect(union.allowsAny(v200), isTrue);
240 });
241
242 test('for a version range, returns true if any component allows part of '
243 'the range', () {
244 var union = new VersionConstraint.unionOf([
245 new VersionRange(min: v003, max: v080),
246 v123
247 ]);
248
249 expect(union.allowsAny(new VersionRange(min: v010, max: v114)), isTrue);
250 expect(union.allowsAny(new VersionRange(min: v114, max: v124)), isTrue);
251 expect(union.allowsAny(new VersionRange(min: v124, max: v130)), isFalse);
252 });
253
254 group('for a union,', () {
255 var union = new VersionConstraint.unionOf([
256 new VersionRange(min: v010, max: v080),
257 new VersionRange(min: v123, max: v130)
258 ]);
259
260 test('returns true if any constraint matches', () {
261 expect(union.allowsAny(new VersionConstraint.unionOf([
262 v072,
263 new VersionRange(min: v200, max: v300)
264 ])), isTrue);
265
266 expect(union.allowsAny(new VersionConstraint.unionOf([
267 v003,
268 new VersionRange(min: v124, max: v300)
269 ])), isTrue);
270 });
271
272 test("returns false if no constraint matches", () {
273 expect(union.allowsAny(new VersionConstraint.unionOf([
274 v003,
275 new VersionRange(min: v130, max: v140),
276 new VersionRange(min: v140, max: v200)
277 ])), isFalse);
278 });
279 });
280 });
281
282 group("intersect()", () {
283 test("with an overlapping version, returns that version", () {
284 expect(new VersionConstraint.unionOf([
285 new VersionRange(min: v010, max: v080),
286 new VersionRange(min: v123, max: v140)
287 ]).intersect(v072), equals(v072));
288 });
289
290 test("with a non-overlapping version, returns an empty constraint", () {
291 expect(new VersionConstraint.unionOf([
292 new VersionRange(min: v010, max: v080),
293 new VersionRange(min: v123, max: v140)
294 ]).intersect(v300), isEmpty);
295 });
296
297 test("with an overlapping range, returns that range", () {
298 var range = new VersionRange(min: v072, max: v080);
299 expect(new VersionConstraint.unionOf([
300 new VersionRange(min: v010, max: v080),
301 new VersionRange(min: v123, max: v140)
302 ]).intersect(range), equals(range));
303 });
304
305 test("with a non-overlapping range, returns an empty constraint", () {
306 expect(new VersionConstraint.unionOf([
307 new VersionRange(min: v010, max: v080),
308 new VersionRange(min: v123, max: v140)
309 ]).intersect(new VersionRange(min: v080, max: v123)), isEmpty);
310 });
311
312 test("with a parially-overlapping range, returns the overlapping parts",
313 () {
314 expect(new VersionConstraint.unionOf([
315 new VersionRange(min: v010, max: v080),
316 new VersionRange(min: v123, max: v140)
317 ]).intersect(new VersionRange(min: v072, max: v130)),
318 equals(new VersionConstraint.unionOf([
319 new VersionRange(min: v072, max: v080),
320 new VersionRange(min: v123, max: v130)
321 ])));
322 });
323
324 group("for a union,", () {
325 var union = new VersionConstraint.unionOf([
326 new VersionRange(min: v003, max: v080),
327 new VersionRange(min: v123, max: v130)
328 ]);
329
330 test("returns the overlapping parts", () {
331 expect(union.intersect(new VersionConstraint.unionOf([
332 v010,
333 new VersionRange(min: v072, max: v124),
334 new VersionRange(min: v124, max: v130)
335 ])), equals(new VersionConstraint.unionOf([
336 v010,
337 new VersionRange(min: v072, max: v080),
338 new VersionRange(min: v123, max: v124),
339 new VersionRange(min: v124, max: v130)
340 ])));
341 });
342
343 test("drops parts that don't match", () {
344 expect(union.intersect(new VersionConstraint.unionOf([
345 v003,
346 new VersionRange(min: v072, max: v080),
347 new VersionRange(min: v080, max: v123)
348 ])), equals(new VersionRange(min: v072, max: v080)));
349 });
350 });
351 });
352 }
OLDNEW
« lib/src/version_range.dart ('K') | « test/version_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698