148 lines
4.6 KiB
TypeScript
148 lines
4.6 KiB
TypeScript
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()
|
||
})
|
||
})
|