Skip to main content
Module

std/semver/parse_range_test.ts

Deno standard library
Go to Latest
File
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682
// Copyright Isaac Z. Schlueter and Contributors. All rights reserved. ISC license.// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.import { assertEquals } from "../assert/mod.ts";import { parseRange } from "./parse_range.ts";import type { Range } from "./types.ts";
Deno.test("parseRange() parse ranges of different kinds", () => { const ranges: [string, Range][] = [ ["1.0.0 - 2.0.0", [ [ { operator: ">=", major: 1, minor: 0, patch: 0, prerelease: [], build: [], }, { operator: "<=", major: 2, minor: 0, patch: 0, prerelease: [], build: [], }, ], ]], ["1.2.3+asdf - 2.4.3+asdf", [ [ { operator: ">=", major: 1, minor: 2, patch: 3, prerelease: [], build: [], }, { operator: "<=", major: 2, minor: 4, patch: 3, prerelease: [], build: [], }, ], ]], ["^1.2.3+build", [ [ { operator: ">=", major: 1, minor: 2, patch: 3, prerelease: [] }, { operator: "<", major: 2, minor: 0, patch: 0 }, ], ]], ["1.2.3-pre+asdf - 2.4.3-pre+asdf", [ [ { operator: ">=", major: 1, minor: 2, patch: 3, prerelease: ["pre"], build: [], }, { operator: "<=", major: 2, minor: 4, patch: 3, prerelease: ["pre"], build: [], }, ], ]], ["^1.2", [ [ { operator: ">=", major: 1, minor: 2, patch: 0 }, { operator: "<", major: 2, minor: 0, patch: 0 }, ], ]], [">1.2", [[{ operator: ">=", major: 1, minor: 3, patch: 0 }]]], ["<=1.2.3", [ [ { operator: "<=", major: 1, minor: 2, patch: 3, prerelease: [], build: [], }, ], ]], ["<1.2.3", [ [ { operator: "<", major: 1, minor: 2, patch: 3, prerelease: [], build: [], }, ], ]], ["=1.2.3", [ [ { operator: undefined, major: 1, minor: 2, patch: 3, prerelease: [], build: [], }, ], ]], ["=0.7.x", [ [ { operator: ">=", major: 0, minor: 7, patch: 0 }, { operator: "<", major: 0, minor: 8, patch: 0 }, ], ]], [">=0.7.x", [[{ operator: ">=", major: 0, minor: 7, patch: 0 }]]], ["1.0.0", [ [ { operator: undefined, major: 1, minor: 0, patch: 0, prerelease: [], build: [], }, ], ]], [">=1.0.0", [ [ { operator: ">=", major: 1, minor: 0, patch: 0, prerelease: [], build: [], }, ], ]], [">1.0.0", [ [ { operator: ">", major: 1, minor: 0, patch: 0, prerelease: [], build: [], }, ], ]], ["<=2.0.0", [ [ { operator: "<=", major: 2, minor: 0, patch: 0, prerelease: [], build: [], }, ], ]], ["<2.0.0", [ [ { operator: "<", major: 2, minor: 0, patch: 0, prerelease: [], build: [], }, ], ]], [">=0.1.97", [ [ { operator: ">=", major: 0, minor: 1, patch: 97, prerelease: [], build: [], }, ], ]], ["0.1.20 || 1.2.4", [ [ { operator: undefined, major: 0, minor: 1, patch: 20, prerelease: [], build: [], }, ], [ { operator: undefined, major: 1, minor: 2, patch: 4, prerelease: [], build: [], }, ], ]], [">=0.2.3 || <0.0.1", [ [ { operator: ">=", major: 0, minor: 2, patch: 3, prerelease: [], build: [], }, ], [ { operator: "<", major: 0, minor: 0, patch: 1, prerelease: [], build: [], }, ], ]], ["2.x.x", [ [ { operator: ">=", major: 2, minor: 0, patch: 0 }, { operator: "<", major: 3, minor: 0, patch: 0 }, ], ]], ["1.2.x", [ [ { operator: ">=", major: 1, minor: 2, patch: 0 }, { operator: "<", major: 1, minor: 3, patch: 0 }, ], ]], ["1.2.x || 2.x", [ [ { operator: ">=", major: 1, minor: 2, patch: 0 }, { operator: "<", major: 1, minor: 3, patch: 0 }, ], [ { operator: ">=", major: 2, minor: 0, patch: 0 }, { operator: "<", major: 3, minor: 0, patch: 0 }, ], ]], ["2.*.*", [ [ { operator: ">=", major: 2, minor: 0, patch: 0 }, { operator: "<", major: 3, minor: 0, patch: 0 }, ], ]], ["1.2.*", [ [ { operator: ">=", major: 1, minor: 2, patch: 0 }, { operator: "<", major: 1, minor: 3, patch: 0 }, ], ]], ["1.2.* || 2.*", [ [ { operator: ">=", major: 1, minor: 2, patch: 0 }, { operator: "<", major: 1, minor: 3, patch: 0 }, ], [ { operator: ">=", major: 2, minor: 0, patch: 0 }, { operator: "<", major: 3, minor: 0, patch: 0 }, ], ]], ["2", [ [ { operator: ">=", major: 2, minor: 0, patch: 0 }, { operator: "<", major: 3, minor: 0, patch: 0 }, ], ]], ["2.3", [ [ { operator: ">=", major: 2, minor: 3, patch: 0 }, { operator: "<", major: 2, minor: 4, patch: 0 }, ], ]], ["~0.0.1", [ [ { operator: ">=", major: 0, minor: 0, patch: 1, prerelease: [] }, { operator: "<", major: 0, minor: 1, patch: 0 }, ], ]], ["~2.4", [ [ { operator: ">=", major: 2, minor: 4, patch: 0 }, { operator: "<", major: 2, minor: 5, patch: 0 }, ], ]], ["~>3.2.1", [ [ { operator: ">=", major: 3, minor: 2, patch: 1, prerelease: [] }, { operator: "<", major: 3, minor: 3, patch: 0 }, ], ]], ["~1", [ [ { operator: ">=", major: 1, minor: 0, patch: 0 }, { operator: "<", major: 2, minor: 0, patch: 0 }, ], ]], ["~>1", [ [ { operator: ">=", major: 1, minor: 0, patch: 0 }, { operator: "<", major: 2, minor: 0, patch: 0 }, ], ]], ["~1.0", [ [ { operator: ">=", major: 1, minor: 0, patch: 0 }, { operator: "<", major: 1, minor: 1, patch: 0 }, ], ]], ["<1", [[{ operator: "<", major: 1, minor: 0, patch: 0 }]]], [">=1.2", [[{ operator: ">=", major: 1, minor: 2, patch: 0 }]]], ["~v0.5.4-beta", [ [ { operator: ">=", major: 0, minor: 5, patch: 4, prerelease: ["beta"], }, { operator: "<", major: 0, minor: 6, patch: 0 }, ], ]], ["<0.7.x", [[{ operator: "<", major: 0, minor: 7, patch: 0 }]]], ["^0.0.1", [ [ { operator: ">=", major: 0, minor: 0, patch: 1, prerelease: [] }, { operator: "<", major: 0, minor: 0, patch: 2 }, ], ]], ["blerg", [ [ { operator: "<", major: 0, minor: 0, patch: 0, prerelease: [], build: [], semver: { major: 0, minor: 0, patch: 0, prerelease: [], build: [] }, }, ], ]], ["^1.2.3", [ [ { operator: ">=", major: 1, minor: 2, patch: 3, prerelease: [] }, { operator: "<", major: 2, minor: 0, patch: 0 }, ], ]], ];
for (const [r, expected] of ranges) { const range = parseRange(r); assertEquals(range, expected); }});
Deno.test("parseRange() parse ranges with hyphens", () => { const ranges: [string, Range][] = [ ["1.2.3 - 2.3.4", [ [ { operator: ">=", major: 1, minor: 2, patch: 3, prerelease: [], build: [], }, { operator: "<=", major: 2, minor: 3, patch: 4, prerelease: [], build: [], }, ], ]], ["1.2 - 2.3.4", [ [ { operator: ">=", major: 1, minor: 2, patch: 0, prerelease: [], build: [], }, { operator: "<=", major: 2, minor: 3, patch: 4, prerelease: [], build: [], }, ], ]], ["1.2.3 - 2.3", [ [ { operator: ">=", major: 1, minor: 2, patch: 3, prerelease: [], build: [], }, { operator: "<", major: 2, minor: 4, patch: 0, prerelease: [], build: [], }, ], ]], ["1.2.3 - 2", [ [ { operator: ">=", major: 1, minor: 2, patch: 3, prerelease: [], build: [], }, { operator: "<", major: 3, minor: 0, patch: 0, prerelease: [], build: [], }, ], ]], ];
for (const [r, expected] of ranges) { const range = parseRange(r); assertEquals(range, expected); }});
Deno.test("parseRange() parses ranges with x", () => { const ranges: [string, Range][] = [ ["*", [ [ { operator: undefined, major: NaN, minor: NaN, patch: NaN, prerelease: [], build: [], semver: { major: NaN, minor: NaN, patch: NaN, prerelease: [], build: [], }, }, ], ]], ["1.x", [ [ { operator: ">=", major: 1, minor: 0, patch: 0 }, { operator: "<", major: 2, minor: 0, patch: 0 }, ], ]], ["1.2.x", [ [ { operator: ">=", major: 1, minor: 2, patch: 0 }, { operator: "<", major: 1, minor: 3, patch: 0 }, ], ]], ["", [ [ { operator: undefined, major: NaN, minor: NaN, patch: NaN, prerelease: [], build: [], semver: { major: NaN, minor: NaN, patch: NaN, prerelease: [], build: [], }, }, ], ]], ["1", [ [ { operator: ">=", major: 1, minor: 0, patch: 0 }, { operator: "<", major: 2, minor: 0, patch: 0 }, ], ]], ["1.2", [ [ { operator: ">=", major: 1, minor: 2, patch: 0 }, { operator: "<", major: 1, minor: 3, patch: 0 }, ], ]], ];
for (const [r, expected] of ranges) { const range = parseRange(r); assertEquals(range, expected); }});
Deno.test("parseRanges() parses ranges with tilde", () => { const ranges: [string, Range][] = [ ["~1.2.3", [ [ { operator: ">=", major: 1, minor: 2, patch: 3, prerelease: [] }, { operator: "<", major: 1, minor: 3, patch: 0 }, ], ]], ["~1.2", [ [ { operator: ">=", major: 1, minor: 2, patch: 0 }, { operator: "<", major: 1, minor: 3, patch: 0 }, ], ]], ["~1", [ [ { operator: ">=", major: 1, minor: 0, patch: 0 }, { operator: "<", major: 2, minor: 0, patch: 0 }, ], ]], ["~0.2.3", [ [ { operator: ">=", major: 0, minor: 2, patch: 3, prerelease: [] }, { operator: "<", major: 0, minor: 3, patch: 0 }, ], ]], ["~0.2", [ [ { operator: ">=", major: 0, minor: 2, patch: 0 }, { operator: "<", major: 0, minor: 3, patch: 0 }, ], ]], ["~0", [ [ { operator: ">=", major: 0, minor: 0, patch: 0 }, { operator: "<", major: 1, minor: 0, patch: 0 }, ], ]], ["~1.2.3-beta.2", [ [ { operator: ">=", major: 1, minor: 2, patch: 3, prerelease: ["beta", 2], }, { operator: "<", major: 1, minor: 3, patch: 0 }, ], ]], ];
for (const [r, expected] of ranges) { const range = parseRange(r); assertEquals(range, expected); }});
Deno.test("parseRange() parses ranges with caret", () => { const ranges: [string, Range][] = [ ["^1.2.3", [ [ { operator: ">=", major: 1, minor: 2, patch: 3, prerelease: [] }, { operator: "<", major: 2, minor: 0, patch: 0 }, ], ]], ["^0.2.3", [ [ { operator: ">=", major: 0, minor: 2, patch: 3, prerelease: [] }, { operator: "<", major: 0, minor: 3, patch: 0 }, ], ]], ["^0.0.3", [ [ { operator: ">=", major: 0, minor: 0, patch: 3, prerelease: [] }, { operator: "<", major: 0, minor: 0, patch: 4 }, ], ]], ["^1.2.3-beta.2", [ [ { operator: ">=", major: 1, minor: 2, patch: 3, prerelease: ["beta", 2], }, { operator: "<", major: 2, minor: 0, patch: 0 }, ], ]], ["^0.0.3-beta", [ [ { operator: ">=", major: 0, minor: 0, patch: 3, prerelease: ["beta"], }, { operator: "<", major: 0, minor: 0, patch: 4 }, ], ]], ["^1.2.x", [ [ { operator: ">=", major: 1, minor: 2, patch: 0 }, { operator: "<", major: 2, minor: 0, patch: 0 }, ], ]], ["^0.0.x", [ [ { operator: ">=", major: 0, minor: 0, patch: 0 }, { operator: "<", major: 0, minor: 1, patch: 0 }, ], ]], ["^0.0", [ [ { operator: ">=", major: 0, minor: 0, patch: 0 }, { operator: "<", major: 0, minor: 1, patch: 0 }, ], ]], ["^1.x", [ [ { operator: ">=", major: 1, minor: 0, patch: 0 }, { operator: "<", major: 2, minor: 0, patch: 0 }, ], ]], ["^0.x", [ [ { operator: ">=", major: 0, minor: 0, patch: 0 }, { operator: "<", major: 1, minor: 0, patch: 0 }, ], ]], ];
for (const [r, expected] of ranges) { const range = parseRange(r); assertEquals(range, expected); }});