furniture-3d-system-Wu/tests/lib/panel-node-alias.test.ts

148 lines
4.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { describe, expect, it } from "@jest/globals"
import {
buildPanelNodeNameAliasMap,
normalizeNodeNameForMatch,
resolvePanelNodeNameFromAlias,
} from "@/lib/panel-node-alias"
describe("panel-node-alias", () => {
it("应按真实编号解析 Board_n / Panel_n,不依赖面板数组顺序", () => {
const panelAliasMap = buildPanelNodeNameAliasMap([
{ gltfNodeName: "panel_003", code: "CAD_panel_003", name: "竖隔板" },
{ gltfNodeName: "panel_001", code: "CAD_panel_001", name: "竖隔板" },
{ gltfNodeName: "panel_000", code: "CAD_panel_000", name: "横隔板" },
])
expect(
resolvePanelNodeNameFromAlias(panelAliasMap, "Board_1", {
allowRawFallback: false,
}),
).toBe("panel_001")
expect(
resolvePanelNodeNameFromAlias(panelAliasMap, "Panel_1", {
allowRawFallback: false,
}),
).toBe("panel_001")
expect(
resolvePanelNodeNameFromAlias(panelAliasMap, "Board_3", {
allowRawFallback: false,
}),
).toBe("panel_003")
expect(
resolvePanelNodeNameFromAlias(panelAliasMap, "Board_0", {
allowRawFallback: false,
}),
).toBe("panel_000")
})
it("当 canonical 不含 0 号面板时,别名层不应做顺序兜底映射", () => {
const panelAliasMap = buildPanelNodeNameAliasMap([
{ gltfNodeName: "panel_003", code: "CAD_panel_003", name: "竖隔板" },
{ gltfNodeName: "panel_001", code: "CAD_panel_001", name: "横隔板" },
])
expect(
resolvePanelNodeNameFromAlias(panelAliasMap, "Board_1", {
allowRawFallback: false,
}),
).toBe("panel_001")
expect(
resolvePanelNodeNameFromAlias(panelAliasMap, "Board_2", {
allowRawFallback: false,
}),
).toBeNull()
})
it("应兼容 cad_ 前缀与去前缀名称互相解析", () => {
const panelAliasMap = buildPanelNodeNameAliasMap([
{
gltfNodeName: "cad_panel_left",
code: "cad_panel_left",
name: "Panel Left",
},
])
expect(
resolvePanelNodeNameFromAlias(panelAliasMap, "cad_panel_left", {
allowRawFallback: false,
}),
).toBe("cad_panel_left")
expect(
resolvePanelNodeNameFromAlias(panelAliasMap, "panel_left", {
allowRawFallback: false,
}),
).toBe("cad_panel_left")
})
it("名称规范化应去除 cad_ 前缀并忽略大小写与分隔符", () => {
expect(normalizeNodeNameForMatch(" CAD_Panel-01 ")).toBe("panel01")
expect(normalizeNodeNameForMatch("Panel_01")).toBe("panel01")
})
it("模糊匹配时应避免 panel_10 误映射到 panel_1", () => {
const panelAliasMap = buildPanelNodeNameAliasMap([
{ gltfNodeName: "cad_panel_1", code: "P-001", name: "侧板1" },
{ gltfNodeName: "cad_panel_10", code: "P-010", name: "侧板10" },
])
expect(
resolvePanelNodeNameFromAlias(panelAliasMap, "panel_10_mesh", {
allowRawFallback: false,
}),
).toBe("cad_panel_10")
})
it("仅存在 panel_1 时,panel_10 查询不应误命中", () => {
const panelAliasMap = buildPanelNodeNameAliasMap([
{ gltfNodeName: "cad_panel_1", code: "P-001", name: "Panel" },
])
expect(
resolvePanelNodeNameFromAlias(panelAliasMap, "panel_10_mesh", {
allowRawFallback: false,
}),
).toBeNull()
})
it("应兼容 panel_001_2 这类带子编号节点并映射到主面板", () => {
const panelAliasMap = buildPanelNodeNameAliasMap([
{ gltfNodeName: "panel_001", code: "CAD_panel_001", name: "竖隔板" },
{ gltfNodeName: "panel_003", code: "CAD_panel_003", name: "横隔板" },
])
expect(
resolvePanelNodeNameFromAlias(panelAliasMap, "panel_001_2", {
allowRawFallback: false,
}),
).toBe("panel_001")
expect(
resolvePanelNodeNameFromAlias(panelAliasMap, "board_001_5", {
allowRawFallback: false,
}),
).toBe("panel_001")
})
it("显示编号别名不应覆盖真实 canonical panel id", () => {
const panelAliasMap = buildPanelNodeNameAliasMap([
{ gltfNodeName: "panel_008", code: "CAD_009", name: "层板 9" },
{ gltfNodeName: "panel_009", code: "CAD_010", name: "顶板 10" },
])
expect(
resolvePanelNodeNameFromAlias(panelAliasMap, "CAD_009", {
allowRawFallback: false,
}),
).toBe("panel_008")
expect(
resolvePanelNodeNameFromAlias(panelAliasMap, "panel_009", {
allowRawFallback: false,
}),
).toBe("panel_009")
expect(
resolvePanelNodeNameFromAlias(panelAliasMap, "Board_10", {
allowRawFallback: false,
}),
).toBeNull()
})
})