import assert from "node:assert/strict"; import crypto from "node:crypto"; import fs from "node:fs"; import path from "node:path"; import { fileURLToPath } from "node:url"; const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../.."); const read = (relativePath) => fs.readFileSync(path.join(root, relativePath)); const sha256 = (value) => crypto.createHash("sha256").update(value).digest("hex"); const manifest = JSON.parse(read("tests/golden/M12-03E/manifest.json")); const desktopReport = JSON.parse(read("tests/golden/M12-03C/desktop-append-report.json")); assert.deepEqual(manifest, { schemaVersion: 1, task: "M12-03E", parentTask: "M12-03D", enablingTask: false, parityStateChange: false, runtime: "BLENDER_5_2_WASM_CHROMIUM", operation: "APPEND", canonicalComparison: "DESKTOP_REPORT_EXACT_AFTER_IMAGE_ROW_NORMALIZATION_AND_SCENEIR_COLORSPACE_DEFAULT", assertions: { transactionCount: 1, revisionDelta: 1, undoRemovesClosure: true, redoRestoresCanonical: true, saveReopenRestoresCanonical: true, }, artifacts: { parentManifest: { path: "tests/golden/M12-03C/manifest.json", sha256: "cbfbd8c919125108334dd24925b9ef8e69880983515e56841e6ead4a2b182aed", }, desktopReport: { path: "tests/golden/M12-03C/desktop-append-report.json", sha256: "b1d7b8b9e832d18d69081f63981062800e0f00f0c9aec025b18274510ed76e2a", }, test: { path: "web/tests/e2e/library-append-main.spec.ts", sha256: "101f67d35c2320da57459f08a59687d769234b910dbd9aaec5a668cee7e0f9f0", }, sourceBlend: { path: "tests/files/web/m12_library_append_v1/m12_append_source.blend", sha256: "5b60d02926efd588a6ca300ba31414cdf37dbc48786c17b383a70319057c0606", }, targetBlend: { path: "tests/files/web/empty.blend", sha256: "9b1ecbcc3d7f8079ee5469de64193ffcaa0a7b01e0f2ac340bbb18aa88734a63", }, }, nextTask: "M12-03F", }); assert.equal(sha256(read(manifest.artifacts.parentManifest.path)), manifest.artifacts.parentManifest.sha256); assert.equal(sha256(read(manifest.artifacts.desktopReport.path)), manifest.artifacts.desktopReport.sha256); assert.equal(sha256(read(manifest.artifacts.sourceBlend.path)), manifest.artifacts.sourceBlend.sha256); assert.equal(sha256(read(manifest.artifacts.targetBlend.path)), manifest.artifacts.targetBlend.sha256); assert.equal(sha256(read(manifest.artifacts.test.path)), manifest.artifacts.test.sha256); assert.equal(desktopReport.task, "M12-03C"); assert.equal(desktopReport.operation, "APPEND"); assert.equal(desktopReport.appendedGraph.geometry.vertices, 4); assert.equal(desktopReport.appendedGraph.geometry.edges, 4); assert.equal(desktopReport.appendedGraph.geometry.polygons, 1); assert.equal(desktopReport.appendedGraph.geometry.loops, 4); assert.equal(desktopReport.appendedGraph.image.pixelFloat32Sha256.length, 64); const source = read(manifest.artifacts.test.path).toString("utf8"); for (const marker of [ "M12-03E keeps append undo/redo/save/reopen", "desktop-append-report.json", "canonicalGraph", "client.applyCommand({ type: \"undo\" })", "client.applyCommand({ type: \"redo\" })", "client.saveBlend()", "reopenedCanonical", "desktopCanonical", ]) assert.ok(source.includes(marker), `M12-03E test marker is missing: ${marker}`); process.stdout.write( `library-main-append-check-ok canonical=${desktopReport.appendedGraph.image.pixelFloat32Sha256} ` + `transaction=${manifest.assertions.transactionCount} undo=removed redo=canonical reopen=canonical next=${manifest.nextTask}\n`, );