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

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