summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorThomas Hartmann <thomas.hartmann@qt.io>2022-07-19 15:00:42 +0200
committerThomas Hartmann <thomas.hartmann@qt.io>2022-07-20 11:01:32 +0000
commit56b14c9d187b8303d16ed23a687f0de53e39cdd1 (patch)
tree2b8cc106ab65b595e411ebf6013af0ca9f4c1fde /tests
parent217c66cca80998724aca6b7ef25e502f6cf237bf (diff)
downloadqt-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.cpp140
-rw-r--r--tests/auto/qml/qmldesigner/coretests/tst_testcore.h2
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