diff options
author | Thomas Hartmann <thomas.hartmann@qt.io> | 2022-07-19 15:00:42 +0200 |
---|---|---|
committer | Thomas Hartmann <thomas.hartmann@qt.io> | 2022-07-20 11:01:32 +0000 |
commit | 56b14c9d187b8303d16ed23a687f0de53e39cdd1 (patch) | |
tree | 2b8cc106ab65b595e411ebf6013af0ca9f4c1fde /tests | |
parent | 217c66cca80998724aca6b7ef25e502f6cf237bf (diff) | |
download | qt-creator-56b14c9d187b8303d16ed23a687f0de53e39cdd1.tar.gz |
QmlDesigner: Implement support for SignalDeclarationProperty
This allows implementing a signal with a signature.
e.g. signal mySignal(int i)
Task-number: QDS-7319
Change-Id: I23cb000a218d709218322e7f31c86076d3ad949b
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp | 140 | ||||
-rw-r--r-- | tests/auto/qml/qmldesigner/coretests/tst_testcore.h | 2 |
2 files changed, 141 insertions, 1 deletions
diff --git a/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp b/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp index 4813ac96f2..7c79a32dd1 100644 --- a/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp +++ b/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp @@ -170,7 +170,8 @@ tst_TestCore::tst_TestCore() : QObject() { QLoggingCategory::setFilterRules(QStringLiteral("qtc.qmljs.imports=false")); - QLoggingCategory::setFilterRules(QStringLiteral("*.info=false\n*.debug=false\n*.warning=false")); + //QLoggingCategory::setFilterRules(QStringLiteral("*.info=false\n*.debug=false\n*.warning=false")); + QLoggingCategory::setFilterRules(QStringLiteral("*.warning=false")); } void tst_TestCore::initTestCase() @@ -1273,6 +1274,7 @@ void tst_TestCore::testRewriterBehaivours() testRewriterView->setTextModifier(&modifier); model->attachView(testRewriterView.data()); + //qDebug() << testRewriterView->errors().first().toString(); QVERIFY(testRewriterView->errors().isEmpty()); ModelNode rootModelNode = testRewriterView->rootModelNode(); @@ -1345,6 +1347,119 @@ void tst_TestCore::testRewriterBehaivours() QVERIFY(!newBehavior.isValid()); } +void tst_TestCore::testRewriterSignalDefinition() +{ + const QLatin1String qmlString("\n" + "import QtQuick 2.1\n" + "\n" + "Rectangle {\n" + " id: root\n" + " x: 10;\n" + " y: 10;\n" + " signal testSignal()\n" + " signal testSignal2(float i)\n" + " Rectangle {\n" + " id: rectangle1\n" + " x: 10;\n" + " y: 10;\n" + " signal testSignal\n" + " }\n" + "}"); + + + QPlainTextEdit textEdit; + textEdit.setPlainText(qmlString); + NotIndentingTextEditModifier modifier(&textEdit); + + QScopedPointer<Model> model(Model::create("QtQuick.Text")); + + QScopedPointer<TestRewriterView> testRewriterView(new TestRewriterView()); + testRewriterView->setTextModifier(&modifier); + model->attachView(testRewriterView.data()); + + QVERIFY(testRewriterView->errors().isEmpty()); + + ModelNode rootModelNode = testRewriterView->rootModelNode(); + QVERIFY(rootModelNode.isValid()); + + QVERIFY(rootModelNode.hasProperty("testSignal")); + QVERIFY(rootModelNode.hasProperty("testSignal2")); + + QVERIFY(rootModelNode.property("testSignal").isSignalDeclarationProperty()); + QVERIFY(rootModelNode.signalDeclarationProperty("testSignal").isValid()); + QCOMPARE(rootModelNode.signalDeclarationProperty("testSignal").signature(), "()"); + + QVERIFY(rootModelNode.property("testSignal2").isSignalDeclarationProperty()); + QVERIFY(rootModelNode.signalDeclarationProperty("testSignal2").isValid()); + QCOMPARE(rootModelNode.signalDeclarationProperty("testSignal2").signature(), "(float i)"); + + ModelNode rectangle = testRewriterView->modelNodeForId("rectangle1"); + QVERIFY(rectangle.isValid()); + + QVERIFY(rectangle.hasProperty("testSignal")); + + QVERIFY(rectangle.property("testSignal").isSignalDeclarationProperty()); + QVERIFY(rectangle.signalDeclarationProperty("testSignal").isValid()); + QCOMPARE(rectangle.signalDeclarationProperty("testSignal").signature(), "()"); + + rootModelNode.signalDeclarationProperty("addedSignal").setSignature("()"); + rootModelNode.signalDeclarationProperty("addedSignal").setSignature("(real i)"); + + const QLatin1String expectedQmlCode( + "\nimport QtQuick 2.1\n\n" + "Rectangle {\n" + " id: root\n" + " x: 10;\n" + " y: 10;\n" + " signal addedSignal (real i)\n" + " signal testSignal()\n" + " signal testSignal2(float i)\n" + " Rectangle {\n" + " id: rectangle1\n" + " x: 10;\n" + " y: 10;\n" + " signal testSignal\n" + " }\n}"); + + QCOMPARE(textEdit.toPlainText(), expectedQmlCode); + + rootModelNode.removeProperty("addedSignal"); + + const QLatin1String expectedQmlCode2( + "\nimport QtQuick 2.1\n\n" + "Rectangle {\n" + " id: root\n" + " x: 10;\n" + " y: 10;\n" + " signal testSignal()\n" + " signal testSignal2(float i)\n" + " Rectangle {\n" + " id: rectangle1\n" + " x: 10;\n" + " y: 10;\n" + " signal testSignal\n" + " }\n}"); + + QCOMPARE(textEdit.toPlainText(), expectedQmlCode2); + + testRewriterView->executeInTransaction("identifer", [rectangle](){ + ModelNode newRectangle = rectangle.view()->createModelNode(rectangle.type(), + rectangle.majorVersion(), + rectangle.minorVersion()); + + QVERIFY(newRectangle.isValid()); + newRectangle.signalDeclarationProperty("newSignal").setSignature("()"); + newRectangle.setIdWithoutRefactoring("newRect"); + newRectangle.view()->rootModelNode().defaultNodeListProperty().reparentHere(newRectangle); + }); + + const QString expectedQmlCode3 + = expectedQmlCode2.chopped(1) + + QLatin1String("\n Rectangle {\n id: newRect\n signal newSignal ()\n }\n}"); + + QCOMPARE(textEdit.toPlainText(), expectedQmlCode3); +} + void tst_TestCore::testRewriterForGradientMagic() { const QLatin1String qmlString("\n" @@ -6891,6 +7006,29 @@ void tst_TestCore::testModelChangeType() QCOMPARE(textEdit.toPlainText(), expectedQmlCode2); } +void tst_TestCore::testModelSignalDefinition() +{ + QScopedPointer<Model> model(createModel("QtQuick.Rectangle", 2, 0)); + QVERIFY(model.data()); + + QScopedPointer<TestView> view(new TestView(model.data())); + QVERIFY(view.data()); + model->attachView(view.data()); + + ModelNode rootModelNode(view->rootModelNode()); + QVERIFY(rootModelNode.isValid()); + + QVERIFY(!rootModelNode.hasProperty("mySignal")); + + rootModelNode.signalDeclarationProperty("mySignal").setSignature("()"); + + QVERIFY(rootModelNode.hasProperty("mySignal")); + + QVERIFY(rootModelNode.signalDeclarationProperty("mySignal").isValid()); + QVERIFY(rootModelNode.property("mySignal").isSignalDeclarationProperty()); + QCOMPARE(rootModelNode.signalDeclarationProperty("mySignal").signature(), "()"); +} + void tst_TestCore::testModelDefaultProperties() { QScopedPointer<Model> model(createModel("QtQuick.Rectangle", 2, 0)); diff --git a/tests/auto/qml/qmldesigner/coretests/tst_testcore.h b/tests/auto/qml/qmldesigner/coretests/tst_testcore.h index d55bb2a196..633731c7c2 100644 --- a/tests/auto/qml/qmldesigner/coretests/tst_testcore.h +++ b/tests/auto/qml/qmldesigner/coretests/tst_testcore.h @@ -90,6 +90,7 @@ private slots: void testModelNodeInHierarchy(); void testModelNodeIsAncestorOf(); void testModelChangeType(); + void testModelSignalDefinition(); // // unit tests Rewriter @@ -146,6 +147,7 @@ private slots: void testRewriterTransactionAddingAfterReparenting(); void testRewriterReparentToNewNode(); void testRewriterBehaivours(); + void testRewriterSignalDefinition(); // // unit tests QmlModelNodeFacade/QmlModelState |