import test from "node:test"; import assert from "node:assert/strict"; import { readFile } from "node:fs/promises"; import { gunzipSync } from "node:zlib"; import { createHash } from "node:crypto"; import { decodePath, indexCommands, commandReader } from "../src/lib/full-codec.js"; const metadata = JSON.parse(await readFile("public/data/stream.json", "utf8")); const base = `public/data/full/${metadata.fullVersion}/`; test("完整无损压缩还原全部路径字节与所有原始运动指令", async () => { const path = await readFile(base + metadata.full.path.file); const commands = await readFile(base + metadata.full.commands.file); assert.equal(path.length, metadata.full.path.bytes); assert.equal(createHash("sha256").update(path).digest("hex"), metadata.full.path.sha256); const decoded = decodePath(gunzipSync(path), metadata.count); const original = await readFile("public/data/print-job.bin"); assert.deepEqual(Buffer.from(decoded.buffer), original); const text = gunzipSync(commands); const offsets = indexCommands(text, metadata.count); const reader = commandReader(decoded, text, offsets); const source = (await readFile("public/data/print-job.gcode", "utf8")).split(/\r?\n/); for (let index = 0; index < metadata.count; index++) { const line = decoded[index * 12 + 11]; assert.equal(reader[line], source[line - 1].trim()); } assert.equal(reader[0], undefined); assert.equal(offsets.length, metadata.count + 1); }); test("拒绝截断路径与缺失指令", () => { assert.throws(() => decodePath(new Uint8Array(1), metadata.count), /校验失败/); assert.throws(() => indexCommands(new TextEncoder().encode("G1 X1\n"), metadata.count), /校验失败/); });