first commit
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
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);
|
||||
});
|
||||
Reference in New Issue
Block a user