补齐 UI 编辑器 activeImageId 与联合适配两条验收断言
- tests/uiEditorPage.test.ts 新增「预览里选择节点不改变左侧选中的界面图」:断言 canvas.selectNode 只改节点选中、不改 hook 暴露的 activeImageId,Inspector 部件切换同理 - tests/previewWorkspaceZoom.test.tsx 新增「进入时按全部树的联合边界适配,选中节点不重新适配」:两棵树横跨 1600 单位时联合适配缩放必须小于单棵,选中态重渲染后缩放不变;夹具补齐第二棵树的界面图(否则不进联合边界) - 变异验证:selectNode 里加 setActiveImageId 只红那条新用例(1 failed / 36 passed);allBounds 接 slice(0,1) 只红联合适配用例的第一处断言(1 failed / 8 passed) - 里程碑勾选第 5、6 条验收,剩余未覆盖条目收敛到 1 条(拖动进 undo/redo 与保存恢复)
This commit is contained in:
@@ -248,4 +248,43 @@ describe('PreviewWorkspace quick zoom', () => {
|
||||
}),
|
||||
).toBe(true);
|
||||
});
|
||||
it('进入时按全部树的联合边界适配,选中节点不重新适配', () => {
|
||||
const secondRoot: UiNode = {
|
||||
...structuredClone(root),
|
||||
id: 'root-2',
|
||||
offset: { min: [1600, 0], max: [2800, 800] },
|
||||
};
|
||||
const twoTrees = [
|
||||
{ src_ui_design: 'page-1', root },
|
||||
{ src_ui_design: 'page-2', root: secondRoot },
|
||||
];
|
||||
// 第二棵树的界面图必须也在投影里,否则它不会进入联合边界(`allBounds` 只收集尺寸有效的树)。
|
||||
const twoTreeCanvas = {
|
||||
uiTrees: twoTrees,
|
||||
images: { 'page-1': activeImage, 'page-2': activeImage },
|
||||
previewUrls: {
|
||||
'page-1': 'data:image/png;base64,',
|
||||
'page-2': 'data:image/png;base64,',
|
||||
},
|
||||
};
|
||||
|
||||
const single = render(<PreviewWorkspace canvas={createCanvas()} />);
|
||||
const singleScale = logicalViewportScale(single.container);
|
||||
single.unmount();
|
||||
|
||||
const joint = render(
|
||||
<PreviewWorkspace canvas={createCanvas(twoTreeCanvas)} />,
|
||||
);
|
||||
const jointScale = logicalViewportScale(joint.container);
|
||||
// 联合边界(两棵树横跨 1600 单位)明显比单棵树宽:首次进入必须适配全部树。
|
||||
expect(jointScale).toBeLessThan(singleScale);
|
||||
|
||||
// 选中另一棵树的节点只改选中态:不允许顺带重新适配(那会把用户当前视口顶掉)。
|
||||
joint.rerender(
|
||||
<PreviewWorkspace
|
||||
canvas={createCanvas({ ...twoTreeCanvas, selectedNodeId: 'root-2' })}
|
||||
/>,
|
||||
);
|
||||
expect(logicalViewportScale(joint.container)).toBe(jointScale);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1179,4 +1179,22 @@ describe('UiEditorPage', () => {
|
||||
expect(component.checked).toBe(true);
|
||||
expect(origin.checked).toBe(true);
|
||||
});
|
||||
it('预览里选择节点不改变左侧选中的界面图', async () => {
|
||||
const hook = await renderLoadedSession(
|
||||
stateWithPages(['page-1', 'page-2']),
|
||||
);
|
||||
|
||||
// 左侧图片选择维护 activeImageId。
|
||||
act(() => hook.result.current.input.selectDesignImage('page-2'));
|
||||
expect(hook.result.current.canvas.activeImageId).toBe('page-2');
|
||||
|
||||
// 预览里选中另一棵树的节点:只改节点选中,不能反过来改掉左侧选中的界面图。
|
||||
act(() => hook.result.current.canvas.selectNode('page-1-root'));
|
||||
expect(hook.result.current.canvas.selectedNodeId).toBe('page-1-root');
|
||||
expect(hook.result.current.canvas.activeImageId).toBe('page-2');
|
||||
|
||||
// Inspector 的部件切换同样不改左侧选中的界面图。
|
||||
act(() => hook.result.current.input.selectSprite('panel'));
|
||||
expect(hook.result.current.canvas.activeImageId).toBe('page-2');
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user