import { test } from 'node:test'; import assert from 'node:assert/strict'; import { join } from 'node:path'; import { readLayerXml } from '../../scripts/legacy-layer-to-cocos-prefab.mjs'; import { ROOT } from '../../scripts/lib/paths.mjs'; const FIXTURE = join(ROOT, 'framework-tests', 'legacy-layer-migration', 'fixtures', 'Layer00002.xml'); test('readLayerXml 解码 UTF-8 并提取 Layer00002 字段', () => { const layer = readLayerXml(FIXTURE); assert.equal(layer.layerId, '2'); assert.equal(layer.layerName, 'Login_Layer'); assert.equal(layer.spirits.length, 18, 'Login_Layer 有 18 个 Spirit'); }); test('Spirit 字段完整提取(含中文名)', () => { const layer = readLayerXml(FIXTURE); const spirit405 = layer.spirits.find(s => s.id === '405'); assert.ok(spirit405, 'Spirit id=405 应存在'); assert.equal(spirit405.type, '0'); // Sprite assert.equal(spirit405.x, '734'); assert.equal(spirit405.y, '143'); assert.equal(spirit405.w, '59'); assert.equal(spirit405.h, '148'); assert.equal(spirit405.group, '2'); // 验证 UTF-8 中文名解码: spirit id=2 在 fixture 中实际 Name="微信登录背景". // 注: brief 原版用 spirit id=405 + /渠道/ 验证中文, 但 fixture 里 405 的 Name 是 // "Spirit405" (无中文), 故改用含中文的 spirit id=2 验证 UTF-8 解码. const spirit2 = layer.spirits.find(s => s.id === '2'); assert.ok(spirit2, 'Spirit id=2 应存在'); assert.match(spirit2.name, /微信/); // UTF-8 解码后中文名应正常 }); test('BelongGroupID 提取(group=0 节点也存在)', () => { const layer = readLayerXml(FIXTURE); for (const s of layer.spirits) { assert.ok(s.group !== undefined, `Spirit ${s.id} (${s.name}) 应有 group 字段`); } const g0 = layer.spirits.filter(s => s.group === '0'); assert.ok(g0.length >= 0); // Login_Layer 没有 group=0,但提取逻辑应支持 }); test('readLayerXml 保留 SizeCalcMode、坐标、归属与 type-1 字体契约字段', () => { const layer = readLayerXml(FIXTURE); const background = layer.spirits.find(s => s.id === '2'); const text = layer.spirits.find(s => s.id === '285'); assert.ok(background); assert.ok(text); assert.equal(background.text, undefined); assert.equal(background.sizeCalcMode, '2'); assert.equal(background.sizeParentID, '20'); assert.equal(background.widthCalcMode, '1'); assert.equal(background.heightCalcMode, '1'); assert.equal(background.sizeRelaWidth, '10000'); assert.equal(background.sizeRelaHeight, '10000'); assert.equal(background.coordSelfPos, '0'); assert.equal(background.coordRelaX, '0'); assert.equal(background.coordRelaY, '0'); assert.equal(background.coordParentID, '0'); assert.equal(background.belongLayerID, '2'); assert.equal(text.text, '版本显示'); assert.equal(text.fontSize, '18'); assert.equal(text.fontColor, '16777215'); assert.equal(text.alignHorz, '0'); assert.equal(text.alignVert, '0'); assert.equal(text.fontBold, '0'); assert.equal(text.wordWrap, '0'); assert.equal(text.lineSpace, '0'); assert.equal(text.rowSpace, undefined); });