diff options
author | Thomas Hartmann <thomas.hartmann@qt.io> | 2018-02-21 18:41:31 +0100 |
---|---|---|
committer | Thomas Hartmann <thomas.hartmann@qt.io> | 2018-03-08 11:19:01 +0000 |
commit | cf82b8e685c112fef4170f72eacacb5ca5363b6c (patch) | |
tree | ccd17ec6950ff61c7c788805bd299cc353ef19c9 /tests/auto | |
parent | 5179dbbe688e0dc01708432eebe444003c24c439 (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.h | 2 | ||||
-rw-r--r-- | tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp | 119 | ||||
-rw-r--r-- | tests/auto/qml/qmldesigner/coretests/tst_testcore.h | 4 |
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(); }; |