diff options
author | Michael Brasser <michael.brasser@nokia.com> | 2011-08-03 11:01:52 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-08-03 03:42:01 +0200 |
commit | 5084c274aac111db3f5f0c38258aa06aa9448bda (patch) | |
tree | 735d55289177451d08a8ff375b0f2f9cebf1883b /tests/auto/declarative/qdeclarativebinding | |
parent | 73aa113181fa2295729d24317c187661f740b898 (diff) |
Prevent Binding from crashing when its target object is deleted.
Task-number: QTBUG-20692
Change-Id: Ia9a3d532c45baf01b8c20c7aac9ef373942a75d8
Reviewed-on: http://codereview.qt.nokia.com/2531
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Martin Jones <martin.jones@nokia.com>
Diffstat (limited to 'tests/auto/declarative/qdeclarativebinding')
-rw-r--r-- | tests/auto/declarative/qdeclarativebinding/data/deletedObject.qml | 24 | ||||
-rw-r--r-- | tests/auto/declarative/qdeclarativebinding/tst_qdeclarativebinding.cpp | 17 |
2 files changed, 41 insertions, 0 deletions
diff --git a/tests/auto/declarative/qdeclarativebinding/data/deletedObject.qml b/tests/auto/declarative/qdeclarativebinding/data/deletedObject.qml new file mode 100644 index 0000000000..f9cf869ba3 --- /dev/null +++ b/tests/auto/declarative/qdeclarativebinding/data/deletedObject.qml @@ -0,0 +1,24 @@ +import QtQuick 2.0 + +Rectangle { + id: wrapper + width: 400 + height: 400 + + property bool activateBinding: false + + Binding { + id: binding + target: Qt.createQmlObject('import QtQuick 2.0; Item { property real value: 10 }', wrapper) + property: "value" + when: activateBinding + value: x + y + } + + Component.onCompleted: binding.target.destroy(); + +// MouseArea { +// anchors.fill: parent +// onClicked: activateBinding = true; +// } +} diff --git a/tests/auto/declarative/qdeclarativebinding/tst_qdeclarativebinding.cpp b/tests/auto/declarative/qdeclarativebinding/tst_qdeclarativebinding.cpp index 2e64fed0ed..3effd68b39 100644 --- a/tests/auto/declarative/qdeclarativebinding/tst_qdeclarativebinding.cpp +++ b/tests/auto/declarative/qdeclarativebinding/tst_qdeclarativebinding.cpp @@ -62,6 +62,7 @@ private slots: void whenAfterValue(); void restoreBinding(); void restoreBindingWithLoop(); + void deletedObject(); private: QDeclarativeEngine engine; @@ -179,6 +180,22 @@ void tst_qdeclarativebinding::restoreBindingWithLoop() delete rect; } +//QTBUG-20692 +void tst_qdeclarativebinding::deletedObject() +{ + QDeclarativeEngine engine; + QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/deletedObject.qml")); + QSGRectangle *rect = qobject_cast<QSGRectangle*>(c.create()); + QVERIFY(rect != 0); + + QApplication::sendPostedEvents(0, QEvent::DeferredDelete); + + //don't crash + rect->setProperty("activateBinding", true); + + delete rect; +} + QTEST_MAIN(tst_qdeclarativebinding) #include "tst_qdeclarativebinding.moc" |