Merge pull request #21975 from pieterhijma/transaction-rename-property

Core: Add redo/undo to property rename
This commit is contained in:
Chris Hennes
2025-06-30 10:36:26 -05:00
committed by GitHub
8 changed files with 166 additions and 7 deletions

View File

@@ -28,6 +28,7 @@
#include <Base/Interpreter.h>
#include <App/Application.h>
#include <App/AutoTransaction.h>
#include <App/Document.h>
#include <App/Expression.h>
#include <App/ObjectIdentifier.h>
@@ -313,3 +314,74 @@ TEST_F(RenameProperty, updateExpressionDifferentDocument)
EXPECT_EQ(varSet->getDynamicPropertyByName("NewName"), prop);
EXPECT_EQ(prop2->getValue(), Value);
}
// Tests whether we can rename a property and undo it
TEST_F(RenameProperty, undoRenameProperty)
{
// Arrange
_doc->setUndoMode(1);
// Act
bool isRenamed = false;
{
App::AutoTransaction transaction("Rename Property");
isRenamed = varSet->renameDynamicProperty(prop, "NewName");
}
// Assert
EXPECT_TRUE(isRenamed);
EXPECT_STREQ(varSet->getPropertyName(prop), "NewName");
EXPECT_EQ(prop->getValue(), Value);
EXPECT_EQ(varSet->getDynamicPropertyByName("Variable"), nullptr);
EXPECT_EQ(varSet->getDynamicPropertyByName("NewName"), prop);
// Act: Undo the rename
bool undone = _doc->undo();
// Assert: The property should be back to its original name and value
EXPECT_TRUE(undone);
EXPECT_STREQ(varSet->getPropertyName(prop), "Variable");
EXPECT_EQ(prop->getValue(), Value);
EXPECT_EQ(varSet->getDynamicPropertyByName("Variable"), prop);
EXPECT_EQ(varSet->getDynamicPropertyByName("NewName"), nullptr);
}
// Tests whether we can rename a property, undo, and redo it
TEST_F(RenameProperty, redoRenameProperty)
{
// Arrange
_doc->setUndoMode(1);
// Act
bool isRenamed = false;
{
App::AutoTransaction transaction("Rename Property");
isRenamed = varSet->renameDynamicProperty(prop, "NewName");
}
// Assert
EXPECT_TRUE(isRenamed);
EXPECT_STREQ(varSet->getPropertyName(prop), "NewName");
EXPECT_EQ(prop->getValue(), Value);
EXPECT_EQ(varSet->getDynamicPropertyByName("Variable"), nullptr);
EXPECT_EQ(varSet->getDynamicPropertyByName("NewName"), prop);
// Act: Undo the rename
bool undone = _doc->undo();
// Assert: The property should be back to its original name and value
EXPECT_TRUE(undone);
EXPECT_STREQ(varSet->getPropertyName(prop), "Variable");
EXPECT_EQ(prop->getValue(), Value);
EXPECT_EQ(varSet->getDynamicPropertyByName("Variable"), prop);
EXPECT_EQ(varSet->getDynamicPropertyByName("NewName"), nullptr);
// Act: Redo the rename
bool redone = _doc->redo();
EXPECT_TRUE(redone);
EXPECT_STREQ(varSet->getPropertyName(prop), "NewName");
EXPECT_EQ(prop->getValue(), Value);
EXPECT_EQ(varSet->getDynamicPropertyByName("Variable"), nullptr);
EXPECT_EQ(varSet->getDynamicPropertyByName("NewName"), prop);
}