aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2022-08-02 18:20:18 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2022-08-29 15:33:26 +0000
commitcbef5bae849d1d8c079e0b5fdd3d63fff5616ab8 (patch)
tree2118cbce68aebb78fe1c7382537d3dd30ac55b4d /tests
parent0e5d277bbf66d6b9a75e22d3c60a8fca5368cf6b (diff)
QmlModels: Fix enum resolution in ListElement
There were two problems: a, We need to allow recursion when querying for enums. Otherwise we cannot find enums in the same document. b, when the enum resolution is done in the validation phase, we cannot query the current document's QQmlType for enums, yet, as it's not finalized. However, the QQmlPropertyValidator has the QQmlPropertyCache we're looking for in that case. c, As a drive-by, fix the excessive conversions between QByteArray and QString. Fixes: QTBUG-95864 Change-Id: If0d2687986e1483a27ce11373a204235b92a6efd Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> (cherry picked from commit cad5c89a0f0ebb24f17171fdbab8355832f0f415) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp2
-rw-r--r--tests/auto/qml/qqmllistmodel/data/Model.qml9
-rw-r--r--tests/auto/qml/qqmllistmodel/data/enumsInListElement.qml8
-rw-r--r--tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp18
4 files changed, 36 insertions, 1 deletions
diff --git a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
index 59ba9594f9..e25d623fe5 100644
--- a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
+++ b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp
@@ -6143,7 +6143,7 @@ void tst_qqmllanguage::qualifiedScopeInCustomParser()
"ListModel {\n"
" ListElement { text: \"a\"; type: BACKEND.EnumTester.FIRST }\n"
"}\n", QUrl());
- QVERIFY(component.isReady());
+ QVERIFY2(component.isReady(), qPrintable(component.errorString()));
QScopedPointer<QObject> obj(component.create());
QVERIFY(!obj.isNull());
}
diff --git a/tests/auto/qml/qqmllistmodel/data/Model.qml b/tests/auto/qml/qqmllistmodel/data/Model.qml
new file mode 100644
index 0000000000..f6aeed5bdd
--- /dev/null
+++ b/tests/auto/qml/qqmllistmodel/data/Model.qml
@@ -0,0 +1,9 @@
+import QtQml.Models
+
+ListModel {
+ enum Choose { Foo, Bar, Baz }
+
+ ListElement { choose: Model.Choose.Foo }
+ ListElement { choose: Model.Choose.Bar }
+ ListElement { choose: Model.Choose.Baz }
+}
diff --git a/tests/auto/qml/qqmllistmodel/data/enumsInListElement.qml b/tests/auto/qml/qqmllistmodel/data/enumsInListElement.qml
new file mode 100644
index 0000000000..e8d594dfd8
--- /dev/null
+++ b/tests/auto/qml/qqmllistmodel/data/enumsInListElement.qml
@@ -0,0 +1,8 @@
+import QtQuick
+
+ListView {
+ width: 180
+ height: 200
+ model: Model {}
+ delegate: Text { text: choose }
+}
diff --git a/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp b/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp
index c92956bd49..7f31e43b1e 100644
--- a/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp
+++ b/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp
@@ -4,6 +4,7 @@
#include <QtQuick/private/qquickitem_p.h>
#include <QtQuick/private/qquicktext_p.h>
#include <QtQuick/private/qquickanimation_p.h>
+#include <QtQuick/private/qquicklistview_p.h>
#include <QtQml/private/qqmlengine_p.h>
#include <QtQmlModels/private/qqmllistmodel_p.h>
#include <QtQml/private/qqmlexpression_p.h>
@@ -116,6 +117,7 @@ private slots:
void listElementWithTemplateString();
void destroyComponentObject();
void objectOwnershipFlip();
+ void enumsInListElement();
};
bool tst_qqmllistmodel::compareVariantList(const QVariantList &testList, QVariant object)
@@ -1891,6 +1893,22 @@ void tst_qqmllistmodel::objectOwnershipFlip()
QCOMPARE(QJSEngine::objectOwnership(item.data()), QJSEngine::CppOwnership);
}
+void tst_qqmllistmodel::enumsInListElement()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine, testFileUrl("enumsInListElement.qml"));
+ QVERIFY2(component.isReady(), qPrintable(component.errorString()));
+ QScopedPointer<QObject> root(component.create());
+ QVERIFY(!root.isNull());
+
+ QQuickListView *listView = qobject_cast<QQuickListView *>(root.data());
+ QVERIFY(listView);
+ QCOMPARE(listView->count(), 3);
+ for (int i = 0; i < 3; ++i) {
+ QCOMPARE(listView->itemAtIndex(i)->property("text"), QVariant(QString::number(i)));
+ }
+}
+
QTEST_MAIN(tst_qqmllistmodel)
#include "tst_qqmllistmodel.moc"