42 lines
2.2 KiB
JavaScript
42 lines
2.2 KiB
JavaScript
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}`);
|