You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
WebCAD/__test__/Layer/Layer.test.ts

310 lines
13 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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();
};