84 lines
3.8 KiB
JavaScript
84 lines
3.8 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/assembly-configure/bin");
|
|
|
|
async function main()
|
|
{
|
|
globalThis.__dirname = `${buildDirectory}${path.sep}`;
|
|
globalThis.require = require;
|
|
const moduleUrl = pathToFileURL(path.join(buildDirectory, "FreeCADWebAssemblyProbe.js")).href;
|
|
const module = await import(moduleUrl);
|
|
const probe = await module.default({
|
|
wasmBinary: fs.readFileSync(path.join(buildDirectory, "FreeCADWebAssemblyProbe.wasm")),
|
|
});
|
|
const call = (name, returnType = "number", argTypes = [], args = []) => probe.ccall(name, returnType, argTypes, args);
|
|
const error = () => ({
|
|
code: call("fc_web_assembly_error_code", "string"),
|
|
message: call("fc_web_assembly_error_message", "string"),
|
|
});
|
|
const result = {};
|
|
|
|
result.initialize = call("fc_web_assembly_initialize", "number", ["string"], ["AssemblyApp"]);
|
|
result.initializeAgain = call("fc_web_assembly_initialize", "number", ["string"], ["AssemblyApp"]);
|
|
result.type = call("fc_web_assembly_type_probe", "number", ["string"], ["Assembly::AssemblyObject"]);
|
|
result.typeName = call("fc_web_assembly_last_type", "string");
|
|
result.stateAfterValid = {
|
|
calls: call("fc_web_assembly_initialization_calls"),
|
|
runs: call("fc_web_assembly_initialization_runs"),
|
|
initialized: call("fc_web_assembly_initialized"),
|
|
};
|
|
result.handle = call("fc_web_assembly_create_handle", "number", ["string"], ["Assembly::AssemblyObject"]);
|
|
result.activeBeforeRelease = call("fc_web_assembly_active_handles");
|
|
result.release = call("fc_web_assembly_release_handle", "number", ["number"], [result.handle]);
|
|
result.activeAfterRelease = call("fc_web_assembly_active_handles");
|
|
result.unknownType = call("fc_web_assembly_type_probe", "number", ["string"], ["Assembly::Missing"]);
|
|
result.unknownTypeError = error();
|
|
result.unknownModule = call("fc_web_assembly_initialize", "number", ["string"], ["Missing"]);
|
|
result.unknownModuleError = error();
|
|
result.guiModule = call("fc_web_assembly_initialize", "number", ["string"], ["AssemblyGui"]);
|
|
result.guiModuleError = error();
|
|
result.emptyModule = call("fc_web_assembly_initialize", "number", ["string"], [""]);
|
|
result.emptyModuleError = error();
|
|
result.stateAfterErrors = {
|
|
calls: call("fc_web_assembly_initialization_calls"),
|
|
runs: call("fc_web_assembly_initialization_runs"),
|
|
initialized: call("fc_web_assembly_initialized"),
|
|
};
|
|
|
|
const valid = result.initialize === 1
|
|
&& result.initializeAgain === 1
|
|
&& result.type === 1
|
|
&& result.typeName === "Assembly::AssemblyObject"
|
|
&& result.stateAfterValid.calls === 3
|
|
&& result.stateAfterValid.runs === 1
|
|
&& result.stateAfterValid.initialized === 1
|
|
&& result.handle === 1
|
|
&& result.activeBeforeRelease === 1
|
|
&& result.release === 1
|
|
&& result.activeAfterRelease === 0
|
|
&& result.unknownType === 0
|
|
&& result.unknownTypeError.code === "type_not_found"
|
|
&& result.unknownModule === 0
|
|
&& result.unknownModuleError.code === "module_unavailable"
|
|
&& result.guiModule === 0
|
|
&& result.guiModuleError.code === "gui_dependency_unavailable"
|
|
&& result.emptyModule === 0
|
|
&& result.emptyModuleError.code === "invalid_argument"
|
|
&& result.stateAfterErrors.calls === 5
|
|
&& result.stateAfterErrors.runs === 1
|
|
&& result.stateAfterErrors.initialized === 1;
|
|
if (!valid) {
|
|
throw new Error(JSON.stringify(result));
|
|
}
|
|
console.log(JSON.stringify(result));
|
|
}
|
|
|
|
main().catch((error) => {
|
|
console.error(error);
|
|
process.exitCode = 1;
|
|
});
|