44 lines
2.0 KiB
JavaScript
44 lines
2.0 KiB
JavaScript
import { test } from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { readLayerXml } from '../../scripts/legacy-layer-to-cocos-prefab.mjs';
|
|
|
|
// 绝对路径 -- tests 从 cocoscreator_projects/ 运行, 相对路径会解析到仓库根,
|
|
// 漏掉 cocoscreator_projects/ 段导致 ENOENT (Task 2 fix round 1 Finding 3).
|
|
const FIXTURE = 'G:/Works/YouleGamesCocosCreator/cocoscreator_projects/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,但提取逻辑应支持
|
|
});
|