import { TreeAction } from "../../src/UI/Components/ToolBar/Layer/State/Action"; import { LayerStore } from "../../src/UI/Components/ToolBar/Layer/State/Store"; import type { ILayerNode } from "../../src/UI/Components/ToolBar/Layer/State/Type"; import { LayerAPI } from "../../src/UI/Components/ToolBar/Layer/layerAPI"; // 测试命令(用于复制):npm run test -- Layer.test.ts test("添加图层", () => { const layerStore = LayerStore.GetInstance(); layerStore.Init(); const layerAPI = new LayerAPI(layerStore); layerAPI.AppendFile(); expect(layerStore.data).toEqual([ { name: "默认", isCurrent: false, isOff: false, isLock: false, colorIndex: 7, visible: true, selected: false, changeable: false }, { name: "图层1", isCurrent: true, isOff: false, isLock: false, colorIndex: 1, visible: true, selected: false, changeable: false } ]); expect(layerStore.currentLayer).toEqual(layerStore.data.at(-1)); }); test("添加组", () => { const layerStore = LayerStore.GetInstance(); layerStore.Init(); const layerAPI = new LayerAPI(layerStore); layerAPI.AppendFolder(); expect(layerStore.data).toEqual([ { name: "默认", isCurrent: true, isOff: false, isLock: false, colorIndex: 7, visible: true, selected: false, changeable: false }, { name: "组1", children: [], isOff: false, isLock: false, visible: true, selected: false, changeable: false, expanded: true } ]); }); test("组里添加图层", () => { const layerStore = LayerStore.GetInstance(); layerStore.Init(); const layerAPI = new LayerAPI(layerStore); const folder = layerAPI.AppendFolder(); folder.selected = true; const file = layerAPI.AppendFile(); folder.selected = false; expect(layerStore.data).toEqual([ { name: "默认", isCurrent: false, isOff: false, isLock: false, colorIndex: 7, visible: true, selected: false, changeable: false }, { name: "组1", isOff: false, isLock: false, visible: true, selected: false, changeable: false, expanded: true, children: [ { name: "图层1", isCurrent: true, isOff: false, isLock: false, colorIndex: 1, visible: true, selected: false, changeable: false } ] } ]); expect(layerStore.currentLayer).toEqual(file); }); test("组里添加组", () => { const layerStore = LayerStore.GetInstance(); layerStore.Init(); const layerAPI = new LayerAPI(layerStore); const folder = layerAPI.AppendFolder(); folder.selected = true; layerAPI.AppendFolder(); folder.selected = false; expect(layerStore.data).toEqual([ { name: "默认", isCurrent: true, isOff: false, isLock: false, colorIndex: 7, visible: true, selected: false, changeable: false }, { name: "组1", isOff: false, isLock: false, visible: true, selected: false, changeable: false, expanded: true, children: [ { name: "组2", isOff: false, isLock: false, visible: true, selected: false, changeable: false, expanded: true, children: [] } ] } ]); expect(layerStore.currentLayer).toBe(layerStore.data[0]); }); test("删除图层", () => { const layerStore = LayerStore.GetInstance(); layerStore.Init(); const layerAPI = new LayerAPI(layerStore); const file = layerAPI.AppendFile(); layerAPI.RemoveFile(file); expect(layerStore.data).toEqual([ { name: "默认", isCurrent: true, isOff: false, isLock: false, colorIndex: 7, visible: true, selected: false, changeable: false } ]); expect(layerStore.currentLayer).toBe(layerStore.data[0]); }); test("删除组", () => { const layerStore = LayerStore.GetInstance(); layerStore.Init(); const layerAPI = new LayerAPI(layerStore); const folder = layerAPI.AppendFolder(); layerAPI.RemoveFolder(folder); expect(layerStore.data).toEqual([ { name: "默认", isCurrent: true, isOff: false, isLock: false, colorIndex: 7, visible: true, selected: false, changeable: false } ]); expect(layerStore.currentLayer).toBe(layerStore.data[0]); }); test("删除组(组内有图层)", () => { const layerStore = LayerStore.GetInstance(); layerStore.Init(); const layerAPI = new LayerAPI(layerStore); const folder = layerAPI.AppendFolder(); folder.selected = true; layerAPI.AppendFile(); folder.selected = false; layerAPI.RemoveFolder(folder); expect(layerStore.data).toEqual([ { name: "默认", isCurrent: true, isOff: false, isLock: false, colorIndex: 7, visible: true, selected: false, changeable: false } ]); expect(layerStore.currentLayer).toBe(layerStore.data[0]); }); test("隐藏图层", () => { const layerStore = LayerStore.GetInstance(); layerStore.Init(); const layerAPI = new LayerAPI(layerStore); const file = layerAPI.AppendFile(); layerAPI.UpdateShowFile(file, true); expect(layerStore.data).toEqual([ { name: "默认", isCurrent: false, isOff: false, isLock: false, colorIndex: 7, visible: true, selected: false, changeable: false }, { name: "图层1", isCurrent: true, isOff: true, isLock: false, colorIndex: 1, visible: true, selected: false, changeable: false } ]); expect(layerStore.currentLayer).toEqual(layerStore.data.at(-1)); }); test("隐藏组(组内有图层)", () => { const layerStore = LayerStore.GetInstance(); layerStore.Init(); const layerAPI = new LayerAPI(layerStore); const folder = layerAPI.AppendFolder(); folder.selected = true; const file = layerAPI.AppendFile(); folder.selected = false; layerAPI.UpdateShowFolder(folder, true); expect(layerStore.data).toEqual([ { name: "默认", isCurrent: false, isOff: false, isLock: false, colorIndex: 7, visible: true, selected: false, changeable: false }, { name: "组1", isOff: true, isLock: false, visible: true, selected: false, changeable: false, expanded: true, children: [ { name: "图层1", isCurrent: true, isOff: true, isLock: false, colorIndex: 1, visible: true, selected: false, changeable: false } ] } ]); expect(layerStore.currentLayer).toEqual(file); }); test("锁定图层", () => { const layerStore = LayerStore.GetInstance(); layerStore.Init(); const layerAPI = new LayerAPI(layerStore); const file = layerAPI.AppendFile(); layerAPI.UpdateLockFile(file, !file.isLock); expect(layerStore.data).toEqual([ { name: "默认", isCurrent: false, isOff: false, isLock: false, colorIndex: 7, visible: true, selected: false, changeable: false }, { name: "图层1", isCurrent: true, isOff: false, isLock: true, colorIndex: 1, visible: true, selected: false, changeable: false } ]); expect(layerStore.currentLayer).toEqual(layerStore.data.at(-1)); }); test("锁定组(组内有图层)", () => { const layerStore = LayerStore.GetInstance(); layerStore.Init(); const layerAPI = new LayerAPI(layerStore); const folder = layerAPI.AppendFolder(); folder.selected = true; const file = layerAPI.AppendFile(); folder.selected = false; layerAPI.UpdateLockFolder(folder, !folder.isLock); expect(layerStore.data).toEqual([ { name: "默认", isCurrent: false, isOff: false, isLock: false, colorIndex: 7, visible: true, selected: false, changeable: false }, { name: "组1", isOff: false, isLock: true, visible: true, selected: false, changeable: false, expanded: true, children: [ { name: "图层1", isCurrent: true, isOff: false, isLock: true, colorIndex: 1, visible: true, selected: false, changeable: false } ] } ]); expect(layerStore.currentLayer).toEqual(file); }); test("双重锁定表解锁", () => { const layerStore = LayerStore.GetInstance(); layerStore.Init(); const layerAPI = new LayerAPI(layerStore); const file = layerAPI.AppendFile(); layerAPI.UpdateLockFile(file, !file.isLock); layerAPI.UpdateLockFile(file, !file.isLock); expect(layerStore.data).toEqual([ { name: "默认", isCurrent: false, isOff: false, isLock: false, colorIndex: 7, visible: true, selected: false, changeable: false }, { name: "图层1", isCurrent: true, isOff: false, isLock: false, colorIndex: 1, visible: true, selected: false, changeable: false } ]); expect(layerStore.currentLayer).toEqual(layerStore.data.at(-1)); }); test("设置颜色", () => { const layerStore = LayerStore.GetInstance(); layerStore.Init(); const layerAPI = new LayerAPI(layerStore); const file = layerAPI.AppendFile(); layerAPI.UpdateColorFile(file, 2); expect(layerStore.data).toEqual([ { name: "默认", isCurrent: false, isOff: false, isLock: false, colorIndex: 7, visible: true, selected: false, changeable: false }, { name: "图层1", isCurrent: true, isOff: false, isLock: false, colorIndex: 2, visible: true, selected: false, changeable: false } ]); expect(layerStore.currentLayer).toEqual(layerStore.data.at(-1)); }); test("设置当前图层", () => { const layerStore = LayerStore.GetInstance(); layerStore.Init(); const layerAPI = new LayerAPI(layerStore); layerAPI.AppendFile(); const normal = layerStore.data[0]; layerAPI.SetCurrentFile(normal); expect(layerStore.data).toEqual([ { name: "默认", isCurrent: true, isOff: false, isLock: false, colorIndex: 7, visible: true, selected: false, changeable: false }, { name: "图层1", isCurrent: false, isOff: false, isLock: false, colorIndex: 1, visible: true, selected: false, changeable: false } ]); expect(layerStore.currentLayer).toEqual(normal); }); test("重命名图层", () => { const layerStore = LayerStore.GetInstance(); layerStore.Init(); const layerAPI = new LayerAPI(layerStore); const file = layerAPI.AppendFile(); layerAPI.RenameNode(file, "新图层1"); expect(layerStore.data).toEqual([ { name: "默认", isCurrent: false, isOff: false, isLock: false, colorIndex: 7, visible: true, selected: false, changeable: false }, { name: "新图层1", isCurrent: true, isOff: false, isLock: false, colorIndex: 1, visible: true, selected: false, changeable: false } ]); expect(layerStore.currentLayer).toEqual(file); }); test("重命名组", () => { const layerStore = LayerStore.GetInstance(); layerStore.Init(); const layerAPI = new LayerAPI(layerStore); const folder = layerAPI.AppendFolder(); layerAPI.RenameNode(folder, "新组1"); expect(layerStore.data).toEqual([ { name: "默认", isCurrent: true, isOff: false, isLock: false, colorIndex: 7, visible: true, selected: false, changeable: false }, { name: "新组1", children: [], isOff: false, isLock: false, visible: true, selected: false, changeable: false, expanded: true } ]); expect(layerStore.currentLayer).toBe(layerStore.data[0]); }); test("可以移动序列", () => { const layerStore = LayerStore.GetInstance(); layerStore.Init(); const layerAPI = new LayerAPI(layerStore); const file = layerAPI.AppendFile(); const folder = layerAPI.AppendFolder(); folder.selected = true; layerAPI.AppendFile(); folder.selected = false; const node = TreeAction.FindNode(layerStore.data, (item: ILayerNode) => item.name === file.name) as ILayerNode; node.selected = true; const nodes = TreeAction.FilterNodes(layerStore.data, (item: ILayerNode) => !item.selected); expect(nodes).toEqual([ { name: "默认", isCurrent: false, isOff: false, isLock: false, colorIndex: 7, visible: true, selected: false, changeable: false }, { name: "组1", isOff: false, isLock: false, visible: true, selected: false, changeable: false, expanded: true, children: [ { name: "图层2", isCurrent: true, isOff: false, isLock: false, colorIndex: 2, visible: true, selected: false, changeable: false } ] }, ]); }); test("搜索组", () => { const layerStore = LayerStore.GetInstance(); layerStore.Init(); const layerAPI = new LayerAPI(layerStore); const folder = layerAPI.AppendFolder(); folder.selected = true; layerAPI.AppendFile(); folder.selected = false; const nodes = TreeAction.FindFlatNodes(layerStore.data, (node: ILayerNode) => node.name === "组1"); expect(nodes).toEqual([ { name: "组1", isOff: false, isLock: false, visible: true, selected: false, changeable: false, expanded: true, children: [ { name: "图层1", isCurrent: true, isOff: false, isLock: false, colorIndex: 1, visible: true, selected: false, changeable: false } ] }, ]); }); const log = () => { const layerStore = LayerStore.GetInstance(); console.group("View层数据"); console.log(JSON.parse(JSON.stringify(layerStore.data))); const current = TreeAction.FindNode(layerStore.data, (node: ILayerNode) => node.isCurrent); if (current !== layerStore.currentLayer) console.log(`Error: ${current.name} `); console.groupEnd(); };