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', () { |
| 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 } |
OLD | NEW |