From 9b520f6b53372681c59b61ef68afd6cac6e22313 Mon Sep 17 00:00:00 2001 From: ayuan9957 <107920784+ayuan9957@users.noreply.github.com> Date: Tue, 23 Jun 2026 22:29:16 +0800 Subject: [PATCH] test(editor): cover multi-duplicate selection undo state --- tests/MetaCoreSmokeTests.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tests/MetaCoreSmokeTests.cpp b/tests/MetaCoreSmokeTests.cpp index 77d3734..a61b86d 100644 --- a/tests/MetaCoreSmokeTests.cpp +++ b/tests/MetaCoreSmokeTests.cpp @@ -462,6 +462,25 @@ void MetaCoreTestHierarchyEditingCommandsDirtyAndUndo() { MetaCoreExpect(editorContext.GetSelectedObjectIds() == multiReparentSelection, "Redo multi ReparentSelection should restore selection list"); 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 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); const std::size_t countBeforeDuplicate = scene.GetGameObjects().size(); MetaCoreExpect(clipboardService->DuplicateSelection(editorContext), "DuplicateSelection command should duplicate selected object");