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

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

Powered by Google App Engine
This is Rietveld 408576698