aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/declarative/qjsengine/tst_qjsengine.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@nokia.com>2011-07-29 16:04:26 +0200
committerQt by Nokia <qt-info@nokia.com>2011-10-06 10:44:27 +0200
commitab989615c05bbf15ef7f5b91d3daaf2423a490ea (patch)
tree93a5814dd4b62acacd772aad6fb23656c345138b /tests/auto/declarative/qjsengine/tst_qjsengine.cpp
parent6e7ea2fc3823cb13a366845efe32050b9adefffb (diff)
Fix QJSEngine::newQObject ownership behaviour
Ensure the indestructible flag is set to false for objects wrapped through QJSEngine::newQObject, to ensure that they get deleted upon gc when they don't have a parent. Re-enabled the QJSEngine::garbageCollect and ownership auto-tests that verified this behaviour. Change-Id: I181bff0cc44d071d650a2f73494e49cce6ad538e Reviewed-on: http://codereview.qt-project.org/2398 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Simon Hausmann <simon.hausmann@nokia.com>
Diffstat (limited to 'tests/auto/declarative/qjsengine/tst_qjsengine.cpp')
-rw-r--r--tests/auto/declarative/qjsengine/tst_qjsengine.cpp40
1 files changed, 18 insertions, 22 deletions
diff --git a/tests/auto/declarative/qjsengine/tst_qjsengine.cpp b/tests/auto/declarative/qjsengine/tst_qjsengine.cpp
index 6907fb01c7..6b18bacb96 100644
--- a/tests/auto/declarative/qjsengine/tst_qjsengine.cpp
+++ b/tests/auto/declarative/qjsengine/tst_qjsengine.cpp
@@ -182,9 +182,7 @@ private slots:
void castWithPrototypeChain();
#endif
void castWithMultipleInheritance();
-#if 0 // ###FIXME: ScriptOwnership
void collectGarbage();
-#endif
#if 0 // ###FIXME: no reportAdditionalMemoryCost API
void reportAdditionalMemoryCost();
#endif
@@ -965,34 +963,33 @@ void tst_QJSEngine::newQObject()
void tst_QJSEngine::newQObject_ownership()
{
-#if 0 // FIXME: ownership tests need to be revivewed
- QScriptEngine eng;
+ QJSEngine eng;
{
QPointer<QObject> ptr = new QObject();
QVERIFY(ptr != 0);
{
- QScriptValue v = eng.newQObject(ptr, QScriptEngine::ScriptOwnership);
+ QJSValue v = eng.newQObject(ptr);
}
- eng.evaluate("gc()");
+ collectGarbage_helper(eng);
if (ptr)
- QEXPECT_FAIL("", "In the JSC-based back-end, script-owned QObjects are not always deleted immediately during GC", Continue);
+ QApplication::sendPostedEvents(ptr, QEvent::DeferredDelete);
QVERIFY(ptr == 0);
}
{
- QPointer<QObject> ptr = new QObject();
+ QPointer<QObject> ptr = new QObject(this);
QVERIFY(ptr != 0);
{
- QScriptValue v = eng.newQObject(ptr, QScriptEngine::QtOwnership);
+ QJSValue v = eng.newQObject(ptr);
}
QObject *before = ptr;
- eng.evaluate("gc()");
+ collectGarbage_helper(eng);
QVERIFY(ptr == before);
delete ptr;
}
{
QObject *parent = new QObject();
QObject *child = new QObject(parent);
- QScriptValue v = eng.newQObject(child, QScriptEngine::QtOwnership);
+ QJSValue v = eng.newQObject(child);
QCOMPARE(v.toQObject(), child);
delete parent;
QCOMPARE(v.toQObject(), (QObject *)0);
@@ -1001,12 +998,12 @@ void tst_QJSEngine::newQObject_ownership()
QPointer<QObject> ptr = new QObject();
QVERIFY(ptr != 0);
{
- QScriptValue v = eng.newQObject(ptr, QScriptEngine::AutoOwnership);
+ QJSValue v = eng.newQObject(ptr);
}
- eng.evaluate("gc()");
+ collectGarbage_helper(eng);
// no parent, so it should be like ScriptOwnership
if (ptr)
- QEXPECT_FAIL("", "In the JSC-based back-end, script-owned QObjects are not always deleted immediately during GC", Continue);
+ QApplication::sendPostedEvents(ptr, QEvent::DeferredDelete);
QVERIFY(ptr == 0);
}
{
@@ -1014,14 +1011,13 @@ void tst_QJSEngine::newQObject_ownership()
QPointer<QObject> child = new QObject(parent);
QVERIFY(child != 0);
{
- QScriptValue v = eng.newQObject(child, QScriptEngine::AutoOwnership);
+ QJSValue v = eng.newQObject(child);
}
- eng.evaluate("gc()");
+ collectGarbage_helper(eng);
// has parent, so it should be like QtOwnership
QVERIFY(child != 0);
delete parent;
}
-#endif
}
void tst_QJSEngine::newQObject_promoteObject()
@@ -3097,21 +3093,21 @@ void tst_QJSEngine::castWithMultipleInheritance()
QCOMPARE(qjsvalue_cast<QGraphicsItem*>(v), (QGraphicsItem *)&klz);
}
-#if 0 // ###FIXME: ScriptOwnership
void tst_QJSEngine::collectGarbage()
{
- QScriptEngine eng;
+ QJSEngine eng;
eng.evaluate("a = new Object(); a = new Object(); a = new Object()");
- QScriptValue a = eng.newObject();
+ QJSValue a = eng.newObject();
a = eng.newObject();
a = eng.newObject();
QPointer<QObject> ptr = new QObject();
QVERIFY(ptr != 0);
- (void)eng.newQObject(ptr, QScriptEngine::ScriptOwnership);
+ (void)eng.newQObject(ptr);
collectGarbage_helper(eng);
+ if (ptr)
+ QApplication::sendPostedEvents(ptr, QEvent::DeferredDelete);
QVERIFY(ptr == 0);
}
-#endif
#if 0 // ###FIXME: no reportAdditionalMemoryCost API
void tst_QJSEngine::reportAdditionalMemoryCost()