46 lines
1.7 KiB
TypeScript
46 lines
1.7 KiB
TypeScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import { parsePipeline } from "../src/parser.js";
|
|
|
|
test("parsePipeline splits stages and args", () => {
|
|
const p = parsePipeline("exec echo hi | where a=1 | pick id,subject");
|
|
assert.equal(p.length, 3);
|
|
assert.equal(p[0].name, "exec");
|
|
assert.deepEqual(p[0].args._, ["echo", "hi"]);
|
|
assert.equal(p[1].name, "where");
|
|
assert.equal(p[1].args._[0], "a=1");
|
|
assert.equal(p[2].name, "pick");
|
|
assert.equal(p[2].args._[0], "id,subject");
|
|
});
|
|
|
|
test("parsePipeline keeps quoted pipes", () => {
|
|
const p = parsePipeline("exec echo 'a|b' | json");
|
|
assert.equal(p.length, 2);
|
|
assert.deepEqual(p[0].args._, ["echo", "a|b"]);
|
|
});
|
|
|
|
test("parsePipeline preserves JSON escapes in double-quoted args", () => {
|
|
const p = parsePipeline(
|
|
'openclaw.invoke --tool llm-task --action json --args-json "{\\"prompt\\":\\"line1\\\\nline2\\",\\"schema\\":{\\"type\\":\\"object\\"}}"',
|
|
);
|
|
assert.equal(p.length, 1);
|
|
const raw = p[0].args["args-json"];
|
|
const parsed = JSON.parse(raw);
|
|
assert.equal(parsed.prompt, "line1\nline2");
|
|
assert.equal(parsed.schema.type, "object");
|
|
});
|
|
|
|
test("parsePipeline keeps single-quoted args literal", () => {
|
|
const p = parsePipeline('openclaw.invoke --args-json \'{"x":"a\\\\nb"}\'');
|
|
assert.equal(p.length, 1);
|
|
assert.equal(p[0].args["args-json"], '{"x":"a\\\\nb"}');
|
|
});
|
|
|
|
test("parsePipeline preserves escaped apostrophes in single-quoted args", () => {
|
|
const p = parsePipeline('openclaw.invoke --args-json \'{"prompt":"don\\\'t"}\'');
|
|
assert.equal(p.length, 1);
|
|
const raw = p[0].args["args-json"];
|
|
const parsed = JSON.parse(raw);
|
|
assert.equal(parsed.prompt, "don't");
|
|
});
|