8 lines
2.3 KiB
JavaScript
8 lines
2.3 KiB
JavaScript
#!/usr/bin/env node
|
|
import assert from "node:assert/strict"; import crypto from "node:crypto"; import fs from "node:fs"; import path from "node:path";
|
|
const modulePath = process.argv[2]; const f = await import(modulePath); const e = await import(path.join(path.dirname(modulePath), "facade-envelope.js")); const q = new e.FacadeSerialQueue(); const trace = [];
|
|
async function run(req) { trace.push({ direction: "request", requestId: req.requestId }); const r = await q.dispatch(req, (p, s) => { trace.push({ direction: "handler", requestId: req.requestId }); return f.handleAssemblyPython(p, s); }); trace.push({ direction: "response", requestId: r.requestId, kind: r.kind, code: r.kind === "error" ? r.error.code : null }); return r; }
|
|
const success = await run(f.createAssemblyPythonRequest("python-success")); const error = await run(f.createAssemblyPythonRequest("python-error", { ...f.ASSEMBLY_PYTHON_FIXTURE, sourceRevision: "wrong" })); const duplicate = await run(f.createAssemblyPythonRequest("python-success")); const cReq = f.createAssemblyPythonRequest("python-cancel"); const cPromise = run(cReq); const cancelAccepted = q.cancel(e.createCancel("cancel-1", cReq.requestId)); const cancelled = await cPromise;
|
|
assert.equal(success.result.apiCount, 552); assert.equal(success.result.generatedBindings.length, 7); assert.equal(success.result.guiAvailable, false); assert.equal(error.error.code, "revision_mismatch"); assert.equal(duplicate.error.code, "duplicate_request"); assert.equal(cancelAccepted, true); assert.equal(cancelled.error.code, "cancelled");
|
|
const report = { schema: "freecad-web-p6-assembly-action-03/v1", result: "pass", action: "python-api", sourceRevision: f.ASSEMBLY_PYTHON_FIXTURE.sourceRevision, inputSha256: crypto.createHash("sha256").update(JSON.stringify(f.ASSEMBLY_PYTHON_FIXTURE)).digest("hex"), responses: { success, error, duplicate, cancelled }, trace, state: { guiAvailable: false, nativePointersExposed: false } }; fs.mkdirSync(path.join(path.dirname(new URL(import.meta.url).pathname), "../docs/p6"), { recursive: true }); fs.writeFileSync(path.join(path.dirname(new URL(import.meta.url).pathname), "../docs/p6/assembly-action-03-python-api.json"), `${JSON.stringify(report, null, 2)}\n`); console.log(JSON.stringify({ result: report.result, apiCount: success.result.apiCount, responses: 4 }));
|