test(editor): cover multi-duplicate selection undo state

This commit is contained in:
ayuan9957 2026-06-23 22:29:16 +08:00
parent a265f32ed6
commit 9b520f6b53

View File

@ -462,6 +462,25 @@ void MetaCoreTestHierarchyEditingCommandsDirtyAndUndo() {
MetaCoreExpect(editorContext.GetSelectedObjectIds() == multiReparentSelection, "Redo multi ReparentSelection should restore selection list"); MetaCoreExpect(editorContext.GetSelectedObjectIds() == multiReparentSelection, "Redo multi ReparentSelection should restore selection list");
MetaCoreExpect(scenePersistenceService->SaveCurrentScene(editorContext), "Hierarchy command scene should save after multi-reparent"); MetaCoreExpect(scenePersistenceService->SaveCurrentScene(editorContext), "Hierarchy command scene should save after multi-reparent");
const std::size_t countBeforeMultiDuplicate = scene.GetGameObjects().size();
MetaCoreExpect(clipboardService->DuplicateSelection(editorContext), "DuplicateSelection command should duplicate multiple selected objects");
const std::vector<MetaCore::MetaCoreId> duplicatedMultiSelection = editorContext.GetSelectedObjectIds();
MetaCoreExpect(scene.GetGameObjects().size() > countBeforeMultiDuplicate, "DuplicateSelection should add multiple selected objects");
MetaCoreExpect(duplicatedMultiSelection.size() == multiReparentSelection.size(), "DuplicateSelection should select each duplicated root object");
MetaCoreExpect(editorContext.GetActiveObjectId() == duplicatedMultiSelection.back(), "DuplicateSelection should make the last duplicated object active");
MetaCoreExpect(duplicatedMultiSelection != multiReparentSelection, "DuplicateSelection should move selection to duplicated objects");
MetaCoreExpect(editorContext.UndoCommand(), "Undo multi DuplicateSelection should succeed");
MetaCoreExpect(scene.GetGameObjects().size() == countBeforeMultiDuplicate, "Undo multi DuplicateSelection should restore object count");
MetaCoreExpect(editorContext.GetSelectedObjectIds() == multiReparentSelection, "Undo multi DuplicateSelection should restore source selection list");
MetaCoreExpect(editorContext.GetActiveObjectId() == *multiReparentSecondId, "Undo multi DuplicateSelection should restore source active object");
MetaCoreExpect(!scenePersistenceService->IsSceneDirty(), "Undo multi DuplicateSelection should restore clean baseline");
MetaCoreExpect(editorContext.RedoCommand(), "Redo multi DuplicateSelection should succeed");
MetaCoreExpect(scene.GetGameObjects().size() > countBeforeMultiDuplicate, "Redo multi DuplicateSelection should add duplicated objects again");
MetaCoreExpect(editorContext.GetSelectedObjectIds() == duplicatedMultiSelection, "Redo multi DuplicateSelection should restore duplicated selection list");
MetaCoreExpect(editorContext.GetActiveObjectId() == duplicatedMultiSelection.back(), "Redo multi DuplicateSelection should restore duplicated active object");
MetaCoreExpect(scenePersistenceService->SaveCurrentScene(editorContext), "Hierarchy command scene should save after multi-duplicate");
editorContext.SelectOnly(*createdId); editorContext.SelectOnly(*createdId);
const std::size_t countBeforeDuplicate = scene.GetGameObjects().size(); const std::size_t countBeforeDuplicate = scene.GetGameObjects().size();
MetaCoreExpect(clipboardService->DuplicateSelection(editorContext), "DuplicateSelection command should duplicate selected object"); MetaCoreExpect(clipboardService->DuplicateSelection(editorContext), "DuplicateSelection command should duplicate selected object");