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