mirror of https://github.com/openclaw/openclaw.git
34 lines
1.3 KiB
TypeScript
34 lines
1.3 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import {
|
|
describeInterpreterInlineEval,
|
|
detectInterpreterInlineEvalArgv,
|
|
isInterpreterLikeAllowlistPattern,
|
|
} from "./exec-inline-eval.js";
|
|
|
|
describe("exec inline eval detection", () => {
|
|
it("detects common interpreter eval flags", () => {
|
|
const cases = [
|
|
{ argv: ["python3", "-c", "print('hi')"], expected: "python3 -c" },
|
|
{ argv: ["/usr/bin/node", "--eval", "console.log('hi')"], expected: "node --eval" },
|
|
{ argv: ["perl", "-E", "say 1"], expected: "perl -e" },
|
|
{ argv: ["osascript", "-e", "beep"], expected: "osascript -e" },
|
|
];
|
|
for (const testCase of cases) {
|
|
const hit = detectInterpreterInlineEvalArgv(testCase.argv);
|
|
expect(hit).not.toBeNull();
|
|
expect(describeInterpreterInlineEval(hit!)).toBe(testCase.expected);
|
|
}
|
|
});
|
|
|
|
it("ignores normal script execution", () => {
|
|
expect(detectInterpreterInlineEvalArgv(["python3", "script.py"])).toBeNull();
|
|
expect(detectInterpreterInlineEvalArgv(["node", "script.js"])).toBeNull();
|
|
});
|
|
|
|
it("matches interpreter-like allowlist patterns", () => {
|
|
expect(isInterpreterLikeAllowlistPattern("/usr/bin/python3")).toBe(true);
|
|
expect(isInterpreterLikeAllowlistPattern("**/node")).toBe(true);
|
|
expect(isInterpreterLikeAllowlistPattern("/usr/bin/rg")).toBe(false);
|
|
});
|
|
});
|