import assert from "node:assert/strict"; import { createHash } from "node:crypto"; import { writeFile } from "node:fs/promises"; import { createVirtualEnvironment, manifest, manifestHash, runtimeCapabilities, validateCapability, validateImport } from "./compat.mjs"; assert.equal(manifest.schema, "python-runtime-manifest.v1"); assert.equal(manifest.runtime, "Pyodide"); assert.equal(manifest.version, "0.29.4"); assert.equal(manifest.python_version, "3.13.2"); assert.equal(manifest.abi_version, "2025_0"); assert.equal(manifest.platform, "emscripten_4_0_9"); assert.equal(manifest.artifacts.length, 2); assert.equal(new Set(manifest.artifacts.map((artifact) => `${artifact.name}@${artifact.version}`)).size, 2); for (const artifact of manifest.artifacts) { assert.match(artifact.sha256, /^[0-9a-f]{64}$/); assert.ok(artifact.bytes > 0); assert.equal(artifact.mirror_kind, "official"); } assert.equal(validateImport("linuxcnc").status, "accepted"); assert.equal(validateImport("os").code, "python_unsupported"); assert.equal(validateImport("").code, "python_import_invalid"); assert.equal(validateCapability("subprocess").status, "REAL-EXCLUDED"); assert.equal(validateCapability("arbitrary_host_paths").status, "REAL-EXCLUDED"); assert.equal(validateCapability("math").status, "accepted"); const environment = createVirtualEnvironment(); assert.equal(environment.capabilities.manifest_sha256, manifestHash()); assert.equal(environment.importModule("hal").symbols.includes("component"), true); assert.equal(runtimeCapabilities().denied_capabilities.includes("socket"), true); const report = { schema: "python-runtime-report.v1", status: "passed", runtime: manifest.runtime, version: manifest.version, manifest_sha256: manifestHash(), artifacts: manifest.artifacts.map(({ name, version, bytes, sha256 }) => ({ name, version, bytes, sha256 })), virtual_modules: Object.keys(manifest.virtual_modules).length, denied_capabilities: manifest.denied_capabilities.length, }; await writeFile(new URL("../coverage/python-runtime.report.json", import.meta.url), `${JSON.stringify(report, null, 2)}\n`); console.log(`python_runtime=passed version=${manifest.version} modules=${report.virtual_modules}`);