test: tighten numeric parsing and path safety coverage

This commit is contained in:
Peter Steinberger 2026-03-13 19:24:22 +00:00
parent cf43951abc
commit 4a6020c574
2 changed files with 14 additions and 4 deletions

View File

@ -11,11 +11,13 @@ describe("parseFiniteNumber", () => {
{ value: 42, expected: 42 },
{ value: "3.14", expected: 3.14 },
{ value: " 3.14ms", expected: 3.14 },
{ value: "+7", expected: 7 },
{ value: "1e3", expected: 1000 },
])("parses %j", ({ value, expected }) => {
expect(parseFiniteNumber(value)).toBe(expected);
});
it.each([Number.NaN, Number.POSITIVE_INFINITY, "not-a-number", " ", null])(
it.each([Number.NaN, Number.POSITIVE_INFINITY, "not-a-number", " ", "", null])(
"returns undefined for %j",
(value) => {
expect(parseFiniteNumber(value)).toBeUndefined();
@ -28,13 +30,17 @@ describe("parseStrictInteger", () => {
{ value: "42", expected: 42 },
{ value: " -7 ", expected: -7 },
{ value: 12, expected: 12 },
{ value: "+9", expected: 9 },
])("parses %j", ({ value, expected }) => {
expect(parseStrictInteger(value)).toBe(expected);
});
it.each(["42ms", "0abc", "1.5", " ", Number.MAX_SAFE_INTEGER + 1])("rejects %j", (value) => {
expect(parseStrictInteger(value)).toBeUndefined();
});
it.each(["42ms", "0abc", "1.5", "1e3", " ", Number.MAX_SAFE_INTEGER + 1])(
"rejects %j",
(value) => {
expect(parseStrictInteger(value)).toBeUndefined();
},
);
});
describe("parseStrictPositiveInteger", () => {

View File

@ -6,6 +6,7 @@ describe("path-safety", () => {
it.each([
{ rootDir: "/tmp/demo", expected: `${path.resolve("/tmp/demo")}${path.sep}` },
{ rootDir: `/tmp/demo${path.sep}`, expected: `${path.resolve("/tmp/demo")}${path.sep}` },
{ rootDir: "/tmp/demo/..", expected: `${path.resolve("/tmp")}${path.sep}` },
])("resolves safe base dir for %j", ({ rootDir, expected }) => {
expect(resolveSafeBaseDir(rootDir)).toBe(expected);
});
@ -13,8 +14,11 @@ describe("path-safety", () => {
it.each([
{ rootDir: "/tmp/demo", targetPath: "/tmp/demo", expected: true },
{ rootDir: "/tmp/demo", targetPath: "/tmp/demo/sub/file.txt", expected: true },
{ rootDir: "/tmp/demo", targetPath: "/tmp/demo/./nested/../file.txt", expected: true },
{ rootDir: "/tmp/demo", targetPath: "/tmp/demo-two/../demo/file.txt", expected: true },
{ rootDir: "/tmp/demo", targetPath: "/tmp/demo/../escape.txt", expected: false },
{ rootDir: "/tmp/demo", targetPath: "/tmp/demo-sibling/file.txt", expected: false },
{ rootDir: "/tmp/demo", targetPath: "/tmp/demo/../../escape.txt", expected: false },
{ rootDir: "/tmp/demo", targetPath: "sub/file.txt", expected: false },
])("checks containment for %j", ({ rootDir, targetPath, expected }) => {
expect(isWithinDir(rootDir, targetPath)).toBe(expected);