1 var tap = require("tap")
3 , semver = require("./semver.js")
11 , satisfies = semver.satisfies
12 , validRange = semver.validRange
14 , replaceStars = semver.replaceStars
15 , toComparators = semver.toComparators
19 test("\ncomparison tests", function (t) {
20 ; [ ["0.0.0", "0.0.0foo"]
24 , ["0.99.0", "0.10.0"]
26 , ["v0.0.0", "0.0.0foo"]
29 , ["v0.10.0", "0.9.0"]
30 , ["v0.99.0", "0.10.0"]
32 , ["0.0.0", "v0.0.0foo"]
35 , ["0.10.0", "v0.9.0"]
36 , ["0.99.0", "v0.10.0"]
38 , ["1.2.3", "1.2.3-asdf"]
39 , ["1.2.3-4", "1.2.3"]
40 , ["1.2.3-4-foo", "1.2.3"]
41 , ["1.2.3-5", "1.2.3-5-foo"]
42 , ["1.2.3-5", "1.2.3-4"]
43 , ["1.2.3-5-foo", "1.2.3-5-Foo"]
45 ].forEach(function (v) {
48 t.ok(gt(v0, v1), "gt('"+v0+"', '"+v1+"')")
49 t.ok(lt(v1, v0), "lt('"+v1+"', '"+v0+"')")
50 t.ok(!gt(v1, v0), "!gt('"+v1+"', '"+v0+"')")
51 t.ok(!lt(v0, v1), "!lt('"+v0+"', '"+v1+"')")
52 t.ok(eq(v0, v0), "eq('"+v0+"', '"+v0+"')")
53 t.ok(eq(v1, v1), "eq('"+v1+"', '"+v1+"')")
54 t.ok(neq(v0, v1), "neq('"+v0+"', '"+v1+"')")
55 t.ok(cmp(v1, "==", v1), "cmp('"+v1+"' == '"+v1+"')")
56 t.ok(cmp(v0, ">=", v1), "cmp('"+v0+"' >= '"+v1+"')")
57 t.ok(cmp(v1, "<=", v0), "cmp('"+v1+"' <= '"+v0+"')")
58 t.ok(cmp(v0, "!=", v1), "cmp('"+v0+"' != '"+v1+"')")
63 test("\nequality tests", function (t) {
64 ; [ ["1.2.3", "v1.2.3"]
66 , ["1.2.3", "v 1.2.3"]
67 , ["1.2.3", "= 1.2.3"]
68 , ["1.2.3", " v1.2.3"]
69 , ["1.2.3", " =1.2.3"]
70 , ["1.2.3", " v 1.2.3"]
71 , ["1.2.3", " = 1.2.3"]
72 , ["1.2.3-0", "v1.2.3-0"]
73 , ["1.2.3-0", "=1.2.3-0"]
74 , ["1.2.3-0", "v 1.2.3-0"]
75 , ["1.2.3-0", "= 1.2.3-0"]
76 , ["1.2.3-0", " v1.2.3-0"]
77 , ["1.2.3-0", " =1.2.3-0"]
78 , ["1.2.3-0", " v 1.2.3-0"]
79 , ["1.2.3-0", " = 1.2.3-0"]
80 , ["1.2.3-01", "v1.2.3-1"]
81 , ["1.2.3-01", "=1.2.3-1"]
82 , ["1.2.3-01", "v 1.2.3-1"]
83 , ["1.2.3-01", "= 1.2.3-1"]
84 , ["1.2.3-01", " v1.2.3-1"]
85 , ["1.2.3-01", " =1.2.3-1"]
86 , ["1.2.3-01", " v 1.2.3-1"]
87 , ["1.2.3-01", " = 1.2.3-1"]
88 , ["1.2.3beta", "v1.2.3beta"]
89 , ["1.2.3beta", "=1.2.3beta"]
90 , ["1.2.3beta", "v 1.2.3beta"]
91 , ["1.2.3beta", "= 1.2.3beta"]
92 , ["1.2.3beta", " v1.2.3beta"]
93 , ["1.2.3beta", " =1.2.3beta"]
94 , ["1.2.3beta", " v 1.2.3beta"]
95 , ["1.2.3beta", " = 1.2.3beta"]
96 ].forEach(function (v) {
99 t.ok(eq(v0, v1), "eq('"+v0+"', '"+v1+"')")
100 t.ok(!neq(v0, v1), "!neq('"+v0+"', '"+v1+"')")
101 t.ok(cmp(v0, "==", v1), "cmp("+v0+"=="+v1+")")
102 t.ok(!cmp(v0, "!=", v1), "!cmp("+v0+"!="+v1+")")
103 t.ok(!cmp(v0, "===", v1), "!cmp("+v0+"==="+v1+")")
104 t.ok(cmp(v0, "!==", v1), "cmp("+v0+"!=="+v1+")")
105 t.ok(!gt(v0, v1), "!gt('"+v0+"', '"+v1+"')")
106 t.ok(gte(v0, v1), "gte('"+v0+"', '"+v1+"')")
107 t.ok(!lt(v0, v1), "!lt('"+v0+"', '"+v1+"')")
108 t.ok(lte(v0, v1), "lte('"+v0+"', '"+v1+"')")
114 test("\nrange tests", function (t) {
115 ; [ ["1.0.0 - 2.0.0", "1.2.3"]
120 , ["*", "v1.2.3-foo"]
121 , [">=1.0.0", "1.0.0"]
122 , [">=1.0.0", "1.0.1"]
123 , [">=1.0.0", "1.1.0"]
124 , [">1.0.0", "1.0.1"]
125 , [">1.0.0", "1.1.0"]
126 , ["<=2.0.0", "2.0.0"]
127 , ["<=2.0.0", "1.9999.9999"]
128 , ["<=2.0.0", "0.2.9"]
129 , ["<2.0.0", "1.9999.9999"]
130 , ["<2.0.0", "0.2.9"]
131 , [">= 1.0.0", "1.0.0"]
132 , [">= 1.0.0", "1.0.1"]
133 , [">= 1.0.0", "1.1.0"]
134 , ["> 1.0.0", "1.0.1"]
135 , ["> 1.0.0", "1.1.0"]
136 , ["<= 2.0.0", "2.0.0"]
137 , ["<= 2.0.0", "1.9999.9999"]
138 , ["<= 2.0.0", "0.2.9"]
139 , ["< 2.0.0", "1.9999.9999"]
140 , ["<\t2.0.0", "0.2.9"]
141 , [">=0.1.97", "v0.1.97"]
142 , [">=0.1.97", "0.1.97"]
143 , ["0.1.20 || 1.2.4", "1.2.4"]
144 , [">=0.2.3 || <0.0.1", "0.0.0"]
145 , [">=0.2.3 || <0.0.1", "0.2.3"]
146 , [">=0.2.3 || <0.0.1", "0.2.4"]
150 , ["1.2.x || 2.x", "2.1.3"]
151 , ["1.2.x || 2.x", "1.2.3"]
155 , ["1.2.* || 2.*", "2.1.3"]
156 , ["1.2.* || 2.*", "1.2.3"]
160 , ["~2.4", "2.4.0"] // >=2.4.0 <2.5.0
162 , ["~>3.2.1", "3.2.2"] // >=3.2.1 <3.3.0
163 , ["~1", "1.2.3"] // >=1.0.0 <2.0.0
166 , ["~1.0", "1.0.2"] // >=1.0.0 <1.1.0
173 , ["~v0.5.4-pre", "0.5.5"]
174 , ["~v0.5.4-pre", "0.5.4"]
175 , ["=0.7.x", "0.7.2"]
176 , [">=0.7.x", "0.7.2"]
177 , ["=0.7.x", "0.7.0-asdf"]
178 , [">=0.7.x", "0.7.0-asdf"]
179 , ["<=0.7.x", "0.6.2"]
180 ].forEach(function (v) {
181 t.ok(satisfies(v[1], v[0]), v[0]+" satisfied by "+v[1])
186 test("\nnegative range tests", function (t) {
187 ; [ ["1.0.0 - 2.0.0", "2.2.3"]
189 , [">=1.0.0", "0.0.0"]
190 , [">=1.0.0", "0.0.1"]
191 , [">=1.0.0", "0.1.0"]
192 , [">1.0.0", "0.0.1"]
193 , [">1.0.0", "0.1.0"]
194 , ["<=2.0.0", "3.0.0"]
195 , ["<=2.0.0", "2.9999.9999"]
196 , ["<=2.0.0", "2.2.9"]
197 , ["<2.0.0", "2.9999.9999"]
198 , ["<2.0.0", "2.2.9"]
199 , [">=0.1.97", "v0.1.93"]
200 , [">=0.1.97", "0.1.93"]
201 , ["0.1.20 || 1.2.4", "1.2.3"]
202 , [">=0.2.3 || <0.0.1", "0.0.3"]
203 , [">=0.2.3 || <0.0.1", "0.2.2"]
207 , ["1.2.x || 2.x", "3.1.3"]
208 , ["1.2.x || 2.x", "1.1.3"]
212 , ["1.2.* || 2.*", "3.1.3"]
213 , ["1.2.* || 2.*", "1.1.3"]
216 , ["~2.4", "2.5.0"] // >=2.4.0 <2.5.0
218 , ["~>3.2.1", "3.3.2"] // >=3.2.1 <3.3.0
219 , ["~>3.2.1", "3.2.0"] // >=3.2.1 <3.3.0
220 , ["~1", "0.2.3"] // >=1.0.0 <2.0.0
222 , ["~1.0", "1.1.0"] // >=1.0.0 <1.1.0
226 , ["~v0.5.4-beta", "0.5.4-alpha"]
227 , ["<1", "1.0.0beta"]
228 , ["< 1", "1.0.0beta"]
229 , ["=0.7.x", "0.8.2"]
230 , [">=0.7.x", "0.6.2"]
231 , ["<=0.7.x", "0.7.2"]
232 ].forEach(function (v) {
233 t.ok(!satisfies(v[1], v[0]), v[0]+" not satisfied by "+v[1])
238 test("\nincrement versions test", function (t) {
239 ; [ [ "1.2.3", "major", "2.0.0" ]
240 , [ "1.2.3", "minor", "1.3.0" ]
241 , [ "1.2.3", "patch", "1.2.4" ]
242 , [ "1.2.3", "build", "1.2.3-1" ]
243 , [ "1.2.3-4", "build", "1.2.3-5" ]
244 , [ "1.2.3tag", "major", "2.0.0" ]
245 , [ "1.2.3-tag", "major", "2.0.0" ]
246 , [ "1.2.3tag", "build", "1.2.3-1" ]
247 , [ "1.2.3-tag", "build", "1.2.3-1" ]
248 , [ "1.2.3-4-tag", "build", "1.2.3-5" ]
249 , [ "1.2.3-4tag", "build", "1.2.3-5" ]
250 , [ "1.2.3", "fake", null ]
251 , [ "fake", "major", null ]
252 ].forEach(function (v) {
253 t.equal(inc(v[0], v[1]), v[2], "inc("+v[0]+", "+v[1]+") === "+v[2])
259 test("\nreplace stars test", function (t) {
265 , [ "* || 1.2.3", " || 1.2.3" ]
266 ].forEach(function (v) {
267 t.equal(replaceStars(v[0]), v[1], "replaceStars("+v[0]+") === "+v[1])
273 test("\nvalid range test", function (t) {
274 ; [ ["1.0.0 - 2.0.0", ">=1.0.0 <=2.0.0"]
280 , [">=1.0.0", ">=1.0.0"]
281 , [">1.0.0", ">1.0.0"]
282 , ["<=2.0.0", "<=2.0.0"]
283 , ["1", ">=1.0.0- <2.0.0-"]
284 , ["<=2.0.0", "<=2.0.0"]
285 , ["<=2.0.0", "<=2.0.0"]
286 , ["<2.0.0", "<2.0.0"]
287 , ["<2.0.0", "<2.0.0"]
288 , [">= 1.0.0", ">=1.0.0"]
289 , [">= 1.0.0", ">=1.0.0"]
290 , [">= 1.0.0", ">=1.0.0"]
291 , ["> 1.0.0", ">1.0.0"]
292 , ["> 1.0.0", ">1.0.0"]
293 , ["<= 2.0.0", "<=2.0.0"]
294 , ["<= 2.0.0", "<=2.0.0"]
295 , ["<= 2.0.0", "<=2.0.0"]
296 , ["< 2.0.0", "<2.0.0"]
297 , ["< 2.0.0", "<2.0.0"]
298 , [">=0.1.97", ">=0.1.97"]
299 , [">=0.1.97", ">=0.1.97"]
300 , ["0.1.20 || 1.2.4", "0.1.20||1.2.4"]
301 , [">=0.2.3 || <0.0.1", ">=0.2.3||<0.0.1"]
302 , [">=0.2.3 || <0.0.1", ">=0.2.3||<0.0.1"]
303 , [">=0.2.3 || <0.0.1", ">=0.2.3||<0.0.1"]
305 , ["2.x.x", ">=2.0.0- <3.0.0-"]
306 , ["1.2.x", ">=1.2.0- <1.3.0-"]
307 , ["1.2.x || 2.x", ">=1.2.0- <1.3.0-||>=2.0.0- <3.0.0-"]
308 , ["1.2.x || 2.x", ">=1.2.0- <1.3.0-||>=2.0.0- <3.0.0-"]
312 , ["1.2.* || 2.*", null]
313 , ["1.2.* || 2.*", null]
315 , ["2", ">=2.0.0- <3.0.0-"]
316 , ["2.3", ">=2.3.0- <2.4.0-"]
317 , ["~2.4", ">=2.4.0- <2.5.0-"]
318 , ["~2.4", ">=2.4.0- <2.5.0-"]
319 , ["~>3.2.1", ">=3.2.1- <3.3.0-"]
320 , ["~1", ">=1.0.0- <2.0.0-"]
321 , ["~>1", ">=1.0.0- <2.0.0-"]
322 , ["~> 1", ">=1.0.0- <2.0.0-"]
323 , ["~1.0", ">=1.0.0- <1.1.0-"]
324 , ["~ 1.0", ">=1.0.0- <1.1.0-"]
327 , [">=1", ">=1.0.0-"]
328 , [">= 1", ">=1.0.0-"]
329 , ["<1.2", "<1.2.0-"]
330 , ["< 1.2", "<1.2.0-"]
331 , ["1", ">=1.0.0- <2.0.0-"]
332 ].forEach(function (v) {
333 t.equal(validRange(v[0]), v[1], "validRange("+v[0]+") === "+v[1])
339 test("\ncomparators test", function (t) {
340 ; [ ["1.0.0 - 2.0.0", [[">=1.0.0", "<=2.0.0"]] ]
341 , ["1.0.0", [["1.0.0"]] ]
342 , [">=*", [[">=0.0.0-"]] ]
346 , [">=1.0.0", [[">=1.0.0"]] ]
347 , [">=1.0.0", [[">=1.0.0"]] ]
348 , [">=1.0.0", [[">=1.0.0"]] ]
349 , [">1.0.0", [[">1.0.0"]] ]
350 , [">1.0.0", [[">1.0.0"]] ]
351 , ["<=2.0.0", [["<=2.0.0"]] ]
352 , ["1", [[">=1.0.0-", "<2.0.0-"]] ]
353 , ["<=2.0.0", [["<=2.0.0"]] ]
354 , ["<=2.0.0", [["<=2.0.0"]] ]
355 , ["<2.0.0", [["<2.0.0"]] ]
356 , ["<2.0.0", [["<2.0.0"]] ]
357 , [">= 1.0.0", [[">=1.0.0"]] ]
358 , [">= 1.0.0", [[">=1.0.0"]] ]
359 , [">= 1.0.0", [[">=1.0.0"]] ]
360 , ["> 1.0.0", [[">1.0.0"]] ]
361 , ["> 1.0.0", [[">1.0.0"]] ]
362 , ["<= 2.0.0", [["<=2.0.0"]] ]
363 , ["<= 2.0.0", [["<=2.0.0"]] ]
364 , ["<= 2.0.0", [["<=2.0.0"]] ]
365 , ["< 2.0.0", [["<2.0.0"]] ]
366 , ["<\t2.0.0", [["<2.0.0"]] ]
367 , [">=0.1.97", [[">=0.1.97"]] ]
368 , [">=0.1.97", [[">=0.1.97"]] ]
369 , ["0.1.20 || 1.2.4", [["0.1.20"], ["1.2.4"]] ]
370 , [">=0.2.3 || <0.0.1", [[">=0.2.3"], ["<0.0.1"]] ]
371 , [">=0.2.3 || <0.0.1", [[">=0.2.3"], ["<0.0.1"]] ]
372 , [">=0.2.3 || <0.0.1", [[">=0.2.3"], ["<0.0.1"]] ]
373 , ["||", [[""], [""]] ]
374 , ["2.x.x", [[">=2.0.0-", "<3.0.0-"]] ]
375 , ["1.2.x", [[">=1.2.0-", "<1.3.0-"]] ]
376 , ["1.2.x || 2.x", [[">=1.2.0-", "<1.3.0-"], [">=2.0.0-", "<3.0.0-"]] ]
377 , ["1.2.x || 2.x", [[">=1.2.0-", "<1.3.0-"], [">=2.0.0-", "<3.0.0-"]] ]
379 , ["2.*.*", [[">=2.0.0-", "<3.0.0-"]] ]
380 , ["1.2.*", [[">=1.2.0-", "<1.3.0-"]] ]
381 , ["1.2.* || 2.*", [[">=1.2.0-", "<1.3.0-"], [">=2.0.0-", "<3.0.0-"]] ]
382 , ["1.2.* || 2.*", [[">=1.2.0-", "<1.3.0-"], [">=2.0.0-", "<3.0.0-"]] ]
384 , ["2", [[">=2.0.0-", "<3.0.0-"]] ]
385 , ["2.3", [[">=2.3.0-", "<2.4.0-"]] ]
386 , ["~2.4", [[">=2.4.0-", "<2.5.0-"]] ]
387 , ["~2.4", [[">=2.4.0-", "<2.5.0-"]] ]
388 , ["~>3.2.1", [[">=3.2.1-", "<3.3.0-"]] ]
389 , ["~1", [[">=1.0.0-", "<2.0.0-"]] ]
390 , ["~>1", [[">=1.0.0-", "<2.0.0-"]] ]
391 , ["~> 1", [[">=1.0.0-", "<2.0.0-"]] ]
392 , ["~1.0", [[">=1.0.0-", "<1.1.0-"]] ]
393 , ["~ 1.0", [[">=1.0.0-", "<1.1.0-"]] ]
394 , ["<1", [["<1.0.0-"]] ]
395 , ["< 1", [["<1.0.0-"]] ]
396 , [">=1", [[">=1.0.0-"]] ]
397 , [">= 1", [[">=1.0.0-"]] ]
398 , ["<1.2", [["<1.2.0-"]] ]
399 , ["< 1.2", [["<1.2.0-"]] ]
400 , ["1", [[">=1.0.0-", "<2.0.0-"]] ]
401 ].forEach(function (v) {
402 t.equivalent(toComparators(v[0]), v[1], "toComparators("+v[0]+") === "+JSON.stringify(v[1]))