Files
FreeCADWasmDev/freecad-source/src/WebAssembly/FreeCADCoreProbe/spreadsheet-kernel-smoke.js
wangdequan 9a7c4f0335 Save FreeCAD Web workspace sources and user validation evidence
IFC native binding remains incomplete; preserve accurate test results.
2026-09-15 22:01:58 +08:00

51 lines
2.0 KiB
JavaScript

// SPDX-License-Identifier: LGPL-2.1-or-later
const fs = require("fs");
const path = require("path");
const { pathToFileURL } = require("url");
const buildDirectory = path.resolve(process.argv[2] || "build-web/configure/bin");
async function main()
{
globalThis.__dirname = `${buildDirectory}${path.sep}`;
globalThis.require = require;
const moduleUrl = pathToFileURL(path.join(buildDirectory, "FreeCADWebSpreadsheetRuntimeProbe.js")).href;
const module = await import(moduleUrl);
const probe = await module.default({
wasmBinary: fs.readFileSync(path.join(buildDirectory, "FreeCADWebSpreadsheetRuntimeProbe.wasm")),
});
const call = (name, returnType = "number", argTypes = [], args = []) => probe.ccall(name, returnType, argTypes, args);
const result = {
initialize: call("fc_web_spreadsheet_initialize"),
createRecompute: call("fc_web_spreadsheet_create_recompute"),
typeName: call("fc_web_spreadsheet_type_name", "string"),
objectCount: call("fc_web_spreadsheet_object_count"),
recomputeCount: call("fc_web_spreadsheet_recompute_count"),
recomputeHasError: call("fc_web_spreadsheet_recompute_has_error"),
cellA1: call("fc_web_spreadsheet_cell_a1", "string"),
cellB1: call("fc_web_spreadsheet_cell_b1", "string"),
resourcesReleased: call("fc_web_spreadsheet_create_resources_released"),
error: call("fc_web_spreadsheet_last_error", "string"),
};
const valid = result.initialize === 1
&& result.createRecompute === 1
&& result.typeName === "Spreadsheet::Sheet"
&& result.objectCount === 1
&& result.recomputeCount === 1
&& result.recomputeHasError === 0
&& result.cellA1 === "21"
&& result.cellB1 === "=A1*2"
&& result.resourcesReleased === 1
&& result.error === "";
if (!valid) {
throw new Error(JSON.stringify(result));
}
console.log(JSON.stringify(result));
}
main().catch((error) => {
console.error(error);
process.exitCode = 1;
});