QmlDesigner: Only remove node with position

Extending the test case.

Change-Id: I37255de763262e069c2f9d30b1ce584a0347fbcf
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Thomas Hartmann
2022-06-23 16:20:39 +02:00
parent 93cd068d3e
commit 34491bdfc3
2 changed files with 29 additions and 3 deletions

View File

@@ -166,7 +166,10 @@ void RewriteActionCompressor::compressReparentIntoNewPropertyActions(QList<Rewri
if (m_positionStore->nodeOffset(reparentAction->targetProperty().parentModelNode()) < 0) { if (m_positionStore->nodeOffset(reparentAction->targetProperty().parentModelNode()) < 0) {
actionsToRemove.append(action); actionsToRemove.append(action);
removeActions.append(new RemoveNodeRewriteAction(reparentAction->reparentedNode())); const ModelNode childNode = reparentAction->reparentedNode();
if (m_positionStore->nodeOffset(childNode) > 0)
removeActions.append(new RemoveNodeRewriteAction(childNode));
} }
} }
} }

View File

@@ -1181,7 +1181,7 @@ void tst_TestCore::testRewriterReparentToNewNode()
const QList<ModelNode> children = rootModelNode.directSubModelNodes(); const QList<ModelNode> children = rootModelNode.directSubModelNodes();
ModelNode rectangle = testRewriterView->createModelNode("QtQuick.Rectangle", 2, 0); ModelNode rectangle = testRewriterView->createModelNode("QtQuick.Rectangle");
rootModelNode.nodeListProperty("data").reparentHere(rectangle); rootModelNode.nodeListProperty("data").reparentHere(rectangle);
rectangle.setIdWithoutRefactoring("newParent"); rectangle.setIdWithoutRefactoring("newParent");
@@ -1193,7 +1193,7 @@ void tst_TestCore::testRewriterReparentToNewNode()
{ {
RewriterTransaction transaction = testRewriterView->beginRewriterTransaction("TEST"); RewriterTransaction transaction = testRewriterView->beginRewriterTransaction("TEST");
ModelNode rectangle = testRewriterView->createModelNode("QtQuick.Rectangle", 2, 0); ModelNode rectangle = testRewriterView->createModelNode("QtQuick.Rectangle");
rootModelNode.nodeListProperty("data").reparentHere(rectangle); rootModelNode.nodeListProperty("data").reparentHere(rectangle);
rectangle.setIdWithoutRefactoring("newParent2"); rectangle.setIdWithoutRefactoring("newParent2");
@@ -1223,6 +1223,29 @@ void tst_TestCore::testRewriterReparentToNewNode()
QCOMPARE(textEdit.toPlainText(), expectedOutcome); QCOMPARE(textEdit.toPlainText(), expectedOutcome);
rectangle.destroy();
QCOMPARE(testRewriterView->allModelNodes().count(), 6);
{
RewriterTransaction transaction = testRewriterView->beginRewriterTransaction("TEST");
ModelNode newChild = testRewriterView->createModelNode("QtQuick.Rectangle");
rootModelNode.nodeListProperty("data").reparentHere(newChild);
newChild.setIdWithoutRefactoring("newChild");
ModelNode newParent = testRewriterView->createModelNode("QtQuick.Rectangle");
rootModelNode.nodeListProperty("data").reparentHere(newParent);
newParent.setIdWithoutRefactoring("newParent3");
for (const ModelNode &child : children)
newParent.nodeListProperty("data").reparentHere(child);
newParent.nodeListProperty("data").reparentHere(newChild);
}
QCOMPARE(testRewriterView->allModelNodes().count(), 8);
} }
void tst_TestCore::testRewriterForGradientMagic() void tst_TestCore::testRewriterForGradientMagic()