mirror of https://github.com/openclaw/openclaw.git
test: tighten numeric parsing and path safety coverage
This commit is contained in:
parent
cf43951abc
commit
4a6020c574
|
|
@ -11,11 +11,13 @@ describe("parseFiniteNumber", () => {
|
||||||
{ value: 42, expected: 42 },
|
{ value: 42, expected: 42 },
|
||||||
{ value: "3.14", expected: 3.14 },
|
{ value: "3.14", expected: 3.14 },
|
||||||
{ value: " 3.14ms", expected: 3.14 },
|
{ value: " 3.14ms", expected: 3.14 },
|
||||||
|
{ value: "+7", expected: 7 },
|
||||||
|
{ value: "1e3", expected: 1000 },
|
||||||
])("parses %j", ({ value, expected }) => {
|
])("parses %j", ({ value, expected }) => {
|
||||||
expect(parseFiniteNumber(value)).toBe(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",
|
"returns undefined for %j",
|
||||||
(value) => {
|
(value) => {
|
||||||
expect(parseFiniteNumber(value)).toBeUndefined();
|
expect(parseFiniteNumber(value)).toBeUndefined();
|
||||||
|
|
@ -28,13 +30,17 @@ describe("parseStrictInteger", () => {
|
||||||
{ value: "42", expected: 42 },
|
{ value: "42", expected: 42 },
|
||||||
{ value: " -7 ", expected: -7 },
|
{ value: " -7 ", expected: -7 },
|
||||||
{ value: 12, expected: 12 },
|
{ value: 12, expected: 12 },
|
||||||
|
{ value: "+9", expected: 9 },
|
||||||
])("parses %j", ({ value, expected }) => {
|
])("parses %j", ({ value, expected }) => {
|
||||||
expect(parseStrictInteger(value)).toBe(expected);
|
expect(parseStrictInteger(value)).toBe(expected);
|
||||||
});
|
});
|
||||||
|
|
||||||
it.each(["42ms", "0abc", "1.5", " ", Number.MAX_SAFE_INTEGER + 1])("rejects %j", (value) => {
|
it.each(["42ms", "0abc", "1.5", "1e3", " ", Number.MAX_SAFE_INTEGER + 1])(
|
||||||
expect(parseStrictInteger(value)).toBeUndefined();
|
"rejects %j",
|
||||||
});
|
(value) => {
|
||||||
|
expect(parseStrictInteger(value)).toBeUndefined();
|
||||||
|
},
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("parseStrictPositiveInteger", () => {
|
describe("parseStrictPositiveInteger", () => {
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ describe("path-safety", () => {
|
||||||
it.each([
|
it.each([
|
||||||
{ rootDir: "/tmp/demo", expected: `${path.resolve("/tmp/demo")}${path.sep}` },
|
{ 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${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 }) => {
|
])("resolves safe base dir for %j", ({ rootDir, expected }) => {
|
||||||
expect(resolveSafeBaseDir(rootDir)).toBe(expected);
|
expect(resolveSafeBaseDir(rootDir)).toBe(expected);
|
||||||
});
|
});
|
||||||
|
|
@ -13,8 +14,11 @@ describe("path-safety", () => {
|
||||||
it.each([
|
it.each([
|
||||||
{ rootDir: "/tmp/demo", targetPath: "/tmp/demo", expected: true },
|
{ 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/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/../escape.txt", expected: false },
|
||||||
{ rootDir: "/tmp/demo", targetPath: "/tmp/demo-sibling/file.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 },
|
{ rootDir: "/tmp/demo", targetPath: "sub/file.txt", expected: false },
|
||||||
])("checks containment for %j", ({ rootDir, targetPath, expected }) => {
|
])("checks containment for %j", ({ rootDir, targetPath, expected }) => {
|
||||||
expect(isWithinDir(rootDir, targetPath)).toBe(expected);
|
expect(isWithinDir(rootDir, targetPath)).toBe(expected);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue