diff options
author | Mikolaj Boc <mikolaj.boc@qt.io> | 2023-04-17 16:25:40 +0200 |
---|---|---|
committer | Mikołaj Boc <Mikolaj.Boc@qt.io> | 2023-04-22 07:10:04 +0000 |
commit | 7656d4922c1ce8ed471dbac363d5ede8a649b622 (patch) | |
tree | 632b726cf2a94f9ee49c7f41335cd3e9e3c8aaca /tests/auto/qml/qqmlproperty | |
parent | 528807e80c7b9280642457fc21799074e7e3f963 (diff) |
Only signal list variable assignment once
Lists are internally cleared and each element is pushed to the back
from the source list in QML. Use nonsignaling operations for clear
and push and activate manually having performed the operations.
Fixes: QTBUG-112208
Change-Id: I1a995905f3fa758e4cc8c39b8576db668d84a067
Reviewed-by: Mikołaj Boc <Mikolaj.Boc@qt.io>
Diffstat (limited to 'tests/auto/qml/qqmlproperty')
-rw-r--r-- | tests/auto/qml/qqmlproperty/data/listAssignmentSignals.qml | 13 | ||||
-rw-r--r-- | tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp | 16 |
2 files changed, 29 insertions, 0 deletions
diff --git a/tests/auto/qml/qqmlproperty/data/listAssignmentSignals.qml b/tests/auto/qml/qqmlproperty/data/listAssignmentSignals.qml new file mode 100644 index 0000000000..8a2c68ab5d --- /dev/null +++ b/tests/auto/qml/qqmlproperty/data/listAssignmentSignals.qml @@ -0,0 +1,13 @@ +import QtQuick 2.0 + +Item { + property int signalCounter: 0 + property list<QtObject> sourceList: [ QtObject{}, QtObject{}, QtObject{} ] + property list<QtObject> targetList1: sourceList + + onTargetList1Changed: signalCounter++ + + function assignList() { + targetList1 = sourceList + } +} diff --git a/tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp b/tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp index 88c34f0e22..a636fe2292 100644 --- a/tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp +++ b/tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp @@ -217,6 +217,9 @@ private slots: void bindToNonQObjectTarget(); void assignVariantList(); + + void listAssignmentSignals(); + private: QQmlEngine engine; }; @@ -2544,6 +2547,19 @@ void tst_qqmlproperty::assignVariantList() QCOMPARE(holder->doubleList(), doubleList); } +void tst_qqmlproperty::listAssignmentSignals() +{ + QQmlEngine engine; + QQmlComponent component(&engine, testFileUrl("listAssignmentSignals.qml")); + QVERIFY2(component.isReady(), qPrintable(component.errorString())); + QScopedPointer<QObject> root(component.create()); + QVERIFY(!root.isNull()); + + QCOMPARE(root->property("signalCounter").toInt(), 1); + QMetaObject::invokeMethod(root.get(), "assignList"); + QCOMPARE(root->property("signalCounter").toInt(), 2); +} + QTEST_MAIN(tst_qqmlproperty) #include "tst_qqmlproperty.moc" |