aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/quick/qquickanimations/tst_qquickanimations.cpp
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2015-12-07 09:04:00 +0100
committerPaul Lemire <paul.lemire@kdab.com>2015-12-07 14:54:18 +0000
commitf9f99c43fbea600f61d065b30a5453e95dfa6ade (patch)
tree038fc2abe32b84a4b8053fd37f0357c03d3f3e72 /tests/auto/quick/qquickanimations/tst_qquickanimations.cpp
parent94e9fab2d81d076fd59a6a5a4d4ef093f37e05f9 (diff)
QQuickAnimatorJob: store the target with a QPointer
This avoids ending up with invalid pointers when under some circumstances the target (which is not owned by the QQuickAnimatorJob) is destroyed between the time the QQuickAnimatorJob is created and the time it is initialized. This is the case when the target of an Animator is the item loaded by a Loader and that the animator is started just before setting the Loader to inactive. Also added an auto test for that special case. Task-number: QTBUG-49634 Change-Id: Iab9bfe76d13755ba735432c6f97bde175d308814 Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com> Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
Diffstat (limited to 'tests/auto/quick/qquickanimations/tst_qquickanimations.cpp')
-rw-r--r--tests/auto/quick/qquickanimations/tst_qquickanimations.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/tests/auto/quick/qquickanimations/tst_qquickanimations.cpp b/tests/auto/quick/qquickanimations/tst_qquickanimations.cpp
index 2b805e9eeb..d234cd2d94 100644
--- a/tests/auto/quick/qquickanimations/tst_qquickanimations.cpp
+++ b/tests/auto/quick/qquickanimations/tst_qquickanimations.cpp
@@ -104,6 +104,7 @@ private slots:
void scriptActionBug();
void groupAnimationNullChildBug();
void scriptActionCrash();
+ void animatorInvalidTargetCrash();
};
#define QTIMED_COMPARE(lhs, rhs) do { \
@@ -1491,7 +1492,21 @@ void tst_qquickanimations::scriptActionCrash()
delete obj;
}
+// QTBUG-49364
+// Test that we don't crash when the target of an Animator becomes
+// invalid between the time the animator is started and the time the
+// animator job is actually started
+void tst_qquickanimations::animatorInvalidTargetCrash()
+{
+ QQmlEngine engine;
+ QQmlComponent c(&engine, testFileUrl("animatorInvalidTargetCrash.qml"));
+ QObject *obj = c.create();
+ //just testing that we don't crash
+ QTest::qWait(5000); //animator duration
+
+ delete obj;
+}
QTEST_MAIN(tst_qquickanimations)