diff options
Diffstat (limited to 'tests/auto/quick/qquickanimatedimage/tst_qquickanimatedimage.cpp')
-rw-r--r-- | tests/auto/quick/qquickanimatedimage/tst_qquickanimatedimage.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/tests/auto/quick/qquickanimatedimage/tst_qquickanimatedimage.cpp b/tests/auto/quick/qquickanimatedimage/tst_qquickanimatedimage.cpp index 3e5a054cc7..8026bafb9e 100644 --- a/tests/auto/quick/qquickanimatedimage/tst_qquickanimatedimage.cpp +++ b/tests/auto/quick/qquickanimatedimage/tst_qquickanimatedimage.cpp @@ -67,6 +67,7 @@ private slots: void progressAndStatusChanges(); void playingAndPausedChanges(); void noCaching(); + void sourceChangesOnFrameChanged(); }; void tst_qquickanimatedimage::cleanup() @@ -590,6 +591,33 @@ void tst_qquickanimatedimage::noCaching() } } +void tst_qquickanimatedimage::sourceChangesOnFrameChanged() +{ + QQmlEngine engine; + QQmlComponent component(&engine, testFileUrl("colors.qml")); + QVector<QQuickAnimatedImage*> images; + + // Run multiple animations in parallel, this should be fast + for (int loops = 0; loops < 25; ++loops) { + QQuickAnimatedImage *anim = qobject_cast<QQuickAnimatedImage *>(component.create()); + + // QTBUG-67427: this should not produce a segfault + QObject::connect(anim, + &QQuickAnimatedImage::frameChanged, + [this, anim]() { anim->setSource(testFileUrl("hearts.gif")); }); + + QVERIFY(anim); + QVERIFY(anim->isPlaying()); + + images.append(anim); + } + + for (auto *anim : images) + QTRY_COMPARE(anim->source(), testFileUrl("hearts.gif")); + + qDeleteAll(images); +} + QTEST_MAIN(tst_qquickanimatedimage) #include "tst_qquickanimatedimage.moc" |