summaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
authorAaron Kennedy <aaron.kennedy@nokia.com>2010-04-08 08:24:48 (GMT)
committerAaron Kennedy <aaron.kennedy@nokia.com>2010-04-08 08:24:48 (GMT)
commit978c56d47a6436fab9ab239bc81cdbf245b9ab10 (patch)
tree9f53ad0dc50407baa554644db60f19e9a9e6f011 /tests/auto
parent3e299066d0270100331973ff202209c94cf362de (diff)
downloadQt-978c56d47a6436fab9ab239bc81cdbf245b9ab10.zip
Qt-978c56d47a6436fab9ab239bc81cdbf245b9ab10.tar.gz
Qt-978c56d47a6436fab9ab239bc81cdbf245b9ab10.tar.bz2
Don't crash when QML engine is deleted
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/data/deletedEngine.qml11
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp23
2 files changed, 34 insertions, 0 deletions
diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/deletedEngine.qml b/tests/auto/declarative/qdeclarativeecmascript/data/deletedEngine.qml
new file mode 100644
index 0000000..6c538fe
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeecmascript/data/deletedEngine.qml
@@ -0,0 +1,11 @@
+import Qt 4.6
+
+QtObject {
+ function calculate() {
+ return b * 13;
+ }
+
+ property int a: calculate()
+ property int b: 3
+}
+
diff --git a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
index f675801..72f14f9 100644
--- a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
+++ b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
@@ -138,6 +138,7 @@ private slots:
void dynamicCreationCrash();
void regExpBug();
void nullObjectBinding();
+ void deletedEngine();
void callQtInvokables();
private:
@@ -2158,6 +2159,28 @@ void tst_qdeclarativeecmascript::nullObjectBinding()
delete object;
}
+// Test that bindings don't evaluate once the engine has been destroyed
+void tst_qdeclarativeecmascript::deletedEngine()
+{
+ QDeclarativeEngine *engine = new QDeclarativeEngine;
+ QDeclarativeComponent component(engine, TEST_FILE("deletedEngine.qml"));
+
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("a").toInt(), 39);
+ object->setProperty("b", QVariant(9));
+ QCOMPARE(object->property("a").toInt(), 117);
+
+ delete engine;
+
+ QCOMPARE(object->property("a").toInt(), 117);
+ object->setProperty("b", QVariant(10));
+ QCOMPARE(object->property("a").toInt(), 117);
+
+ delete object;
+}
+
QTEST_MAIN(tst_qdeclarativeecmascript)
#include "tst_qdeclarativeecmascript.moc"