62 lines
2.0 KiB
JavaScript
62 lines
2.0 KiB
JavaScript
import { test } from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import { parseManifest } from "../out/indexer/manifestParser.js";
|
|
|
|
function u32(v) {
|
|
const b = Buffer.alloc(4);
|
|
b.writeUInt32LE(v >>> 0);
|
|
return b;
|
|
}
|
|
function u16(v) {
|
|
const b = Buffer.alloc(2);
|
|
b.writeUInt16LE(v >>> 0);
|
|
return b;
|
|
}
|
|
|
|
test("parses a minimal version 5 manifest", () => {
|
|
const name = Buffer.from("VanillaTank\0", "ascii");
|
|
const src = Buffer.from("DATA:globaldata/armor.xml\0", "ascii");
|
|
const parts = [
|
|
Buffer.from([0, 1]), // isBigEndian=false, isLinked=true (one byte each)
|
|
u16(5), // version
|
|
u32(0x1234), // streamChecksum
|
|
u32(0), // allTypesHash
|
|
u32(1), // assetCount
|
|
u32(0), // totalInstanceDataSize
|
|
u32(0), // maxInstanceChunkSize
|
|
u32(0), // maxRelocationChunkSize
|
|
u32(0), // maxImportsChunkSize
|
|
u32(0), // assetReferenceBufferSize
|
|
u32(0), // referencedManifestNameBufferSize
|
|
u32(name.length), // assetNameBufferSize
|
|
u32(src.length), // sourceFileNameBufferSize
|
|
// one asset entry (version 5 = 44 bytes, no tokenized flag)
|
|
u32(0x942fff2d), // typeId (GameObject)
|
|
u32(0), // instanceId
|
|
u32(0), // typeHash
|
|
u32(0), // instanceHash
|
|
u32(0), // assetReferenceOffset
|
|
u32(0), // assetReferenceCount
|
|
u32(0), // nameOffset
|
|
u32(0), // sourceFileNameOffset
|
|
u32(0), // instanceDataSize
|
|
u32(0), // relocationDataSize
|
|
u32(0), // importsDataSize
|
|
name,
|
|
src,
|
|
];
|
|
const info = parseManifest(new Uint8Array(Buffer.concat(parts)));
|
|
assert.equal(info.version, 5);
|
|
assert.equal(info.assetCount, 1);
|
|
assert.equal(info.assets.length, 1);
|
|
assert.equal(info.assets[0].name, "VanillaTank");
|
|
assert.equal(info.assets[0].typeName, "GameObject");
|
|
assert.equal(info.assets[0].sourceFileName, "DATA:globaldata/armor.xml");
|
|
});
|
|
|
|
test("reports an error for garbage input", () => {
|
|
const info = parseManifest(new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]));
|
|
assert.ok(info.error);
|
|
assert.equal(info.assets.length, 0);
|
|
});
|