diff options
Diffstat (limited to 'tests/auto/declarative/qdeclarativebinding')
-rw-r--r-- | tests/auto/declarative/qdeclarativebinding/data/restoreBindingWithLoop.qml | 23 | ||||
-rw-r--r-- | tests/auto/declarative/qdeclarativebinding/tst_qdeclarativebinding.cpp | 35 |
2 files changed, 58 insertions, 0 deletions
diff --git a/tests/auto/declarative/qdeclarativebinding/data/restoreBindingWithLoop.qml b/tests/auto/declarative/qdeclarativebinding/data/restoreBindingWithLoop.qml new file mode 100644 index 0000000000..ee07104817 --- /dev/null +++ b/tests/auto/declarative/qdeclarativebinding/data/restoreBindingWithLoop.qml @@ -0,0 +1,23 @@ +import QtQuick 2.0 + +Rectangle { + width: 400 + height: 400 + + property bool activateBinding: false + + Rectangle { + id: myItem + objectName: "myItem" + width: 100 + height: 100 + color: "green" + x: myItem.y + 100 + onXChanged: { if (x == 188) y = 90; } //create binding loop + + Binding on x { + when: activateBinding + value: myItem.y + } + } +} diff --git a/tests/auto/declarative/qdeclarativebinding/tst_qdeclarativebinding.cpp b/tests/auto/declarative/qdeclarativebinding/tst_qdeclarativebinding.cpp index 7bfd0e07ff..2e64fed0ed 100644 --- a/tests/auto/declarative/qdeclarativebinding/tst_qdeclarativebinding.cpp +++ b/tests/auto/declarative/qdeclarativebinding/tst_qdeclarativebinding.cpp @@ -61,6 +61,7 @@ private slots: void binding(); void whenAfterValue(); void restoreBinding(); + void restoreBindingWithLoop(); private: QDeclarativeEngine engine; @@ -144,6 +145,40 @@ void tst_qdeclarativebinding::restoreBinding() delete rect; } +void tst_qdeclarativebinding::restoreBindingWithLoop() +{ + QDeclarativeEngine engine; + QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/restoreBindingWithLoop.qml")); + QSGRectangle *rect = qobject_cast<QSGRectangle*>(c.create()); + QVERIFY(rect != 0); + + QSGRectangle *myItem = qobject_cast<QSGRectangle*>(rect->findChild<QSGRectangle*>("myItem")); + QVERIFY(myItem != 0); + + myItem->setY(25); + QCOMPARE(myItem->x(), qreal(25 + 100)); + + myItem->setY(13); + QCOMPARE(myItem->x(), qreal(13 + 100)); + + //Binding takes effect + rect->setProperty("activateBinding", true); + myItem->setY(51); + QCOMPARE(myItem->x(), qreal(51)); + + myItem->setY(88); + QCOMPARE(myItem->x(), qreal(88)); + + //original binding restored + rect->setProperty("activateBinding", false); + QCOMPARE(myItem->x(), qreal(88 + 100)); //if loop handling changes this could be 90 + 100 + + myItem->setY(49); + QCOMPARE(myItem->x(), qreal(49 + 100)); + + delete rect; +} + QTEST_MAIN(tst_qdeclarativebinding) #include "tst_qdeclarativebinding.moc" |