import { test } from "node:test"; import assert from "node:assert/strict"; import { parseXml, LineMap } from "../out/language/xmlParser.js"; import { extractIndexRecords, recordsFromShallow } from "../out/indexer/records.js"; import { scanXmlShallow } from "../out/indexer/shallowScan.js"; test("extractIndexRecords mirrors the walk semantics", () => { const text = ` `; const lineMap = new LineMap(text); const records = extractIndexRecords(parseXml(text), lineMap); assert.deepEqual( records.assets.map((a) => [a.type, a.id, a.line]), [ ["GameObject", "Tank", 10], ["WeaponTemplate", "TankGun", 11], ["GameObject", "Tank2", 13], ], ); assert.deepEqual( records.defines.map((d) => [d.name, d.value]), [["HP", "100"]], ); assert.deepEqual( records.includes.map((i) => [i.type, i.source]), [ ["all", "Units.xml"], ["instance", "Base.xml"], ], ); assert.deepEqual( records.rootXiIncludes.map((x) => [x.href, x.line]), [["DATA:Extra.xml", 12]], ); assert.deepEqual( records.nestedXiIncludes.map((x) => [x.href, x.line]), [["DATA:Nested.xml", 15]], ); }); test("recordsFromShallow converts offsets to 1-based lines", () => { const text = `\n \n`; const lineMap = new LineMap(text); const records = recordsFromShallow(scanXmlShallow(text), lineMap); assert.equal(records.assets.length, 1); assert.equal(records.assets[0].type, "W3DContainer"); assert.equal(records.assets[0].id, "A"); assert.equal(records.assets[0].line, 2); });