deno.land / std@0.201.0 / semver / comparator_test.ts
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174// Copyright Isaac Z. Schlueter and Contributors. All rights reserved. ISC license.// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.import { assertEquals } from "../assert/mod.ts";import { parseRange } from "./parse_range.ts";import { parse } from "./parse.ts";import { testRange } from "./test_range.ts";import { parseComparator } from "./parse_comparator.ts";import { comparatorFormat } from "./comparator_format.ts";
Deno.test({ name: "comparators", fn: async (t) => { const versions: [string, string[], string[]][] = [ [ "1.0.0 - 2.0.0", ["1.0.0", "1.2.3", "2.0.0"], ["0.0.0", "2.0.1"], ], ["1.0.0", ["1.0.0"], ["0.0.0", "1.0.1"]], [">=*", ["0.0.0", "9999.9999.9999"], []], ["", ["0.0.0"], []], ["*", ["0.0.0", "9999.9999.9999"], []], [">=1.0.0", ["1.0.0", "9999.9999.9999"], ["0.1.2", "0.0.0"]], [">1.0.0", ["1.0.1", "9999.9999.9999"], ["0.1.2", "0.0.0", "1.0.0"]], ["<=2.0.0", ["0.0.0", "1.0.1", "2.0.0"], ["2.0.1", "9999.9999.9999"]], ["<2.0.0", ["0.0.0", "1.0.1", "1.2.3"], ["2.0.0", "9999.9999.9999"]], ["1", ["1.0.0", "1.0.1", "1.2.3"], ["0.0.0", "2.0.0", "9999.9999.9999"]], [">=0.1.97", ["0.1.97", "1.0.0", "9999.9999.9999"], ["0.0.0", "0.1.96"]], ["0.1.20", ["0.1.20"], ["0.0.0", "0.1.19", "0.1.21", "9999.9999.9999"]], [">=0.2.3", ["0.2.3", "0.2.4", "1.0.0"], ["0.0.0", "0.2.2", "0.1.0"]], ["||", ["0.0.0", "9999.9999.9999"], []], ["2.x.x", ["2.0.0", "2.9999.9999"], ["1.9999.9999", "3.0.0"]], ["1.2.x", ["1.2.0", "1.2.9999"], ["1.1.9999", "1.3.0"]], [ "1.2.x || 2.x", ["1.2.0", "1.2.9999", "2.0.0", "2.9999.9999"], ["1.1.9999", "1.3.0", "3.0.0"], ], ["x", ["0.0.0", "9999.9999.9999"], []], ["2.*.*", ["2.0.0", "2.9999.9999"], ["1.9999.9999", "3.0.0"]], ["1.2.*", ["1.2.0", "1.2.9999"], ["1.1.9999", "1.3.0"]], [ "1.2.* || 2.*", ["1.2.0", "1.2.9999", "2.0.0", "2.9999.9999"], ["1.1.9999", "1.3.0", "3.0.0"], ], ["*", ["0.0.0", "9999.9999.9999"], []], ["2", ["2.0.0", "2.0.1", "2.2.3"], [ "0.0.0", "1.9999.9999", "3.0.0", "9999.9999.9999", ]], ["2.3", ["2.3.0", "2.3.1", "2.3.9999"], [ "0.0.0", "2.2.9999", "2.4.0", "9999.9999.9999", ]], ["~2.4", ["2.4.0", "2.4.9999"], [ "0.0.0", "2.3.9999", "2.5.0", "9999.9999.9999", ]], ["~>3.2.1", ["3.2.1", "3.2.9999"], [ "0.0.0", "3.2.0", "3.3.0", "9999.9999.9999", ]], ["~1", ["1.0.0", "1.9999.9999"], [ "0.0.0", "0.9999.9999", "2.0.0", "9999.9999.9999", ]], ["~>1", ["1.0.0", "1.9999.9999"], [ "0.0.0", "0.9999.9999", "2.0.0", "9999.9999.9999", ]], ["~1.0", ["1.0.0", "1.0.9999"], [ "0.0.0", "0.9999.9999", "1.1.0", "9999.9999.9999", ]], ["<1", ["0.0.0", "0.9999.9999"], ["1.0.0", "9999.9999.9999"]], [">=1", ["1.0.0", "9999.9999.9999"], ["0.0.0", "0.9999.9999"]], ["<1.2", ["0.0.0", "1.1.0"], ["1.2.0", "9999.9999.9999"]],
// This is effectively 1 & 2, which matches nothing. ["1 2", [], [ "1.0.0", "1.9999.9999", "2.0.0", "2.9999.9999", "0.0.0", "0.9999.9999", "3.0.0", "9999.9999.9999", ]], ["1.2 - 3.4.5", ["1.2.0", "1.2.3", "3.4.5"], [ "0.0.0", "1.1.9999", "3.4.6", "9999.9999.9999", ]], ["1.2.3 - 3.4", ["1.2.3", "2.0.0", "3.4.9999"], [ "0.0.0", "1.2.2", "3.5.0", "9999.9999.9999", ]], ["1.2.3 - 3", ["1.2.3", "2.0.0", "3.0.0", "3.9999.9999"], [ "0.0.0", "1.2.2", "4.0.0", "9999.9999.9999", ]],
// handle spaces between comparators and versions [">= 1", ["1.0.0", "2.0.0", "3.0.0"], ["0.9999.9999"]], ["< 2", ["1.9999.9999"], ["2.0.0"]], ["= 1.0.0 || = 1.0.5", ["1.0.0", "1.0.5"], ["1.0.1", "1.1.1"]],
// Nothing can match... [">*", [], ["0.0.0", "9999.9999.9999"]], ["<*", [], ["0.0.0", "9999.9999.9999"]], ];
for (const [range, validVersions, invalidVersions] of versions) { await t.step({ name: `${range}`, fn: async (t) => { const r = parseRange(range); for (const valid of validVersions) { await t.step({ name: `${valid} ∋ ${range}`, fn: () => { const version = parse(valid); const actual = testRange(version, r); assertEquals(true, actual); }, }); } for (const invalid of invalidVersions) { await t.step({ name: `${invalid} ∌ ${range}`, fn: () => { const actual = testRange(parse(invalid), r); assertEquals(false, actual); }, }); } }, }); } },});
Deno.test("tostrings", function () { assertEquals( comparatorFormat(parseComparator(">= v1.2.3")), ">=1.2.3", ); assertEquals( comparatorFormat(parseComparator(">= v1.2.3-pre.1+b.2")), ">=1.2.3-pre.1+b.2", );});
Version Info