From 3108c58b97074b68ba48f452955727c67c4f77bc Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Wed, 22 Jan 2025 10:59:36 +0100 Subject: QtQml: Add conversion code for QQmlListProperty to other lists MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We have the same conversion code already for lists of value types and JavaScript arrays. Specialize the common cases of QObjectList and QQmlListProperty. Pick-to: 6.9 6.8 Fixes: QTBUG-133047 Change-Id: I10826d4a965e18471a486e19befef961ec9a4a6e Reviewed-by: Olivier De Cannière --- tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp | 60 +++++++++++++++++++--- 1 file changed, 53 insertions(+), 7 deletions(-) (limited to 'tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp') diff --git a/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp b/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp index 4217206307..673155119b 100644 --- a/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp +++ b/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp @@ -15,12 +15,15 @@ #include #include -#include -#include +#include +#include +#include + +#include +#include -#include -#include #include +#include #include #if QT_CONFIG(process) @@ -3154,9 +3157,19 @@ void tst_QmlCppCodegen::listAsArgument() void tst_QmlCppCodegen::listConversion() { QQmlEngine e; - QQmlComponent c(&e, QUrl(u"qrc:/qt/qml/TestTypes/listConversion.qml"_s)); - QVERIFY2(c.isReady(), qPrintable(c.errorString())); - QScopedPointer o(c.create()); + QQmlComponent component(&e, QUrl(u"qrc:/qt/qml/TestTypes/listConversion.qml"_s)); + QVERIFY2(component.isReady(), qPrintable(component.errorString())); + + QTest::ignoreMessage( + QtWarningMsg, + QRegularExpression(u"Cannot append QObject\\(0x[0-9a-f]+, name = \"a\"\\) " + "to a QML list of QQmlBind\\*"_s)); + QTest::ignoreMessage( + QtWarningMsg, + QRegularExpression(u"Cannot append QObject\\(0x[0-9a-f]+, name = \"b\"\\) " + "to a QML list of QQmlBind\\*"_s)); + + QScopedPointer o(component.create()); QVERIFY(!o.isNull()); QQmlListProperty list = o->property("o").value>(); @@ -3177,6 +3190,39 @@ void tst_QmlCppCodegen::listConversion() QVariant::fromValue(3), QVariant::fromValue(nullptr) })); + + QCOMPARE(o->property("numbers").value>(), (QList{1, 2})); + auto objects = o->property("objects").value>(); + QCOMPARE(objects.count(&objects), 2); + + const QObject *a = objects.at(&objects, 0); + QVERIFY(a); + QCOMPARE(a->objectName(), u"a"_s); + + const QObject *b = objects.at(&objects, 1); + QVERIFY(b); + QCOMPARE(b->objectName(), u"b"_s); + + auto bindings = o->property("bindings").value>(); + QCOMPARE(bindings.count(&bindings), 2); + + const QQmlBind *c = bindings.at(&bindings, 0); + QVERIFY(c); + QCOMPARE(c->objectName(), u"c"_s); + + const QQmlBind *d = bindings.at(&bindings, 1); + QVERIFY(d); + QCOMPARE(d->objectName(), u"d"_s); + + auto objectsFromBindings = o->property("objectsFromBindings").value>(); + QCOMPARE(objectsFromBindings.count(&objectsFromBindings), 2); + QCOMPARE(objectsFromBindings.at(&objectsFromBindings, 0), c); + QCOMPARE(objectsFromBindings.at(&objectsFromBindings, 1), d); + + auto nulls = o->property("nulls").value>(); + QCOMPARE(nulls.count(&nulls), 2); + QCOMPARE(nulls.at(&nulls, 0), nullptr); + QCOMPARE(nulls.at(&nulls, 1), nullptr); } void tst_QmlCppCodegen::listIndices() -- cgit v1.2.3