diff options
Diffstat (limited to 'tests/auto/qml/qmlcppcodegen')
| -rw-r--r-- | tests/auto/qml/qmlcppcodegen/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | tests/auto/qml/qmlcppcodegen/data/listConversion.qml | 19 | ||||
| -rw-r--r-- | tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp | 60 |
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() |
