From f9fbe137c701941548a16ae81651d2ad21956774 Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Mon, 3 Feb 2025 17:46:00 +0100 Subject: QmlCompiler: Extend the listConversion test The actual conversion code suggests that we may be creating a shared list property. However, the assignment code internally won't let that happen. Test as much. Amends commit 3108c58b97074b68ba48f452955727c67c4f77bc Task-number: QTBUG-133047 Change-Id: I66f0f043e0dabd2693aa50a30478461a5db5c5ad Reviewed-by: Fabian Kosmale Reviewed-by: Sami Shalayel --- tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp | 36 ++++++++++++++++++++++ 1 file changed, 36 insertions(+) (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 61999b5eec..7bbaa0ec19 100644 --- a/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp +++ b/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp @@ -3239,6 +3239,42 @@ void tst_QmlCppCodegen::listConversion() QCOMPARE(nulls.count(&nulls), 2); QCOMPARE(nulls.at(&nulls, 0), nullptr); QCOMPARE(nulls.at(&nulls, 1), nullptr); + + QObject *src = o->property("src").value(); + QVERIFY(src); + + QCOMPARE(src->property("numbers").value>(), (QList{1, 2})); + + QQmlListProperty srcObjects + = src->property("objects").value>(); + QVERIFY(srcObjects.object != objects.object); + const QObjectList oldObjects = objects.toList(); + QCOMPARE(srcObjects.toList(), oldObjects); + + QQmlListProperty srcBindings + = src->property("bindings").value>(); + QVERIFY(srcBindings.object != bindings.object); + const QObjectList oldBindings = bindings.toList(); + QCOMPARE(srcBindings.toList(), oldBindings); + + QMetaObject::invokeMethod(o.data(), "shuffle"); + + QCOMPARE(o->property("numbers").value>(), (QList{1, 3})); + + // List properties stay intact + QCOMPARE(objects.count(&objects), 2); + QCOMPARE(objects.at(&objects, 1), o.data()); + QCOMPARE(bindings.count(&bindings), 2); + QCOMPARE(bindings.at(&bindings, 1), nullptr); + QCOMPARE(objectsFromBindings.count(&objectsFromBindings), 2); + QCOMPARE(objectsFromBindings.at(&objectsFromBindings, 1), o.data()); + QCOMPARE(nulls.count(&nulls), 2); + QCOMPARE(nulls.at(&nulls, 1), nullptr); + + // Changes did not propagate back to the source + QCOMPARE(src->property("numbers").value>(), (QList{1, 2})); + QCOMPARE(srcObjects.toList(), oldObjects); + QCOMPARE(srcBindings.toList(), oldBindings); } void tst_QmlCppCodegen::listIndices() -- cgit v1.2.3