2020-11-12 23:47:40 +00:00
|
|
|
import { assert } from "chai";
|
|
|
|
import { VersionRange } from "../src/version-range";
|
|
|
|
import { Version } from "../src/version";
|
2020-05-22 09:43:18 +00:00
|
|
|
|
|
|
|
describe("VersionRange", function () {
|
|
|
|
describe("#from_requirement_string()", function () {
|
|
|
|
it("should accept a specific version without an equals sign", function () {
|
|
|
|
const range = VersionRange.from_requirement_string("1.2.3");
|
|
|
|
assert.deepEqual(range.requirements, [
|
2020-11-13 21:49:38 +00:00
|
|
|
[{ comparator: "", version: Version.fromSemver("1.2.3") }],
|
2020-05-22 09:43:18 +00:00
|
|
|
]);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("should accept two different versions without equals signs", function () {
|
|
|
|
const range = VersionRange.from_requirement_string(
|
|
|
|
"1.2.3 || 1.2.4"
|
|
|
|
);
|
|
|
|
assert.deepEqual(range.requirements, [
|
2020-11-13 21:49:38 +00:00
|
|
|
[{ comparator: "", version: Version.fromSemver("1.2.3") }],
|
|
|
|
[{ comparator: "", version: Version.fromSemver("1.2.4") }],
|
2020-05-22 09:43:18 +00:00
|
|
|
]);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("should accept a specific version with an equals sign", function () {
|
|
|
|
const range = VersionRange.from_requirement_string("=1.2.3");
|
|
|
|
assert.deepEqual(range.requirements, [
|
2020-11-13 21:49:38 +00:00
|
|
|
[{ comparator: "=", version: Version.fromSemver("1.2.3") }],
|
2020-05-22 09:43:18 +00:00
|
|
|
]);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("should accept a specific version with an equals sign", function () {
|
|
|
|
const range = VersionRange.from_requirement_string(
|
|
|
|
"=1.2.3 || =1.2.4"
|
|
|
|
);
|
|
|
|
assert.deepEqual(range.requirements, [
|
2020-11-13 21:49:38 +00:00
|
|
|
[{ comparator: "=", version: Version.fromSemver("1.2.3") }],
|
|
|
|
[{ comparator: "=", version: Version.fromSemver("1.2.4") }],
|
2020-05-22 09:43:18 +00:00
|
|
|
]);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("should accept a min and max range", function () {
|
|
|
|
const range = VersionRange.from_requirement_string(">1.2.3 <1.2.5");
|
|
|
|
assert.deepEqual(range.requirements, [
|
|
|
|
[
|
2020-11-13 21:49:38 +00:00
|
|
|
{ comparator: ">", version: Version.fromSemver("1.2.3") },
|
|
|
|
{ comparator: "<", version: Version.fromSemver("1.2.5") },
|
2020-05-22 09:43:18 +00:00
|
|
|
],
|
|
|
|
]);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("should allow inclusive range", function () {
|
|
|
|
const range = VersionRange.from_requirement_string(
|
|
|
|
">=1-test <=2-test"
|
|
|
|
);
|
|
|
|
assert.deepEqual(range.requirements, [
|
|
|
|
[
|
2020-11-12 23:47:40 +00:00
|
|
|
{
|
|
|
|
comparator: ">=",
|
2020-11-13 21:49:38 +00:00
|
|
|
version: Version.fromSemver("1-test"),
|
2020-11-12 23:47:40 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
comparator: "<=",
|
2020-11-13 21:49:38 +00:00
|
|
|
version: Version.fromSemver("2-test"),
|
2020-11-12 23:47:40 +00:00
|
|
|
},
|
2020-05-22 09:43:18 +00:00
|
|
|
],
|
|
|
|
]);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("should ignore extra whitespace within a range", function () {
|
|
|
|
const range = VersionRange.from_requirement_string("^1.2 <1.3");
|
|
|
|
assert.deepEqual(range.requirements, [
|
|
|
|
[
|
2020-11-13 21:49:38 +00:00
|
|
|
{ comparator: "^", version: Version.fromSemver("1.2") },
|
|
|
|
{ comparator: "<", version: Version.fromSemver("1.3") },
|
2020-05-22 09:43:18 +00:00
|
|
|
],
|
|
|
|
]);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("should ignore empty ranges", function () {
|
|
|
|
const range = VersionRange.from_requirement_string(
|
|
|
|
"|| || 1.2.4 || || 1.2.5 ||"
|
|
|
|
);
|
|
|
|
assert.deepEqual(range.requirements, [
|
2020-11-13 21:49:38 +00:00
|
|
|
[{ comparator: "", version: Version.fromSemver("1.2.4") }],
|
|
|
|
[{ comparator: "", version: Version.fromSemver("1.2.5") }],
|
2020-05-22 09:43:18 +00:00
|
|
|
]);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe("#satisfied_by()", function () {
|
|
|
|
const groups = [
|
|
|
|
{
|
|
|
|
requirements: "1.2.3",
|
|
|
|
tests: [
|
|
|
|
{ version: "1.2.3", expected: true },
|
|
|
|
{ version: "1.2.4", expected: false },
|
|
|
|
{ version: "1.2.2", expected: false },
|
|
|
|
{ version: "1.2.3-test", expected: true },
|
|
|
|
],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
requirements: "1.2.3 || 1.2.4",
|
|
|
|
tests: [
|
|
|
|
{ version: "1.2.3", expected: true },
|
|
|
|
{ version: "1.2.4", expected: true },
|
|
|
|
{ version: "1.2.2", expected: false },
|
|
|
|
{ version: "1.2.3-test", expected: true },
|
|
|
|
{ version: "1.2.4+build", expected: true },
|
|
|
|
],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
requirements: "^1.2",
|
|
|
|
tests: [
|
|
|
|
{ version: "1.2", expected: true },
|
|
|
|
{ version: "1.2.5", expected: true },
|
|
|
|
{ version: "1.2.6-pre", expected: false },
|
|
|
|
{ version: "1.3", expected: true },
|
|
|
|
{ version: "2.0", expected: false },
|
|
|
|
],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
requirements: ">=1.2.3 <=1.3.2",
|
|
|
|
tests: [
|
|
|
|
{ version: "1.2", expected: false },
|
|
|
|
{ version: "1.2.3", expected: true },
|
|
|
|
{ version: "1.2.5", expected: true },
|
|
|
|
{ version: "1.2.6+build", expected: true },
|
|
|
|
{ version: "1.3.2", expected: true },
|
|
|
|
{ version: "1.3.3", expected: false },
|
|
|
|
],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
requirements: ">1.2.3 <1.3.2",
|
|
|
|
tests: [
|
|
|
|
{ version: "1.2", expected: false },
|
|
|
|
{ version: "1.2.3", expected: false },
|
|
|
|
{ version: "1.2.5", expected: true },
|
|
|
|
{ version: "1.2.6+build", expected: true },
|
|
|
|
{ version: "1.3.2", expected: false },
|
|
|
|
{ version: "1.3.3", expected: false },
|
|
|
|
],
|
|
|
|
},
|
|
|
|
];
|
|
|
|
|
|
|
|
groups.forEach(function (group) {
|
|
|
|
const range = VersionRange.from_requirement_string(
|
|
|
|
group.requirements
|
|
|
|
);
|
|
|
|
describe(`with requirements '${group.requirements}'`, function () {
|
|
|
|
group.tests.forEach(function (test) {
|
|
|
|
it(`returns ${test.expected} for '${test.version}'`, function () {
|
2020-11-13 21:49:38 +00:00
|
|
|
const version = Version.fromSemver(test.version);
|
2020-05-22 09:43:18 +00:00
|
|
|
const result = range.satisfied_by.apply(range, [
|
|
|
|
version,
|
|
|
|
]);
|
|
|
|
assert.equal(result, test.expected);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|