aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@qt.io>2017-04-19 14:29:21 +0200
committerErik Verbruggen <erik.verbruggen@qt.io>2017-04-19 13:05:39 +0000
commit749a7212e903d8e8c6f256edb1836b9449cc7fe1 (patch)
treeef272ac1c5ec29b44a98858ce6a510ca2a794c36 /tests
parent6a8a7e60ab91f958a1dd63e787a23f6e09f463b1 (diff)
QML: clear the property cache on QObjectWrapper destuction
If an external QObject is exposed to an engine through a QObjectWrapper, make sure to deref and clear the propertyCache reference in the object's declarative data when the QObjectWrapper is destroyed. This makes sure that there is no dangling propertyCache pointer when the object is subsequently exposed to another engine. Task-number: QTBUG-57633 Change-Id: I37f6793d8be65b23b4e81bb4ed91db18271261b0 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/qml/qjsengine/tst_qjsengine.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/tests/auto/qml/qjsengine/tst_qjsengine.cpp b/tests/auto/qml/qjsengine/tst_qjsengine.cpp
index 82bc3d0c59..2642d10545 100644
--- a/tests/auto/qml/qjsengine/tst_qjsengine.cpp
+++ b/tests/auto/qml/qjsengine/tst_qjsengine.cpp
@@ -29,6 +29,7 @@
#include <QtTest/QtTest>
+#include <private/qqmldata_p.h>
#include <qjsengine.h>
#include <qjsvalueiterator.h>
#include <qgraphicsitem.h>
@@ -73,6 +74,7 @@ private slots:
void newQObject();
void newQObject_ownership();
void newQObject_deletedEngine();
+ void newQObjectPropertyCache();
void newQMetaObject();
void exceptionInSlot();
void globalObjectProperties();
@@ -757,6 +759,19 @@ private:
int m_called;
};
+void tst_QJSEngine::newQObjectPropertyCache()
+{
+ QScopedPointer<QObject> obj(new QObject);
+ QQmlEngine::setObjectOwnership(obj.data(), QQmlEngine::CppOwnership);
+
+ {
+ QJSEngine engine;
+ engine.newQObject(obj.data());
+ QVERIFY(QQmlData::get(obj.data())->propertyCache);
+ }
+ QVERIFY(!QQmlData::get(obj.data())->propertyCache);
+}
+
void tst_QJSEngine::newQMetaObject() {
{
QJSEngine engine;