Files
quixos-protocol/test/bundle-policy.test.ts
T

37 lines
1.6 KiB
TypeScript

import test from "node:test";
import assert from "node:assert/strict";
import { bundlePolicyErrors } from "../src/bindings/bundle-policy.js";
import { addImplementation } from "../src/capability-language/implementation-edit.js";
test("bundled source policy rejects location and dynamic-loading assumptions, not static assets or runtime I/O", () => {
for (const code of [
'new URL("../x", import.meta.url)',
"__dirname",
"__filename",
"import(name)",
"require(name)",
"eval(code)",
"new Function(code)",
])
assert.ok(bundlePolicyErrors(code, "source.ts").length, code);
assert.deepEqual(
bundlePolicyErrors(
'import source from "./component.js?browser-source"; import fs from "node:fs"; fs.readFile(userSelectedPath);',
"source.ts",
),
[],
);
assert.deepEqual(bundlePolicyErrors('// import.meta.url\nconst text = "__dirname";', "source.ts"), []);
});
test("imperative handler insertion preserves arbitrary existing code and rejects ambiguous targets", () => {
const original =
'const keep = "createRuntime({fake:1})";\nservePackageRuntime(createRuntime({ existing: customHandler }));\n';
const edited = addImplementation(original, "createRuntime", "newHandler", "./impl/new.js");
assert.match(edited, /existing: customHandler/);
assert.match(edited, /const keep =/);
assert.match(edited, /"newHandler": qxImplementation/);
assert.throws(() => addImplementation(original, "createRuntime", "existing", "./x.js"), /already exists/);
assert.throws(() => addImplementation("createRuntime(one);", "createRuntime", "x", "./x.js"), /Cannot safely/);
});