diff options
author | Peter Kümmel <syntheticpp@gmx.net> | 2012-09-20 10:50:23 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2012-09-25 23:11:21 +0200 |
commit | 770ef3867e7b7d8591f6a75783ee9ed1ce2da2d4 (patch) | |
tree | 6d73b5e67169041c9950b806a98f12dd94c65748 /tests/auto/declarative | |
parent | 872d6aff3ea96d548e0bad99def669b803368a36 (diff) |
Revert "Delete JS-owned QML objects right away in the engine dtor."
This reverts commit ecc432a5b7ae269220f86c6f0b3dd364f8643191
to fix a crash on exit.
Task-number: QTBUG-20377
Change-Id: I6606ff194f2c16e06bdbbfca94e55821cf055f75
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com>
Diffstat (limited to 'tests/auto/declarative')
3 files changed, 1 insertions, 62 deletions
diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/jsOwnedObjectsDeletedOnEngineDestroy.qml b/tests/auto/declarative/qdeclarativeecmascript/data/jsOwnedObjectsDeletedOnEngineDestroy.qml deleted file mode 100644 index da1b682d1e..0000000000 --- a/tests/auto/declarative/qdeclarativeecmascript/data/jsOwnedObjectsDeletedOnEngineDestroy.qml +++ /dev/null @@ -1,6 +0,0 @@ -import QtQuick 1.0 - -Item { - property variant jsOwnedObject1: deleteObject.object1() - property variant jsOwnedObject2: deleteObject.object2 -} diff --git a/tests/auto/declarative/qdeclarativeecmascript/testtypes.h b/tests/auto/declarative/qdeclarativeecmascript/testtypes.h index 3d0d37fba9..19505e1458 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/testtypes.h +++ b/tests/auto/declarative/qdeclarativeecmascript/testtypes.h @@ -903,27 +903,6 @@ protected: qreal m_p4; }; -class MyDeleteObject : public QObject -{ - Q_OBJECT - Q_PROPERTY(QObject *object2 READ object2 NOTIFY object2Changed) - -public: - MyDeleteObject() : m_object1(0), m_object2(0) {} - - Q_INVOKABLE QObject *object1() const { return m_object1; } - Q_INVOKABLE QObject *object2() const { return m_object2; } - void setObject1(QObject *object) { m_object1 = object; } - void setObject2(QObject *object) { m_object2 = object; emit object2Changed(); } - -signals: - void object2Changed(); - -private: - QObject *m_object1; - QObject *m_object2; -}; - QML_DECLARE_TYPE(MyRevisionedBaseClassRegistered) QML_DECLARE_TYPE(MyRevisionedBaseClassUnregistered) QML_DECLARE_TYPE(MyRevisionedClass) diff --git a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp index 188cf1b52a..1c54494325 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp +++ b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp @@ -48,7 +48,6 @@ #include <QtDeclarative/private/qdeclarativeguard_p.h> #include <QtCore/qdir.h> #include <QtCore/qnumeric.h> -#include <QtTest/qsignalspy.h> #include <private/qdeclarativeengine_p.h> #include <private/qdeclarativeglobalscriptclass_p.h> #include <private/qscriptdeclarativeclass_p.h> @@ -179,7 +178,6 @@ private slots: void pushCleanContext(); void realToInt(); void qtbug_20648(); - void jsOwnedObjectsDeletedOnEngineDestroy(); void include(); @@ -1390,7 +1388,7 @@ void tst_qdeclarativeecmascript::callQtInvokables() QDeclarativeEngine qmlengine; QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(&qmlengine); - QScriptEngine *engine = ep->scriptEngine; + QScriptEngine *engine = &ep->scriptEngine; QStringList names; QList<QScriptValue> values; names << QLatin1String("object"); values << ep->objectClass->newQObject(&o); @@ -3102,38 +3100,6 @@ void tst_qdeclarativeecmascript::qtbug_20648() delete o; } -void tst_qdeclarativeecmascript::jsOwnedObjectsDeletedOnEngineDestroy() -{ - QDeclarativeEngine *myEngine = new QDeclarativeEngine; - - MyDeleteObject deleteObject; - deleteObject.setObjectName("deleteObject"); - QObject * const object1 = new QObject; - QObject * const object2 = new QObject; - object1->setObjectName("object1"); - object2->setObjectName("object2"); - deleteObject.setObject1(object1); - deleteObject.setObject2(object2); - - // Objects returned by function calls get marked as destructible, but objects returned by - // property getters do not - therefore we explicitly set the object as destructible. - QDeclarativeEngine::setObjectOwnership(object2, QDeclarativeEngine::JavaScriptOwnership); - - myEngine->rootContext()->setContextProperty("deleteObject", &deleteObject); - QDeclarativeComponent component(myEngine, TEST_FILE("jsOwnedObjectsDeletedOnEngineDestroy.qml")); - QObject *object = component.create(); - QVERIFY(object); - - // Destroying the engine should delete all JS owned QObjects - QSignalSpy spy1(object1, SIGNAL(destroyed())); - QSignalSpy spy2(object2, SIGNAL(destroyed())); - delete myEngine; - QCOMPARE(spy1.count(), 1); - QCOMPARE(spy2.count(), 1); - - delete object; -} - QTEST_MAIN(tst_qdeclarativeecmascript) #include "tst_qdeclarativeecmascript.moc" |