Chromium Code Reviews| OLD | NEW |
|---|---|
| (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 } | |
| OLD | NEW |