QmlDesigner: Fix testRewriterView and add testRewriterView2

The new test testRewriterView2 is a variant with slightly different setup.
We have to wait for the type information to be parsed.

Change-Id: I231b8d13e6be5ad52a8c3b72ebaf81c13a24f782
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Thomas Hartmann
2021-06-16 22:10:04 +02:00
parent 4103dfd6c2
commit 361e0f0eb4
2 changed files with 101 additions and 8 deletions

View File

@@ -272,14 +272,14 @@ void tst_TestCore::loadEmptyCoreModel()
QVERIFY(compareTree(testRewriterView1->rootModelNode(), testRewriterView2->rootModelNode()));
}
void tst_TestCore::testRewriterView()
void tst_TestCore::testRewriterView2()
{
try {
QPlainTextEdit textEdit;
textEdit.setPlainText("import QtQuick 2.15;\n\nItem {\n}\n");
textEdit.setPlainText("import QtQuick 2.15;\n\nRectangle {\n}\n");
NotIndentingTextEditModifier textModifier(&textEdit);
QScopedPointer<Model> model(Model::create("QtQuick.Item"));
QScopedPointer<Model> model(Model::create("QtQuick.Rectangle", 2, 1));
QVERIFY(model.data());
QScopedPointer<TestView> view(new TestView(model.data()));
@@ -292,15 +292,20 @@ void tst_TestCore::testRewriterView()
testRewriterView->setTextModifier(&textModifier);
model->attachView(testRewriterView.data());
ModelNode childNode(addNodeListChild(rootModelNode, "QtQuick.Rectangle", 1, 0, "data"));
while (testRewriterView->hasIncompleteTypeInformation()) {
QApplication::processEvents(QEventLoop::AllEvents, 1000);
}
ModelNode childNode(addNodeListChild(rootModelNode, "QtQuick.Rectangle", 2, 11, "data"));
QVERIFY(childNode.isValid());
childNode.setIdWithoutRefactoring("childNode");
ModelNode childNode2(addNodeListChild(childNode, "QtQuick.Rectangle", 1, 0, "data"));
ModelNode childNode2(addNodeListChild(childNode, "QtQuick.Rectangle", 2, 11, "data"));
childNode2.setIdWithoutRefactoring("childNode2");
ModelNode childNode3(addNodeListChild(childNode2, "QtQuick.Rectangle", 1, 0, "data"));
ModelNode childNode3(addNodeListChild(childNode2, "QtQuick.Rectangle", 2, 11, "data"));
childNode3.setIdWithoutRefactoring("childNode3");
ModelNode childNode4(addNodeListChild(childNode3, "QtQuick.Rectangle", 1, 0, "data"));
ModelNode childNode4(addNodeListChild(childNode3, "QtQuick.Rectangle", 2, 11, "data"));
childNode4.setIdWithoutRefactoring("childNode4");
QVERIFY(childNode.isValid());
@@ -326,7 +331,7 @@ void tst_TestCore::testRewriterView()
testRewriterView->modelToTextMerger()->applyChanges();
childNode = addNodeListChild(rootModelNode, "QtQuick.Rectangle", 2, 0, "data");
childNode = addNodeListChild(rootModelNode, "QtQuick.Rectangle", 2, 11, "data");
QVERIFY(testRewriterView->modelToTextMerger()->isNodeScheduledForAddition(childNode));
testRewriterView->modelToTextMerger()->applyChanges();
@@ -334,6 +339,93 @@ void tst_TestCore::testRewriterView()
childNode.variantProperty("x").setValue(70);
childNode.variantProperty("y").setValue(90);
QCOMPARE(testRewriterView->modelToTextMerger()
->findAddedVariantProperty(childNode.variantProperty("x"))
.value(),
QVariant(70));
QCOMPARE(testRewriterView->modelToTextMerger()
->findAddedVariantProperty(childNode.variantProperty("y"))
.value(),
QVariant(90));
model->detachView(testRewriterView.data());
} catch (Exception &e) {
QFAIL(qPrintable(e.description()));
}
}
void tst_TestCore::testRewriterView()
{
try {
const QLatin1String qmlString("import QtQuick 2.15\n"
"Rectangle {\n"
"}\n");
QPlainTextEdit textEdit;
textEdit.setPlainText(qmlString);
NotIndentingTextEditModifier textModifier(&textEdit);
QScopedPointer<Model> model(Model::create("QtQuick.Item", 2, 15));
QVERIFY(model.data());
QScopedPointer<TestRewriterView> testRewriterView(new TestRewriterView());
testRewriterView->setTextModifier(&textModifier);
testRewriterView->setCheckSemanticErrors(true);
model->attachView(testRewriterView.data());
while (testRewriterView->hasIncompleteTypeInformation()) {
QApplication::processEvents(QEventLoop::AllEvents, 1000);
}
textEdit.setPlainText(qmlString);
ModelNode rootModelNode = testRewriterView->rootModelNode();
ModelNode childNode(addNodeListChild(rootModelNode, "QtQuick.Rectangle", 2, 11, "data"));
QVERIFY(childNode.isValid());
childNode.setIdWithoutRefactoring("childNode");
ModelNode childNode2(addNodeListChild(childNode, "QtQuick.Rectangle", 2, 11, "data"));
childNode2.setIdWithoutRefactoring("childNode2");
ModelNode childNode3(addNodeListChild(childNode2, "QtQuick.Rectangle", 2, 11, "data"));
childNode3.setIdWithoutRefactoring("childNode3");
ModelNode childNode4(addNodeListChild(childNode3, "QtQuick.Rectangle", 2, 11, "data"));
childNode4.setIdWithoutRefactoring("childNode4");
QVERIFY(childNode.isValid());
QVERIFY(childNode2.isValid());
QVERIFY(childNode3.isValid());
QVERIFY(childNode4.isValid());
testRewriterView->setModificationGroupActive(true);
childNode.destroy();
QVERIFY(!childNode.isValid());
QVERIFY(!childNode2.isValid());
QVERIFY(!childNode3.isValid());
QVERIFY(!childNode4.isValid());
QVERIFY(testRewriterView->modelToTextMerger()->isNodeScheduledForRemoval(childNode));
QVERIFY(!testRewriterView->modelToTextMerger()->isNodeScheduledForRemoval(childNode2));
QVERIFY(!testRewriterView->modelToTextMerger()->isNodeScheduledForRemoval(childNode3));
QVERIFY(!testRewriterView->modelToTextMerger()->isNodeScheduledForRemoval(childNode4));
QVERIFY(!rootModelNode.hasProperty("data"));
testRewriterView->modelToTextMerger()->applyChanges();
childNode = addNodeListChild(rootModelNode, "QtQuick.Rectangle", 2, 11, "data");
QVERIFY(testRewriterView->modelToTextMerger()->isNodeScheduledForAddition(childNode));
QVERIFY(childNode.isValid());
testRewriterView->modelToTextMerger()->applyChanges();
QVERIFY(childNode.isValid());
childNode.variantProperty("x").setValue(70);
childNode.variantProperty("y").setValue(90);
QCOMPARE(testRewriterView->modelToTextMerger()->findAddedVariantProperty(childNode.variantProperty("x")).value(), QVariant(70));
QCOMPARE(testRewriterView->modelToTextMerger()->findAddedVariantProperty(childNode.variantProperty("y")).value(), QVariant(90));

View File

@@ -95,6 +95,7 @@ private slots:
// unit tests Rewriter
//
void testRewriterView();
void testRewriterView2();
void testRewriterErrors();
void testRewriterChangeId();
void testRewriterRemoveId();