import { test } from "node:test"; import assert from "node:assert/strict"; import { scanXmlShallow } from "../out/indexer/shallowScan.js"; test("extracts top-level assets, includes, defines and xi:include", () => { const text = ` Model_SKN.GUN `; const doc = scanXmlShallow(text); assert.equal(doc.errors.length, 0); assert.deepEqual( doc.assets.map((a) => `${a.name}:${a.id}`), ["W3DContainer:Model_SKN", "W3DMesh:Model_SKN.GUN"], ); assert.equal(doc.includes.length, 2); assert.equal(doc.includes[0].type, "all"); assert.equal(doc.includes[0].source, "Art/Model_SKN.w3x"); assert.equal(doc.includes[1].type, "reference"); assert.equal(doc.defines.length, 1); assert.equal(doc.defines[0].name, "MODEL_SCALE"); assert.equal(doc.defines[0].value, "1.0"); assert.equal(doc.rootXiIncludes.length, 1); assert.equal(doc.rootXiIncludes[0].href, "DATA:Includes/Extra.xml"); assert.match(doc.rootXiIncludes[0].xpointer, /xpointer\(/); assert.equal(doc.nestedXiIncludes.length, 0); // Recorded offsets must slice the original text back out. const container = doc.assets[0]; assert.equal(text.slice(container.idValueStart, container.idValueEnd), "Model_SKN"); assert.equal(text.slice(container.start, container.startTagEnd).startsWith(" and / inside quoted values, self-closing tags and comments", () => { const text = ` `; const doc = scanXmlShallow(text); assert.equal(doc.errors.length, 0); assert.deepEqual( doc.assets.map((a) => a.id), ["Weird", "X"], ); }); test("skips CDATA and processing instructions", () => { const text = ` ]]> `; const doc = scanXmlShallow(text); assert.equal(doc.errors.length, 0); assert.deepEqual( doc.assets.map((a) => a.id), ["REAL"], ); }); test("reports unterminated tags and keeps partial results", () => { const doc = scanXmlShallow('= 1); assert.deepEqual( doc.assets.map((a) => a.id), ["A"], ); }); test("nested module payload does not create asset records", () => { // Only top-level elements with an id are assets; the hundreds of thousands // of numeric V/T elements inside a mesh are not. const doc = scanXmlShallow(` `); assert.deepEqual( doc.assets.map((a) => a.id), ["MESH"], ); }); test("distinguishes root-level and nested xi:include", () => { const doc = scanXmlShallow(` `); assert.deepEqual( doc.rootXiIncludes.map((x) => x.href), ["DATA:Top.xml"], ); assert.deepEqual( doc.nestedXiIncludes.map((x) => x.href), ["DATA:Nested.xml"], ); });