52 lines
2.4 KiB
JavaScript
52 lines
2.4 KiB
JavaScript
import crypto from "node:crypto";
|
|
import fs from "node:fs";
|
|
import path from "node:path";
|
|
|
|
const root = path.resolve(import.meta.dirname, "../..");
|
|
const fixtureRoot = path.resolve(process.env.M12_PLY_NEGATIVE_OUTPUT ?? path.join(root, "tests/files/web/m12_ply_negative_v1"));
|
|
const reportPath = path.resolve(process.env.M12_PLY_NEGATIVE_REPORT ?? path.join(root, "tests/golden/M12-07I/negative-report.json"));
|
|
const sha256 = (bytes) => crypto.createHash("sha256").update(bytes).digest("hex");
|
|
|
|
function write(name, content) {
|
|
const bytes = Buffer.isBuffer(content) ? content : Buffer.from(content, "utf8");
|
|
fs.writeFileSync(path.join(fixtureRoot, name), bytes);
|
|
return { name, byteLength: bytes.byteLength, sha256: sha256(bytes) };
|
|
}
|
|
|
|
function bigEndian() {
|
|
const header = "ply\nformat binary_big_endian 1.0\nelement vertex 1\nproperty float x\nproperty float y\nproperty float z\nelement face 0\nproperty list uchar uint vertex_indices\nend_header\n";
|
|
const data = Buffer.alloc(12);
|
|
data.writeFloatBE(0, 0); data.writeFloatBE(0, 4); data.writeFloatBE(0, 8);
|
|
return Buffer.concat([Buffer.from(header, "ascii"), data]);
|
|
}
|
|
|
|
function malformedList() {
|
|
return "ply\nformat ascii 1.0\nelement vertex 3\nproperty float x\nproperty float y\nproperty float z\nelement face 1\nproperty list uchar uint vertex_indices\nend_header\n0 0 0\n1 0 0\n0 0 1\n3 0 1\n";
|
|
}
|
|
|
|
function oversizedCount() {
|
|
return "ply\nformat ascii 1.0\nelement vertex 65537\nproperty float x\nproperty float y\nproperty float z\nelement face 0\nproperty list uchar uint vertex_indices\nend_header\n";
|
|
}
|
|
|
|
fs.mkdirSync(fixtureRoot, { recursive: true });
|
|
const files = [
|
|
write("big-endian.ply", bigEndian()),
|
|
write("malformed-list-ascii.ply", malformedList()),
|
|
write("oversized-count-ascii.ply", oversizedCount()),
|
|
];
|
|
const report = {
|
|
schemaVersion: 1,
|
|
task: "M12-07I",
|
|
operation: "PLY_NEGATIVE_FORMAT_LIST_COUNT",
|
|
cases: [
|
|
{ id: "big-endian", file: "big-endian.ply", expectedCode: "PLY_FORMAT_UNSUPPORTED" },
|
|
{ id: "malformed-list", file: "malformed-list-ascii.ply", expectedCode: "PLY_DATA_TRUNCATED" },
|
|
{ id: "oversized-count", file: "oversized-count-ascii.ply", expectedCode: "PLY_IMPORT_BUDGET_EXCEEDED: vertex" },
|
|
],
|
|
files,
|
|
nextTask: "M12-07J",
|
|
};
|
|
fs.mkdirSync(path.dirname(reportPath), { recursive: true });
|
|
fs.writeFileSync(reportPath, JSON.stringify(report, null, 2) + "\n");
|
|
process.stdout.write(`ply-negative-fixtures-generated cases=${report.cases.length} next=${report.nextTask}\n`);
|