|
|
|
|
@@ -32,8 +32,11 @@ import {
|
|
|
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel,
|
|
|
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlan,
|
|
|
|
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel,
|
|
|
|
|
VIRTUAL_HAL_COMMAND_SCRIPT_FIXTURES,
|
|
|
|
|
VIRTUAL_HAL_COVERAGE_STATES,
|
|
|
|
|
VIRTUAL_HAL_PROJECT_PIN_GROUPS,
|
|
|
|
|
VIRTUAL_HAL_SIM_CONFIG_SOURCE_TARGETS,
|
|
|
|
|
VIRTUAL_HAL_SOURCE_DERIVED_CAPABILITIES,
|
|
|
|
|
VIRTUAL_HAL_SIMULATION_REPLACEMENT_TARGETS,
|
|
|
|
|
VIRTUAL_HAL_SIMULATION_RUNTIME_CAPABILITIES,
|
|
|
|
|
VIRTUAL_HAL_SOURCE_FILES,
|
|
|
|
|
@@ -48,6 +51,7 @@ import {
|
|
|
|
|
createLinuxCncVirtualHalRuntime,
|
|
|
|
|
createVirtualHalIntegrityReport,
|
|
|
|
|
createMachineSessionSnapshotPayload,
|
|
|
|
|
createVirtualHalSessionPayload,
|
|
|
|
|
createMachineSessionPersistenceDisplayViewModel,
|
|
|
|
|
createMachineSessionPersistenceRenderState,
|
|
|
|
|
createMachineSessionPersistenceSummary,
|
|
|
|
|
@@ -63,6 +67,7 @@ import {
|
|
|
|
|
createProjectBatchAcceptanceReportValidation,
|
|
|
|
|
createProjectBatchAcceptanceSummaryViewModel,
|
|
|
|
|
createProjectBatchAcceptanceWorkflow,
|
|
|
|
|
createProjectReleaseBrowserDiagnosticsArtifactValidation,
|
|
|
|
|
createProjectReleaseGateActionPlan,
|
|
|
|
|
createProjectReleaseGateExecutionManifest,
|
|
|
|
|
createProjectReleaseGateExecutionSummaryViewModel,
|
|
|
|
|
@@ -78,11 +83,14 @@ import {
|
|
|
|
|
createProjectReleaseReadinessSummaryViewModel,
|
|
|
|
|
createVirtualHalBridgeActionPlan,
|
|
|
|
|
createVirtualHalBridgeReadiness,
|
|
|
|
|
createVirtualHalCommandScriptFixtureReport,
|
|
|
|
|
createVirtualHalPinInventory,
|
|
|
|
|
createVirtualHalPinRegistry,
|
|
|
|
|
createVirtualHalProjectReport,
|
|
|
|
|
createVirtualHalSimConfigSourceCoverageReport,
|
|
|
|
|
createVirtualHalSimulationReplacementReport,
|
|
|
|
|
createVirtualHalState,
|
|
|
|
|
createVirtualHalSourceComplianceReport,
|
|
|
|
|
createVirtualHalSystemCoverageReport,
|
|
|
|
|
createVirtualHalWasmBridgeSnapshot,
|
|
|
|
|
executeVirtualHalCommand,
|
|
|
|
|
@@ -146,6 +154,7 @@ import {
|
|
|
|
|
renderIniPanelShellWorkflowOverviewEmbeddingMountState,
|
|
|
|
|
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactState,
|
|
|
|
|
restoreMachineParametersFromOpfs,
|
|
|
|
|
restoreVirtualHalStateFromSessionSnapshot,
|
|
|
|
|
saveMachineSessionSnapshot,
|
|
|
|
|
saveMachineTextFiles,
|
|
|
|
|
saveSessionSnapshot,
|
|
|
|
|
@@ -160,6 +169,7 @@ const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
|
|
|
const root = resolve(__dirname, "../../..");
|
|
|
|
|
const sdkIndexText = readFileSync(resolve(root, "runtime/sdk/src/index.js"), "utf8");
|
|
|
|
|
const sdkReadmeText = readFileSync(resolve(root, "runtime/sdk/README.md"), "utf8");
|
|
|
|
|
const sourceManifestText = readFileSync(resolve(root, "tools/source-manifest.txt"), "utf8");
|
|
|
|
|
const trackerText = readFileSync(resolve(root, "../PROJECT_COMPLETION_TRACKER.md"), "utf8");
|
|
|
|
|
|
|
|
|
|
const requiredExports = [
|
|
|
|
|
@@ -189,6 +199,7 @@ const requiredExports = [
|
|
|
|
|
["createProjectBatchAcceptanceReportValidation", createProjectBatchAcceptanceReportValidation],
|
|
|
|
|
["createProjectBatchAcceptanceSummaryViewModel", createProjectBatchAcceptanceSummaryViewModel],
|
|
|
|
|
["createProjectBatchAcceptanceWorkflow", createProjectBatchAcceptanceWorkflow],
|
|
|
|
|
["createProjectReleaseBrowserDiagnosticsArtifactValidation", createProjectReleaseBrowserDiagnosticsArtifactValidation],
|
|
|
|
|
["createProjectReleaseGateActionPlan", createProjectReleaseGateActionPlan],
|
|
|
|
|
["createProjectReleaseGateExecutionManifest", createProjectReleaseGateExecutionManifest],
|
|
|
|
|
["createProjectReleaseGateExecutionSummaryViewModel", createProjectReleaseGateExecutionSummaryViewModel],
|
|
|
|
|
@@ -220,12 +231,15 @@ const requiredExports = [
|
|
|
|
|
["createLinuxCncVirtualHalRuntime", createLinuxCncVirtualHalRuntime],
|
|
|
|
|
["createVirtualHalBridgeActionPlan", createVirtualHalBridgeActionPlan],
|
|
|
|
|
["createVirtualHalBridgeReadiness", createVirtualHalBridgeReadiness],
|
|
|
|
|
["createVirtualHalCommandScriptFixtureReport", createVirtualHalCommandScriptFixtureReport],
|
|
|
|
|
["createVirtualHalIntegrityReport", createVirtualHalIntegrityReport],
|
|
|
|
|
["createVirtualHalPinInventory", createVirtualHalPinInventory],
|
|
|
|
|
["createVirtualHalPinRegistry", createVirtualHalPinRegistry],
|
|
|
|
|
["createVirtualHalProjectReport", createVirtualHalProjectReport],
|
|
|
|
|
["createVirtualHalSimConfigSourceCoverageReport", createVirtualHalSimConfigSourceCoverageReport],
|
|
|
|
|
["createVirtualHalSimulationReplacementReport", createVirtualHalSimulationReplacementReport],
|
|
|
|
|
["createVirtualHalSimulationRuntimeReport", createVirtualHalSimulationRuntimeReport],
|
|
|
|
|
["createVirtualHalSourceComplianceReport", createVirtualHalSourceComplianceReport],
|
|
|
|
|
["createVirtualHalState", createVirtualHalState],
|
|
|
|
|
["createVirtualHalSystemCoverageReport", createVirtualHalSystemCoverageReport],
|
|
|
|
|
["createVirtualHalWasmBridgeSnapshot", createVirtualHalWasmBridgeSnapshot],
|
|
|
|
|
@@ -359,10 +373,12 @@ const requiredExports = [
|
|
|
|
|
["defaultMachinePaths", defaultMachinePaths],
|
|
|
|
|
["normalizeOpfsPath", normalizeOpfsPath],
|
|
|
|
|
["createMachineSessionSnapshotPayload", createMachineSessionSnapshotPayload],
|
|
|
|
|
["createVirtualHalSessionPayload", createVirtualHalSessionPayload],
|
|
|
|
|
["createSessionSnapshot", createSessionSnapshot],
|
|
|
|
|
["saveSessionSnapshot", saveSessionSnapshot],
|
|
|
|
|
["saveMachineSessionSnapshot", saveMachineSessionSnapshot],
|
|
|
|
|
["loadMachineSessionSnapshot", loadMachineSessionSnapshot],
|
|
|
|
|
["restoreVirtualHalStateFromSessionSnapshot", restoreVirtualHalStateFromSessionSnapshot],
|
|
|
|
|
["validateSessionSnapshot", validateSessionSnapshot],
|
|
|
|
|
["machineFilePaths", machineFilePaths],
|
|
|
|
|
["saveMachineTextFiles", saveMachineTextFiles],
|
|
|
|
|
@@ -468,14 +484,29 @@ assert.equal(VIRTUAL_HAL_SIMULATION_RUNTIME_CAPABILITIES.includes("motion-contro
|
|
|
|
|
assert.equal(VIRTUAL_HAL_SIMULATION_REPLACEMENT_TARGETS.includes("linuxcnc-realtime-hal"), true);
|
|
|
|
|
assert.equal(VIRTUAL_HAL_SIMULATION_REPLACEMENT_TARGETS.includes("halcmd"), true);
|
|
|
|
|
assert.equal(VIRTUAL_HAL_SIMULATION_REPLACEMENT_TARGETS.includes("motion-controller"), true);
|
|
|
|
|
assert.equal(VIRTUAL_HAL_COMMAND_SCRIPT_FIXTURES.some(({ id }) => id === "pin-signal-net-show"), true);
|
|
|
|
|
assert.equal(VIRTUAL_HAL_COMMAND_SCRIPT_FIXTURES.some(({ id }) => id === "load-thread-start-stop"), true);
|
|
|
|
|
assert.equal(VIRTUAL_HAL_SIM_CONFIG_SOURCE_TARGETS.some(({ id }) => id === "axis-foam"), true);
|
|
|
|
|
assert.equal(VIRTUAL_HAL_SIM_CONFIG_SOURCE_TARGETS.some(({ id }) => id === "qtdragon-on-abort"), true);
|
|
|
|
|
assert.equal(VIRTUAL_HAL_SIM_CONFIG_SOURCE_TARGETS
|
|
|
|
|
.find(({ id }) => id === "external-offsets")
|
|
|
|
|
.sourceFiles.includes("linuxcnc/configs/sim/axis/external_offsets/M111"), true);
|
|
|
|
|
assert.equal(VIRTUAL_HAL_SOURCE_DERIVED_CAPABILITIES["halcmd-simulation-replacement"].sourceFiles.includes("linuxcnc/src/hal/utils/halcmd_commands.cc"), true);
|
|
|
|
|
assert.equal(VIRTUAL_HAL_SOURCE_DERIVED_CAPABILITIES["motion-controller-simulation-replacement"].sourceFiles.includes("linuxcnc/src/emc/motion/motion.c"), true);
|
|
|
|
|
assert.equal(VIRTUAL_HAL_COVERAGE_STATES.runtimeBoundary, "runtime-boundary");
|
|
|
|
|
assert.equal(VIRTUAL_HAL_SOURCE_FILES.halui, "linuxcnc/src/emc/usr_intf/halui.cc");
|
|
|
|
|
assert.equal(VIRTUAL_HAL_SYSTEM_PIN_FAMILIES.some(({ id }) => id === "iocontrol"), true);
|
|
|
|
|
assert.equal(VIRTUAL_HAL_SYSTEM_PIN_FAMILIES.some(({ id }) => id === "motion-core"), true);
|
|
|
|
|
assert.match(sdkIndexText, /\bVIRTUAL_HAL_WASM_BRIDGE_FUNCTIONS\b/);
|
|
|
|
|
assert.match(sdkReadmeText, /\bVIRTUAL_HAL_WASM_BRIDGE_FUNCTIONS\b/);
|
|
|
|
|
assert.match(sdkIndexText, /\bVIRTUAL_HAL_COMMAND_SCRIPT_FIXTURES\b/);
|
|
|
|
|
assert.match(sdkReadmeText, /\bVIRTUAL_HAL_COMMAND_SCRIPT_FIXTURES\b/);
|
|
|
|
|
assert.match(sdkIndexText, /\bVIRTUAL_HAL_PROJECT_PIN_GROUPS\b/);
|
|
|
|
|
assert.match(sdkReadmeText, /\bVIRTUAL_HAL_PROJECT_PIN_GROUPS\b/);
|
|
|
|
|
assert.match(sdkIndexText, /\bVIRTUAL_HAL_SIM_CONFIG_SOURCE_TARGETS\b/);
|
|
|
|
|
assert.match(sdkReadmeText, /\bVIRTUAL_HAL_SIM_CONFIG_SOURCE_TARGETS\b/);
|
|
|
|
|
assert.match(sdkIndexText, /\bVIRTUAL_HAL_SOURCE_DERIVED_CAPABILITIES\b/);
|
|
|
|
|
assert.match(sdkReadmeText, /\bVIRTUAL_HAL_SOURCE_DERIVED_CAPABILITIES\b/);
|
|
|
|
|
assert.match(sdkIndexText, /\bVIRTUAL_HAL_SIMULATION_RUNTIME_CAPABILITIES\b/);
|
|
|
|
|
assert.match(sdkReadmeText, /\bVIRTUAL_HAL_SIMULATION_RUNTIME_CAPABILITIES\b/);
|
|
|
|
|
assert.match(sdkIndexText, /\bVIRTUAL_HAL_SIMULATION_REPLACEMENT_TARGETS\b/);
|
|
|
|
|
@@ -486,6 +517,8 @@ assert.match(sdkIndexText, /\bexecuteVirtualHalCommand\b/);
|
|
|
|
|
assert.match(sdkReadmeText, /\bexecuteVirtualHalCommand\b/);
|
|
|
|
|
assert.match(sdkIndexText, /\bexecuteVirtualHalcmd\b/);
|
|
|
|
|
assert.match(sdkReadmeText, /\bexecuteVirtualHalcmd\b/);
|
|
|
|
|
assert.match(sdkIndexText, /\bcreateVirtualHalCommandScriptFixtureReport\b/);
|
|
|
|
|
assert.match(sdkReadmeText, /\bcreateVirtualHalCommandScriptFixtureReport\b/);
|
|
|
|
|
assert.match(sdkIndexText, /\bstepVirtualHalMotion\b/);
|
|
|
|
|
assert.match(sdkReadmeText, /\bstepVirtualHalMotion\b/);
|
|
|
|
|
assert.match(sdkIndexText, /\bstepVirtualHalMotionController\b/);
|
|
|
|
|
@@ -494,6 +527,10 @@ assert.match(sdkIndexText, /\bcreateVirtualHalSimulationRuntimeReport\b/);
|
|
|
|
|
assert.match(sdkReadmeText, /\bcreateVirtualHalSimulationRuntimeReport\b/);
|
|
|
|
|
assert.match(sdkIndexText, /\bcreateVirtualHalSimulationReplacementReport\b/);
|
|
|
|
|
assert.match(sdkReadmeText, /\bcreateVirtualHalSimulationReplacementReport\b/);
|
|
|
|
|
assert.match(sdkIndexText, /\bcreateVirtualHalSimConfigSourceCoverageReport\b/);
|
|
|
|
|
assert.match(sdkReadmeText, /\bcreateVirtualHalSimConfigSourceCoverageReport\b/);
|
|
|
|
|
assert.match(sdkIndexText, /\bcreateVirtualHalSourceComplianceReport\b/);
|
|
|
|
|
assert.match(sdkReadmeText, /\bcreateVirtualHalSourceComplianceReport\b/);
|
|
|
|
|
assert.match(sdkIndexText, /\bcreateVirtualHalSystemCoverageReport\b/);
|
|
|
|
|
assert.match(sdkReadmeText, /\bcreateVirtualHalSystemCoverageReport\b/);
|
|
|
|
|
assert.match(sdkIndexText, /\bcreateVirtualHalPinRegistry\b/);
|
|
|
|
|
@@ -596,6 +633,17 @@ const directHalcmdAliasResult = executeVirtualHalcmd(virtualHalRuntime.getState(
|
|
|
|
|
assert.equal(directHalcmdAliasResult.ok, true);
|
|
|
|
|
assert.equal(directHalcmdAliasResult.apiName, "linuxcnc-wasm-virtual-halcmd-result");
|
|
|
|
|
assert.match(directHalcmdAliasResult.output, /halui\.machine\.is-on/);
|
|
|
|
|
const commandScriptFixtureReport = createVirtualHalCommandScriptFixtureReport({ halState: virtualHalRuntime.getState() });
|
|
|
|
|
assert.equal(commandScriptFixtureReport.apiName, "linuxcnc-wasm-virtual-hal-command-script-fixture-report");
|
|
|
|
|
assert.equal(commandScriptFixtureReport.complete, true);
|
|
|
|
|
assert.equal(commandScriptFixtureReport.webSimulationSatisfied, true);
|
|
|
|
|
assert.equal(commandScriptFixtureReport.missingActions.length, 0);
|
|
|
|
|
assert.equal(commandScriptFixtureReport.missingFixtures.length, 0);
|
|
|
|
|
assert.equal(commandScriptFixtureReport.sourceFiles.includes("linuxcnc/src/hal/utils/halcmd_commands.cc"), true);
|
|
|
|
|
for (const action of ["setp", "sets", "net", "show", "getp", "gets", "loadrt", "loadusr", "addf", "start", "stop"]) {
|
|
|
|
|
assert.equal(commandScriptFixtureReport.coveredActions.includes(action), true);
|
|
|
|
|
}
|
|
|
|
|
assert.equal(virtualHalRuntime.getCommandScriptFixtureReport().complete, true);
|
|
|
|
|
const steppedVirtualHal = stepVirtualHalMotion(virtualHalRuntime.getState(), {
|
|
|
|
|
target: { x: 3 },
|
|
|
|
|
maxVelocity: 10,
|
|
|
|
|
@@ -636,7 +684,73 @@ assert.equal(replacementReport.replacements["linuxcnc-realtime-hal"].ready, true
|
|
|
|
|
assert.equal(replacementReport.replacements.halcmd.ready, true);
|
|
|
|
|
assert.equal(replacementReport.replacements["motion-controller"].ready, true);
|
|
|
|
|
assert.equal(replacementReport.hardRealtime, false);
|
|
|
|
|
assert.equal(replacementReport.sourceCompliance.complete, true);
|
|
|
|
|
assert.equal(replacementReport.sourceCompliance.webSimulationSatisfied, true);
|
|
|
|
|
assert.equal(replacementReport.simConfigSourceCoverage.complete, true);
|
|
|
|
|
assert.equal(replacementReport.commandScriptFixtures.complete, true);
|
|
|
|
|
assert.equal(virtualHalRuntime.getSimulationReplacementReport().ready, true);
|
|
|
|
|
const simConfigSourceCoverageReport = createVirtualHalSimConfigSourceCoverageReport({ manifestText: sourceManifestText });
|
|
|
|
|
assert.equal(simConfigSourceCoverageReport.apiName, "linuxcnc-wasm-virtual-hal-sim-config-source-coverage-report");
|
|
|
|
|
assert.equal(simConfigSourceCoverageReport.complete, true);
|
|
|
|
|
assert.equal(simConfigSourceCoverageReport.webSimulationSatisfied, true);
|
|
|
|
|
assert.equal(simConfigSourceCoverageReport.manifestChecked, true);
|
|
|
|
|
assert.equal(simConfigSourceCoverageReport.missingTargets.length, 0);
|
|
|
|
|
assert.equal(simConfigSourceCoverageReport.missingCapabilities.length, 0);
|
|
|
|
|
assert.equal(simConfigSourceCoverageReport.sourceFiles.includes("linuxcnc/configs/sim/axis/foam/axis_foam.ini"), true);
|
|
|
|
|
assert.equal(simConfigSourceCoverageReport.sourceFiles.includes("linuxcnc/configs/sim/qtdragon/qtdragon_xyz/on_abort.ngc"), true);
|
|
|
|
|
assert.equal(simConfigSourceCoverageReport.rows.every(({ sourceDerived }) => sourceDerived), true);
|
|
|
|
|
assert.equal(virtualHalRuntime.getSimConfigSourceCoverageReport({ manifestText: sourceManifestText }).complete, true);
|
|
|
|
|
const sourceComplianceReport = createVirtualHalSourceComplianceReport({ halState: virtualHalRuntime.getState() });
|
|
|
|
|
assert.equal(sourceComplianceReport.apiName, "linuxcnc-wasm-virtual-hal-source-compliance-report");
|
|
|
|
|
assert.equal(sourceComplianceReport.complete, true);
|
|
|
|
|
assert.equal(sourceComplianceReport.webSimulationSatisfied, true);
|
|
|
|
|
assert.equal(sourceComplianceReport.missingCapabilitySources.length, 0);
|
|
|
|
|
assert.equal(sourceComplianceReport.missingFamilySources.length, 0);
|
|
|
|
|
assert.equal(sourceComplianceReport.targetRows.every(({ sourceDerived }) => sourceDerived), true);
|
|
|
|
|
assert.equal(sourceComplianceReport.capabilityRows.every(({ sourceDerived }) => sourceDerived), true);
|
|
|
|
|
assert.equal(sourceComplianceReport.familyRows.every(({ sourceDerived }) => sourceDerived), true);
|
|
|
|
|
assert.equal(sourceComplianceReport.sourceFiles.includes("linuxcnc/bin/axis"), true);
|
|
|
|
|
assert.equal(sourceComplianceReport.sourceFiles.includes("linuxcnc/src/hal/utils/halcmd_commands.cc"), true);
|
|
|
|
|
assert.equal(sourceComplianceReport.sourceFiles.includes("linuxcnc/src/emc/motion/motion.c"), true);
|
|
|
|
|
assert.equal(sourceComplianceReport.sourceFiles.includes("linuxcnc/configs/sim/axis/foam/axis_foam.ini"), true);
|
|
|
|
|
assert.equal(sourceComplianceReport.simConfigSourceCoverage.complete, true);
|
|
|
|
|
assert.equal(sourceComplianceReport.commandScriptFixtures.complete, true);
|
|
|
|
|
assert.equal(virtualHalRuntime.getSourceComplianceReport().complete, true);
|
|
|
|
|
const virtualHalSessionPayload = createVirtualHalSessionPayload(virtualHalRuntime.getState(), {
|
|
|
|
|
simConfigSourceCoverage: simConfigSourceCoverageReport,
|
|
|
|
|
commandScriptFixtures: commandScriptFixtureReport,
|
|
|
|
|
});
|
|
|
|
|
assert.equal(virtualHalSessionPayload.apiName, "linuxcnc-wasm-virtual-hal-session-payload");
|
|
|
|
|
assert.equal(virtualHalSessionPayload.state.hal.signals["x-pos"].value, 1.25);
|
|
|
|
|
assert.equal(virtualHalSessionPayload.sourceCompliance.complete, true);
|
|
|
|
|
assert.equal(virtualHalSessionPayload.simConfigSourceCoverage.complete, true);
|
|
|
|
|
assert.equal(virtualHalSessionPayload.commandScriptFixtures.complete, true);
|
|
|
|
|
const virtualHalSessionSnapshot = createSessionSnapshot(
|
|
|
|
|
"sdk-virtual-hal-session",
|
|
|
|
|
createMachineSessionSnapshotPayload("sdk-mill", {
|
|
|
|
|
gcodeFilename: "demo.ngc",
|
|
|
|
|
virtualHal: virtualHalSessionPayload,
|
|
|
|
|
}),
|
|
|
|
|
{ createdAt: "2026-06-17T00:00:00.000Z" },
|
|
|
|
|
);
|
|
|
|
|
assert.equal(
|
|
|
|
|
restoreVirtualHalStateFromSessionSnapshot(virtualHalSessionSnapshot).hal.nets["x-pos"].includes("axis.x.pos-cmd"),
|
|
|
|
|
true,
|
|
|
|
|
);
|
|
|
|
|
const browserDiagnosticsArtifactValidation = createProjectReleaseBrowserDiagnosticsArtifactValidation({
|
|
|
|
|
apiName: "real-browser-simulation-diagnostics-artifact",
|
|
|
|
|
virtualHal: virtualHalRuntime.getState(),
|
|
|
|
|
virtualHalSimulationReplacement: replacementReport,
|
|
|
|
|
virtualHalSourceCompliance: sourceComplianceReport,
|
|
|
|
|
virtualHalSimConfigSourceCoverage: simConfigSourceCoverageReport,
|
|
|
|
|
virtualHalCommandScriptFixtures: commandScriptFixtureReport,
|
|
|
|
|
});
|
|
|
|
|
assert.equal(browserDiagnosticsArtifactValidation.apiName, "project-release-browser-diagnostics-artifact-validation");
|
|
|
|
|
assert.equal(browserDiagnosticsArtifactValidation.ready, true);
|
|
|
|
|
assert.equal(browserDiagnosticsArtifactValidation.sourceComplianceReady, true);
|
|
|
|
|
assert.equal(browserDiagnosticsArtifactValidation.simConfigSourceCoverageReady, true);
|
|
|
|
|
assert.equal(browserDiagnosticsArtifactValidation.commandScriptFixturesReady, true);
|
|
|
|
|
assert.equal(browserDiagnosticsArtifactValidation.sourceFiles.includes("linuxcnc/src/hal/utils/halcmd_commands.cc"), true);
|
|
|
|
|
const runtimeProjectReport = virtualHalRuntime.getProjectReport({ availableFunctions: VIRTUAL_HAL_WASM_BRIDGE_FUNCTIONS });
|
|
|
|
|
assert.equal(runtimeProjectReport.simulationRuntime.replacesHostRuntimeForSimulation, true);
|
|
|
|
|
assert.equal(runtimeProjectReport.systemCoverage.unclassifiedSnapshotPins.length, 0);
|
|
|
|
|
@@ -705,14 +819,17 @@ assert.equal(
|
|
|
|
|
batchId: "sdk-surface-batch",
|
|
|
|
|
capabilities: batchAcceptanceWorkflow.capabilities,
|
|
|
|
|
observedOutputs: ["project_batch_acceptance_workflow_node_smoke=ok"],
|
|
|
|
|
virtualHalSimConfigSourceCoverage: simConfigSourceCoverageReport,
|
|
|
|
|
}).rows.find(({ id }) => id === "checklist")?.value,
|
|
|
|
|
"3/3 passed",
|
|
|
|
|
"4/4 passed",
|
|
|
|
|
);
|
|
|
|
|
const batchAcceptanceReport = createProjectBatchAcceptanceReport({
|
|
|
|
|
batchId: "sdk-surface-batch",
|
|
|
|
|
capabilities: batchAcceptanceWorkflow.capabilities,
|
|
|
|
|
observedOutputs: ["project_batch_acceptance_workflow_node_smoke=ok"],
|
|
|
|
|
virtualHalSimConfigSourceCoverage: simConfigSourceCoverageReport,
|
|
|
|
|
});
|
|
|
|
|
assert.equal(batchAcceptanceReport.virtualHalSimConfigSourceCoverage.complete, true);
|
|
|
|
|
assert.equal(createProjectBatchAcceptanceReportValidation(batchAcceptanceReport).ready, true);
|
|
|
|
|
assert.equal(
|
|
|
|
|
createProjectBatchAcceptanceReportValidationSummaryViewModel(
|
|
|
|
|
@@ -766,7 +883,7 @@ assert.equal(
|
|
|
|
|
);
|
|
|
|
|
assert.equal(releaseReadinessWaiting.apiName, "project-release-readiness-report");
|
|
|
|
|
assert.equal(releaseReadinessWaiting.ready, false);
|
|
|
|
|
assert.deepEqual(releaseReadinessWaiting.missing, ["project-release-gate"]);
|
|
|
|
|
assert.deepEqual(releaseReadinessWaiting.missing, ["project-release-gate", "virtual-hal-sim-config-source-coverage"]);
|
|
|
|
|
assert.equal(releaseReadinessWaiting.simConfigInventory.unexpectedFail, 0);
|
|
|
|
|
assert.deepEqual(releaseReadinessWaiting.promotedBlockedFamilies, []);
|
|
|
|
|
assert.equal(releaseReadinessWaiting.gateActionPlan.apiName, "project-release-gate-action-plan");
|
|
|
|
|
@@ -778,9 +895,11 @@ assert.equal(
|
|
|
|
|
);
|
|
|
|
|
const releaseReadinessReady = createProjectReleaseReadinessReport({
|
|
|
|
|
observedOutputs: ["project_release_gate=ok"],
|
|
|
|
|
virtualHalSimConfigSourceCoverage: simConfigSourceCoverageReport,
|
|
|
|
|
});
|
|
|
|
|
assert.equal(releaseReadinessReady.ready, true);
|
|
|
|
|
assert.equal(releaseReadinessReady.releaseGate.passed, true);
|
|
|
|
|
assert.equal(releaseReadinessReady.virtualHalSimConfigSourceCoverageReady, true);
|
|
|
|
|
assert.deepEqual(releaseReadinessReady.gateManifest, createProjectReleaseGateManifest());
|
|
|
|
|
assert.equal(releaseReadinessReady.gateResultMatrix.rows.length, createProjectReleaseGateManifest().gateCount);
|
|
|
|
|
assert.equal(createProjectReleaseGateActionPlan({
|
|
|
|
|
@@ -796,6 +915,7 @@ assert.equal(
|
|
|
|
|
);
|
|
|
|
|
const releaseReadinessWithScreenshots = createProjectReleaseReadinessReport({
|
|
|
|
|
gateResults: Object.fromEntries(createProjectReleaseGateManifest().gateIds.map((id) => [id, true])),
|
|
|
|
|
virtualHalSimConfigSourceCoverage: simConfigSourceCoverageReport,
|
|
|
|
|
axisScreenshotArtifacts: ["desktop-preview", "desktop-dro", "mobile-preview", "mobile-mdi"].map((viewportName) => ({
|
|
|
|
|
apiName: "real-browser-simulation-axis-screenshot-artifact",
|
|
|
|
|
artifactVersion: 1,
|
|
|
|
|
@@ -829,6 +949,7 @@ assert.equal(
|
|
|
|
|
);
|
|
|
|
|
const releaseReadinessArtifact = parseProjectReleaseReadinessArtifactJson(JSON.stringify(createProjectReleaseReadinessReport({
|
|
|
|
|
gateResults: Object.fromEntries(createProjectReleaseGateManifest().gateIds.map((id) => [id, true])),
|
|
|
|
|
virtualHalSimConfigSourceCoverage: simConfigSourceCoverageReport,
|
|
|
|
|
})));
|
|
|
|
|
assert.equal(releaseReadinessArtifact.apiName, "project-release-readiness-report");
|
|
|
|
|
const releaseReadinessArtifactValidation = createProjectReleaseReadinessArtifactValidation(releaseReadinessArtifact);
|
|
|
|
|
@@ -848,6 +969,7 @@ assert.deepEqual(releaseReadinessArtifactValidation, {
|
|
|
|
|
gateExecutionSummaryReady: true,
|
|
|
|
|
gateResultMatrixReady: true,
|
|
|
|
|
gateActionPlanReady: true,
|
|
|
|
|
virtualHalSimConfigSourceCoverageReady: true,
|
|
|
|
|
axisScreenshotArtifactSummaryReady: true,
|
|
|
|
|
axisScreenshotArtifactCount: 0,
|
|
|
|
|
blockedRuntimeFamilies: [
|
|
|
|
|
@@ -891,6 +1013,11 @@ assert.deepEqual(releaseReadinessArtifactValidation, {
|
|
|
|
|
label: "Gate action plan",
|
|
|
|
|
value: "ready",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "virtual-hal-sim-config-source-coverage",
|
|
|
|
|
label: "Virtual HAL sim-config source coverage",
|
|
|
|
|
value: "ready",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "axis-screenshot-artifacts",
|
|
|
|
|
label: "AXIS screenshot artifacts",
|
|
|
|
|
@@ -987,6 +1114,7 @@ assert.deepEqual(
|
|
|
|
|
"simConfigInventory.passed",
|
|
|
|
|
"simConfigInventory.skipped",
|
|
|
|
|
"simConfigInventory.unexpectedFail",
|
|
|
|
|
"virtualHalSimConfigSourceCoverage",
|
|
|
|
|
"blockedRuntimeFamilies",
|
|
|
|
|
"gateManifest",
|
|
|
|
|
"gateExecutionManifest",
|
|
|
|
|
|