aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/declarative/qdeclarativeincubator
diff options
context:
space:
mode:
authorAaron Kennedy <aaron.kennedy@nokia.com>2011-10-05 18:15:03 +1000
committerQt by Nokia <qt-info@nokia.com>2011-10-06 07:55:45 +0200
commit6028d8ebceccc4edd7c31ba0d16773ae866336c3 (patch)
tree630de9c420b10b7f3b4146f2847962a878e915d4 /tests/auto/declarative/qdeclarativeincubator
parent466fe00e80fe80c0babc7b895882926c0a34b785 (diff)
Always delete object if incubator is cancelled
Change-Id: Iad04340bac9d1345069e540e6bf9dbf671ce9226 Reviewed-on: http://codereview.qt-project.org/6088 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Aaron Kennedy <aaron.kennedy@nokia.com>
Diffstat (limited to 'tests/auto/declarative/qdeclarativeincubator')
-rw-r--r--tests/auto/declarative/qdeclarativeincubator/data/clearDuringCompletion.qml6
-rw-r--r--tests/auto/declarative/qdeclarativeincubator/testtypes.cpp25
-rw-r--r--tests/auto/declarative/qdeclarativeincubator/testtypes.h17
-rw-r--r--tests/auto/declarative/qdeclarativeincubator/tst_qdeclarativeincubator.cpp31
4 files changed, 79 insertions, 0 deletions
diff --git a/tests/auto/declarative/qdeclarativeincubator/data/clearDuringCompletion.qml b/tests/auto/declarative/qdeclarativeincubator/data/clearDuringCompletion.qml
new file mode 100644
index 0000000000..556f460d58
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeincubator/data/clearDuringCompletion.qml
@@ -0,0 +1,6 @@
+import Qt.test 1.0
+
+SelfRegistering {
+ property variant a: CompletionRegistering {}
+ property variant b: CompletionRegistering {}
+}
diff --git a/tests/auto/declarative/qdeclarativeincubator/testtypes.cpp b/tests/auto/declarative/qdeclarativeincubator/testtypes.cpp
index c1f07acb76..3ff15a71af 100644
--- a/tests/auto/declarative/qdeclarativeincubator/testtypes.cpp
+++ b/tests/auto/declarative/qdeclarativeincubator/testtypes.cpp
@@ -58,7 +58,32 @@ void SelfRegisteringType::clearMe()
m_me = 0;
}
+CompletionRegisteringType *CompletionRegisteringType::m_me = 0;
+CompletionRegisteringType::CompletionRegisteringType()
+{
+}
+
+void CompletionRegisteringType::classBegin()
+{
+}
+
+void CompletionRegisteringType::componentComplete()
+{
+ m_me = this;
+}
+
+CompletionRegisteringType *CompletionRegisteringType::me()
+{
+ return m_me;
+}
+
+void CompletionRegisteringType::clearMe()
+{
+ m_me = 0;
+}
+
void registerTypes()
{
qmlRegisterType<SelfRegisteringType>("Qt.test", 1,0, "SelfRegistering");
+ qmlRegisterType<CompletionRegisteringType>("Qt.test", 1,0, "CompletionRegistering");
}
diff --git a/tests/auto/declarative/qdeclarativeincubator/testtypes.h b/tests/auto/declarative/qdeclarativeincubator/testtypes.h
index a023410d1a..85ee4a6a9b 100644
--- a/tests/auto/declarative/qdeclarativeincubator/testtypes.h
+++ b/tests/auto/declarative/qdeclarativeincubator/testtypes.h
@@ -42,6 +42,7 @@
#define TESTTYPES_H
#include <QtCore/qobject.h>
+#include <QDeclarativeParserStatus>
class SelfRegisteringType : public QObject
{
@@ -62,6 +63,22 @@ private:
int m_v;
};
+class CompletionRegisteringType : public QObject, public QDeclarativeParserStatus
+{
+Q_OBJECT
+public:
+ CompletionRegisteringType();
+
+ virtual void classBegin();
+ virtual void componentComplete();
+
+ static CompletionRegisteringType *me();
+ static void clearMe();
+
+private:
+ static CompletionRegisteringType *m_me;
+};
+
void registerTypes();
#endif // TESTTYPES_H
diff --git a/tests/auto/declarative/qdeclarativeincubator/tst_qdeclarativeincubator.cpp b/tests/auto/declarative/qdeclarativeincubator/tst_qdeclarativeincubator.cpp
index e7fc77784b..f870ffb5cd 100644
--- a/tests/auto/declarative/qdeclarativeincubator/tst_qdeclarativeincubator.cpp
+++ b/tests/auto/declarative/qdeclarativeincubator/tst_qdeclarativeincubator.cpp
@@ -77,6 +77,7 @@ private slots:
void noIncubationController();
void forceCompletion();
void setInitialState();
+ void clearDuringCompletion();
private:
QDeclarativeIncubationController controller;
@@ -395,6 +396,36 @@ void tst_qdeclarativeincubator::setInitialState()
}
}
+void tst_qdeclarativeincubator::clearDuringCompletion()
+{
+ CompletionRegisteringType::clearMe();
+ SelfRegisteringType::clearMe();
+
+ QDeclarativeComponent component(&engine, TEST_FILE("clearDuringCompletion.qml"));
+ QVERIFY(component.isReady());
+
+ QDeclarativeIncubator incubator;
+ component.create(incubator);
+
+ QCOMPARE(incubator.status(), QDeclarativeIncubator::Loading);
+ QVERIFY(CompletionRegisteringType::me() == 0);
+
+ while (CompletionRegisteringType::me() == 0 && incubator.isLoading()) {
+ bool b = false;
+ controller.incubateWhile(&b);
+ }
+
+ QVERIFY(CompletionRegisteringType::me() != 0);
+ QVERIFY(SelfRegisteringType::me() != 0);
+ QVERIFY(incubator.isLoading());
+
+ QPointer<QObject> srt = SelfRegisteringType::me();
+
+ incubator.clear();
+ QVERIFY(incubator.isNull());
+ QVERIFY(srt.isNull());
+}
+
QTEST_MAIN(tst_qdeclarativeincubator)
#include "tst_qdeclarativeincubator.moc"