aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/qml/qmlcppcodegen
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/qml/qmlcppcodegen')
-rw-r--r--tests/auto/qml/qmlcppcodegen/CMakeLists.txt2
-rw-r--r--tests/auto/qml/qmlcppcodegen/data/listConversion.qml19
-rw-r--r--tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp60
3 files changed, 74 insertions, 7 deletions
diff --git a/tests/auto/qml/qmlcppcodegen/CMakeLists.txt b/tests/auto/qml/qmlcppcodegen/CMakeLists.txt
index d2e248ec8a..48a89a409c 100644
--- a/tests/auto/qml/qmlcppcodegen/CMakeLists.txt
+++ b/tests/auto/qml/qmlcppcodegen/CMakeLists.txt
@@ -15,6 +15,7 @@ qt_internal_add_test(tst_qmlcppcodegen
LIBRARIES
Qt::Qml
Qt::QmlPrivate
+ Qt::QmlMetaPrivate
Qt::GuiPrivate
codegen_test_module
codegen_test_moduleplugin
@@ -34,6 +35,7 @@ qt_internal_add_test(tst_qmlcppcodegen_interpreted
LIBRARIES
Qt::Qml
Qt::QmlPrivate
+ Qt::QmlMetaPrivate
Qt::GuiPrivate
codegen_test_module
codegen_test_moduleplugin
diff --git a/tests/auto/qml/qmlcppcodegen/data/listConversion.qml b/tests/auto/qml/qmlcppcodegen/data/listConversion.qml
index ca86d9a1d6..8920658f86 100644
--- a/tests/auto/qml/qmlcppcodegen/data/listConversion.qml
+++ b/tests/auto/qml/qmlcppcodegen/data/listConversion.qml
@@ -14,4 +14,23 @@ BirthdayParty {
property list<QtObject> o: self.guests
property list<string> s: self.guestNames
property list<var> v: self.stuffs
+
+ component DataSource : QtObject {
+ property list<int> numbers: [1, 2]
+ property list<QtObject> objects: [
+ QtObject { objectName: "a" },
+ QtObject { objectName: "b" }
+ ]
+ property list<Binding> bindings: [
+ Binding { objectName: "c" },
+ Binding { objectName: "d" }
+ ]
+ }
+
+ property DataSource src: DataSource {}
+ property list<int> numbers: src.numbers
+ property list<QtObject> objects: src.objects
+ property list<Binding> bindings: src.bindings
+ property list<QtObject> objectsFromBindings: src.bindings
+ property list<Binding> nulls: src.objects
}
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 <data/weathermoduleurl.h>
#include <data/withlength.h>
-#include <QtQml/private/qqmlengine_p.h>
-#include <QtQml/private/qqmlpropertycachecreator_p.h>
+#include <private/qqmlbind_p.h>
+#include <private/qqmlengine_p.h>
+#include <private/qqmlpropertycachecreator_p.h>
+
+#include <QtTest/qsignalspy.h>
+#include <QtTest/qtest.h>
-#include <QtTest>
-#include <QtQml>
#include <QtGui/qcolor.h>
+#include <QtGui/qfont.h>
#include <QtGui/qpa/qplatformdialoghelper.h>
#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<QObject> 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<QObject> o(component.create());
QVERIFY(!o.isNull());
QQmlListProperty<QObject> list = o->property("o").value<QQmlListProperty<QObject>>();
@@ -3177,6 +3190,39 @@ void tst_QmlCppCodegen::listConversion()
QVariant::fromValue<qsizetype>(3),
QVariant::fromValue<Person *>(nullptr)
}));
+
+ QCOMPARE(o->property("numbers").value<QList<int>>(), (QList<int>{1, 2}));
+ auto objects = o->property("objects").value<QQmlListProperty<QObject>>();
+ 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<QQmlListProperty<QQmlBind>>();
+ 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<QQmlListProperty<QObject>>();
+ QCOMPARE(objectsFromBindings.count(&objectsFromBindings), 2);
+ QCOMPARE(objectsFromBindings.at(&objectsFromBindings, 0), c);
+ QCOMPARE(objectsFromBindings.at(&objectsFromBindings, 1), d);
+
+ auto nulls = o->property("nulls").value<QQmlListProperty<QQmlBind>>();
+ QCOMPARE(nulls.count(&nulls), 2);
+ QCOMPARE(nulls.at(&nulls, 0), nullptr);
+ QCOMPARE(nulls.at(&nulls, 1), nullptr);
}
void tst_QmlCppCodegen::listIndices()