import { test } from "node:test"; import assert from "node:assert/strict"; import { buildApplyCommand, parseResultEnvelope, _internal } from "../src/pythonGen.js"; test("pyRepr escapes quotes, backslashes and newlines", () => { const r = _internal.pyRepr(`a'b\\c\nd`); assert.equal(r, `'a\\'b\\\\c\\nd'`); }); test("buildApplyCommand emits importable bootstrap and embeds payload", () => { const graph = { bp_path: "/Game/X", nodes: [{ id: "n1", kind: "branch" }] }; const cmd = buildApplyCommand(graph); assert.match(cmd, /import sys, json/); assert.match(cmd, /apply_graph\.entrypoint\(/); assert.match(cmd, /__MCP_RESULT__/); // Payload must survive as a python literal that, when eval'd, equals our JSON. const m = /apply_graph\.entrypoint\(('.*?')\)/s.exec(cmd); assert.ok(m, "no payload found in command"); // Roughly verify: drop quotes & unescape single-quote/backslash and compare JSON. const lit = m[1].slice(1, -1).replace(/\\'/g, "'").replace(/\\\\/g, "\\") .replace(/\\n/g, "\n").replace(/\\r/g, "\r").replace(/\\t/g, "\t"); assert.deepEqual(JSON.parse(lit), graph); }); test("parseResultEnvelope extracts JSON between markers", () => { const stdout = "noise\n__MCP_RESULT__" + JSON.stringify({ ok: true, spawned: { a: "K2N_1" } }) + "__MCP_END__\nmore noise"; const r = parseResultEnvelope(stdout); assert.equal(r.ok, true); assert.equal(r.spawned.a, "K2N_1"); }); test("parseResultEnvelope errors on missing envelope", () => { const r = parseResultEnvelope("no envelope here"); assert.equal(r.ok, false); });