fdm/tests/full-codec.test.js

35 lines
1.7 KiB
JavaScript

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), /校验失败/);
});