From 0127c7695348c0290c65a9e4c07ba90b31b1dca7 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Tue, 20 Jul 2021 13:38:34 +0200 Subject: Avoid infinite loop in designer support Task-number: QTBUG-94928 Change-Id: I1ee14600fb0fd9f0ee499546e3ffcd66114aaeff Reviewed-by: Thomas Hartmann (cherry picked from commit d3cae36550fe8b82c641cef6a207e991a9064d85) Reviewed-by: Qt Cherry-pick Bot --- .../data/RecursiveProperty.qml | 8 ++++ .../data/propertyNameTest.qml | 13 ++++++ .../tst_qquickdesignersupport.cpp | 47 ++++++++++++++++++++++ 3 files changed, 68 insertions(+) create mode 100644 tests/auto/quick/qquickdesignersupport/data/RecursiveProperty.qml create mode 100644 tests/auto/quick/qquickdesignersupport/data/propertyNameTest.qml (limited to 'tests') diff --git a/tests/auto/quick/qquickdesignersupport/data/RecursiveProperty.qml b/tests/auto/quick/qquickdesignersupport/data/RecursiveProperty.qml new file mode 100644 index 0000000000..ec419f8935 --- /dev/null +++ b/tests/auto/quick/qquickdesignersupport/data/RecursiveProperty.qml @@ -0,0 +1,8 @@ +import QtQuick 2.0 + +Item { + id: myObject + readonly property int testProperty: 0 + readonly property QtObject myproperty: myObject +} + diff --git a/tests/auto/quick/qquickdesignersupport/data/propertyNameTest.qml b/tests/auto/quick/qquickdesignersupport/data/propertyNameTest.qml new file mode 100644 index 0000000000..4815709d21 --- /dev/null +++ b/tests/auto/quick/qquickdesignersupport/data/propertyNameTest.qml @@ -0,0 +1,13 @@ +import QtQuick 2.11 + +Rectangle { + objectName: "rootItem" + color: "white" + width: 800 + height: 600 + + RecursiveProperty { + objectName: "recursiveProperty" + + } +} diff --git a/tests/auto/quick/qquickdesignersupport/tst_qquickdesignersupport.cpp b/tests/auto/quick/qquickdesignersupport/tst_qquickdesignersupport.cpp index 18d6b6b5a7..ab01ae3a50 100644 --- a/tests/auto/quick/qquickdesignersupport/tst_qquickdesignersupport.cpp +++ b/tests/auto/quick/qquickdesignersupport/tst_qquickdesignersupport.cpp @@ -66,6 +66,7 @@ private slots: void testSimpleBindings(); void testDotProperties(); void testItemReparenting(); + void testPropertyNames(); }; @@ -786,6 +787,52 @@ void tst_qquickdesignersupport::testItemReparenting() QCOMPARE(text->parentItem(), item); } +void tst_qquickdesignersupport::testPropertyNames() +{ + if (QTestPrivate::isRunningArmOnX86()) + QSKIP("Crashes in QEMU. (QTBUG-90869)"); +#ifdef Q_CC_MINGW + QSKIP("QQuickDesignerSupportProperties::registerCustomData segfaults on mingw. QTBUG-90869"); +#endif + + QScopedPointer view(new QQuickView); + view->engine()->setOutputWarningsToStandardError(false); + view->setSource(testFileUrl("propertyNameTest.qml")); + + QVERIFY(view->errors().isEmpty()); + QQuickItem *rootItem = view->rootObject(); + QVERIFY(rootItem); + + QQuickDesignerSupport::PropertyNameList names = QQuickDesignerSupportProperties::allPropertyNames(rootItem); + QVERIFY(!names.isEmpty()); + QVERIFY(names.contains("width")); + QVERIFY(names.contains("height")); + QVERIFY(names.contains("clip")); + QVERIFY(names.contains("childrenRect")); + QVERIFY(names.contains("activeFocus")); + QVERIFY(names.contains("border.width")); + names = QQuickDesignerSupportProperties::propertyNameListForWritableProperties(rootItem); + QVERIFY(!names.isEmpty()); + QVERIFY(names.contains("width")); + QVERIFY(names.contains("height")); + QVERIFY(names.contains("opacity")); + QVERIFY(!names.contains("childrenRect")); + QVERIFY(!names.contains("childrenRect")); + QVERIFY(!names.contains("activeFocus")); + QVERIFY(names.contains("border.width")); + + QQuickItem *recursiveProperty = findItem(rootItem, QLatin1String("recursiveProperty")); + QVERIFY(recursiveProperty); + names = QQuickDesignerSupportProperties::allPropertyNames(recursiveProperty); + QVERIFY(!names.isEmpty()); + QVERIFY(names.contains("testProperty")); + QVERIFY(names.contains("myproperty.testProperty")); + + names = QQuickDesignerSupportProperties::propertyNameListForWritableProperties(recursiveProperty); + QVERIFY(!names.isEmpty()); + QVERIFY(!names.contains("testProperty")); +} + QTEST_MAIN(tst_qquickdesignersupport) #include "tst_qquickdesignersupport.moc" -- cgit v1.2.3