aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
authorThomas Hartmann <thomas.hartmann@qt.io>2018-02-21 18:41:31 +0100
committerThomas Hartmann <thomas.hartmann@qt.io>2018-03-08 11:19:01 +0000
commitcf82b8e685c112fef4170f72eacacb5ca5363b6c (patch)
treeccd17ec6950ff61c7c788805bd299cc353ef19c9 /tests/auto
parent5179dbbe688e0dc01708432eebe444003c24c439 (diff)
QmlDesigner: Allow annotations in comments
This patch allows to store the auxiliary data of model nodes as meta data in the QML file. The meta data is encoded in a comment at the end of the QML file. By default such meta data is attached to the clipboard. Change-Id: I794d2c1297d270c5c1099c6c1be98b6b7a7f650b Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/qml/qmldesigner/coretests/testrewriterview.h2
-rw-r--r--tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp119
-rw-r--r--tests/auto/qml/qmldesigner/coretests/tst_testcore.h4
3 files changed, 125 insertions, 0 deletions
diff --git a/tests/auto/qml/qmldesigner/coretests/testrewriterview.h b/tests/auto/qml/qmldesigner/coretests/testrewriterview.h
index 74b5fa384ac..46f7e1078f8 100644
--- a/tests/auto/qml/qmldesigner/coretests/testrewriterview.h
+++ b/tests/auto/qml/qmldesigner/coretests/testrewriterview.h
@@ -57,6 +57,8 @@ public:
bool isModificationGroupActive() const;
void setModificationGroupActive(bool active);
void applyModificationGroupChanges();
+
+ using RewriterView::auxiliaryDataAsQML;
};
} // QmlDesigner
diff --git a/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp b/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp
index 25eca2c3ce8..33b275046bf 100644
--- a/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp
+++ b/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp
@@ -59,6 +59,7 @@
#include <utils/fileutils.h>
#include <qmljs/qmljsinterpreter.h>
+#include <qmljs/qmljssimplereader.h>
#include <extensionsystem/pluginmanager.h>
#include <QPlainTextEdit>
@@ -8208,5 +8209,123 @@ void tst_TestCore::changeGradientId()
}
}
+void checkNode(QmlJS::SimpleReaderNode::Ptr node, TestRewriterView *view);
+
+void static checkChildNodes(QmlJS::SimpleReaderNode::Ptr node, TestRewriterView *view)
+{
+ for (auto child : node->children())
+ checkNode(child, view);
+}
+
+void static checkNode(QmlJS::SimpleReaderNode::Ptr node, TestRewriterView *view)
+{
+ QVERIFY(node);
+ QVERIFY(node->propertyNames().contains("i"));
+ const int internalId = node->property("i").toInt();
+ const ModelNode modelNode = view->modelNodeForInternalId(internalId);
+ QVERIFY(modelNode.isValid());
+ auto properties = node->properties();
+
+ for (auto i = properties.begin(); i != properties.end(); ++i) {
+ if (i.key() != "i")
+ QCOMPARE(i.value(), modelNode.auxiliaryData(i.key().toUtf8()));
+ }
+
+ checkChildNodes(node, view);
+}
+
+void tst_TestCore::writeAnnotations()
+{
+ const QLatin1String qmlCode("\n"
+ "import QtQuick 2.1\n"
+ "\n"
+ "Rectangle {\n"
+ " Item {\n"
+ " }\n"
+ "\n"
+ " MouseArea {\n"
+ " x: 3\n"
+ " y: 3\n"
+ " }\n"
+ "}");
+
+ const QLatin1String metaCode("\n/*##^## Designer {\n D{i:0;x:10}D{i:1;test:true;x:10;test2:\"string\"}"
+ "D{i:2;test:true;x:10;test2:\"string\"}\n}\n ##^##*/\n");
+
+ QPlainTextEdit textEdit;
+ textEdit.setPlainText(qmlCode);
+ NotIndentingTextEditModifier textModifier(&textEdit);
+
+ QScopedPointer<Model> model(Model::create("QtQuick.Item", 2, 1));
+ QVERIFY(model.data());
+
+ QScopedPointer<TestRewriterView> testRewriterView(new TestRewriterView());
+ testRewriterView->setTextModifier(&textModifier);
+ model->attachView(testRewriterView.data());
+
+ QVERIFY(model.data());
+ ModelNode rootModelNode(testRewriterView->rootModelNode());
+ QVERIFY(rootModelNode.isValid());
+
+ rootModelNode.setAuxiliaryData("x", 10);
+ for (const auto child : rootModelNode.allSubModelNodes()) {
+ child.setAuxiliaryData("x", 10);
+ child.setAuxiliaryData("test", true);
+ child.setAuxiliaryData("test2", "string");
+ }
+
+ const QString metaSource = testRewriterView->auxiliaryDataAsQML();
+
+ QmlJS::SimpleReader reader;
+ checkChildNodes(reader.readFromSource(metaSource), testRewriterView.data());
+
+ testRewriterView->writeAuxiliaryData();
+ const QString textWithMeta = testRewriterView->textModifier()->text();
+ testRewriterView->writeAuxiliaryData();
+ QCOMPARE(textWithMeta.length(), testRewriterView->textModifier()->text().length());
+}
+
+void tst_TestCore::readAnnotations()
+{
+ const QLatin1String qmlCode("\n"
+ "import QtQuick 2.1\n"
+ "\n"
+ "Rectangle {\n"
+ " Item {\n"
+ " }\n"
+ "\n"
+ " MouseArea {\n"
+ " x: 3\n"
+ " y: 3\n"
+ " }\n"
+ "}");
+
+ const QLatin1String metaCode("\n/*##^## Designer {\n D{i:0;x:10}D{i:1;test:true;x:10;test2:\"string\"}"
+ "D{i:2;test:true;x:10;test2:\"string\"}\n}\n ##^##*/\n");
+
+ const QLatin1String metaCodeQmlCode("Designer {\n D{i:0;x:10}D{i:1;test2:\"string\";x:10;test:true}"
+ "D{i:2;test2:\"string\";x:10;test:true}\n}\n");
+
+ QPlainTextEdit textEdit;
+ textEdit.setPlainText(qmlCode + metaCode);
+ NotIndentingTextEditModifier textModifier(&textEdit);
+
+ QScopedPointer<Model> model(Model::create("QtQuick.Item", 2, 1));
+ QVERIFY(model.data());
+
+ QScopedPointer<TestRewriterView> testRewriterView(new TestRewriterView());
+ testRewriterView->setTextModifier(&textModifier);
+ model->attachView(testRewriterView.data());
+
+ QVERIFY(model.data());
+ ModelNode rootModelNode(testRewriterView->rootModelNode());
+ QVERIFY(rootModelNode.isValid());
+
+ testRewriterView->restoreAuxiliaryData();
+
+ const QString metaSource = testRewriterView->auxiliaryDataAsQML();
+ QCOMPARE(metaSource.length(), QString(metaCodeQmlCode).length());
+}
+
QTEST_MAIN(tst_TestCore);
diff --git a/tests/auto/qml/qmldesigner/coretests/tst_testcore.h b/tests/auto/qml/qmldesigner/coretests/tst_testcore.h
index a3ce437947c..def024c63f3 100644
--- a/tests/auto/qml/qmldesigner/coretests/tst_testcore.h
+++ b/tests/auto/qml/qmldesigner/coretests/tst_testcore.h
@@ -229,4 +229,8 @@ private slots:
// Object bindings as properties:
void loadGradient();
void changeGradientId();
+
+ // QMLAnnotations
+ void writeAnnotations();
+ void readAnnotations();
};