diff options
author | Martin Jones <martin.jones@nokia.com> | 2010-04-23 11:52:06 +1000 |
---|---|---|
committer | Martin Jones <martin.jones@nokia.com> | 2010-04-23 11:52:06 +1000 |
commit | 92e7f06b3690e6e39af8fac7af6c101b416b0f4c (patch) | |
tree | e8ad882eb106b083cfe70b015f8aeaef15f04ca3 /tests/auto/declarative/qdeclarativeconnection | |
parent | af3c75a63e9b7dd9725443a8e23114f825c6d12b (diff) | |
download | qt4-tools-92e7f06b3690e6e39af8fac7af6c101b416b0f4c.tar.gz |
Don't crash if Connections::target is changed by one of its signal handlers
Reviewed-by: Michael Brasser
Diffstat (limited to 'tests/auto/declarative/qdeclarativeconnection')
-rw-r--r-- | tests/auto/declarative/qdeclarativeconnection/data/connection-targetchange.qml | 25 | ||||
-rw-r--r-- | tests/auto/declarative/qdeclarativeconnection/tst_qdeclarativeconnection.cpp | 26 |
2 files changed, 51 insertions, 0 deletions
diff --git a/tests/auto/declarative/qdeclarativeconnection/data/connection-targetchange.qml b/tests/auto/declarative/qdeclarativeconnection/data/connection-targetchange.qml new file mode 100644 index 0000000000..bb9a3bc0e7 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeconnection/data/connection-targetchange.qml @@ -0,0 +1,25 @@ +import Qt 4.7 + +Item { + Component { + id: item1 + Item { + objectName: "item1" + } + } + Component { + id: item2 + Item { + objectName: "item2" + } + } + Loader { + id: loader + sourceComponent: item1 + } + Connections { + objectName: "connections" + target: loader.item + onWidthChanged: loader.sourceComponent = item2 + } +} diff --git a/tests/auto/declarative/qdeclarativeconnection/tst_qdeclarativeconnection.cpp b/tests/auto/declarative/qdeclarativeconnection/tst_qdeclarativeconnection.cpp index f4914e172f..0efae3b9d2 100644 --- a/tests/auto/declarative/qdeclarativeconnection/tst_qdeclarativeconnection.cpp +++ b/tests/auto/declarative/qdeclarativeconnection/tst_qdeclarativeconnection.cpp @@ -58,6 +58,7 @@ private slots: void properties(); void connection(); void trimming(); + void targetChanged(); private: QDeclarativeEngine engine; @@ -130,6 +131,31 @@ void tst_qdeclarativeconnection::trimming() delete item; } +// Confirm that target can be changed by one of our signal handlers +void tst_qdeclarativeconnection::targetChanged() +{ + QDeclarativeEngine engine; + QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/connection-targetchange.qml")); + QDeclarativeItem *item = qobject_cast<QDeclarativeItem*>(c.create()); + QVERIFY(item != 0); + + QDeclarativeConnections *connections = item->findChild<QDeclarativeConnections*>("connections"); + QVERIFY(connections); + + QDeclarativeItem *item1 = item->findChild<QDeclarativeItem*>("item1"); + QVERIFY(item1); + + item1->setWidth(200); + + QDeclarativeItem *item2 = item->findChild<QDeclarativeItem*>("item2"); + QVERIFY(item2); + QVERIFY(connections->target() == item2); + + // If we don't crash then we're OK + + delete item; +} + QTEST_MAIN(tst_qdeclarativeconnection) #include "tst_qdeclarativeconnection.moc" |