summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorSami Rosendahl <ext-sami.1.rosendahl@nokia.com>2012-03-27 11:09:10 +0300
committerQt by Nokia <qt-info@nokia.com>2012-03-27 12:49:05 +0200
commitff3595f07fc388dcc2dcadab313451752bf7a122 (patch)
treec17107d9185bda8a69cf85f5274375d50bf8bbec /tests
parent13025c05c7471127873a3dc9928579387d1361ca (diff)
Add deleteLater() test to tst_qmediaplayerbackend
Task-number: QTBUG-24927 Change-Id: Ic58a33aad9038af0325d20bed16d3e70d7e15b5a Reviewed-by: Jason McDonald <jason.mcdonald@nokia.com> Reviewed-by: Michael Goddard <michael.goddard@nokia.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp52
1 files changed, 52 insertions, 0 deletions
diff --git a/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp b/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp
index d40dd2253..d12f5ad41 100644
--- a/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp
+++ b/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp
@@ -73,6 +73,7 @@ private slots:
void unloadMedia();
void playPauseStop();
void processEOS();
+ void deleteLaterAtEOS();
void volumeAndMuted();
void volumeAcrossFiles_data();
void volumeAcrossFiles();
@@ -379,6 +380,57 @@ void tst_QMediaPlayerBackend::processEOS()
statusSpy.last()[0].value<QMediaPlayer::MediaStatus>() == QMediaPlayer::LoadedMedia);
}
+// Helper class for tst_QMediaPlayerBackend::deleteLaterAtEOS()
+class DeleteLaterAtEos : public QObject
+{
+ Q_OBJECT
+public:
+ DeleteLaterAtEos(QMediaPlayer* p) : player(p)
+ {
+ }
+
+public slots:
+ void play()
+ {
+ QVERIFY(connect(player, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)),
+ this, SLOT(onMediaStatusChanged(QMediaPlayer::MediaStatus))));
+ player->play();
+ }
+
+private slots:
+ void onMediaStatusChanged(QMediaPlayer::MediaStatus status)
+ {
+ if (status == QMediaPlayer::EndOfMedia) {
+ player-> deleteLater();
+ player = 0;
+ }
+ }
+
+private:
+ QMediaPlayer* player;
+};
+
+// Regression test for
+// QTBUG-24927 - deleteLater() called to QMediaPlayer from its signal handler does not work as expected
+void tst_QMediaPlayerBackend::deleteLaterAtEOS()
+{
+ QPointer<QMediaPlayer> player(new QMediaPlayer);
+ DeleteLaterAtEos deleter(player);
+ player->setMedia(localWavFile);
+
+ // Create an event loop for verifying deleteLater behavior instead of using
+ // QTRY_VERIFY or QTest::qWait. QTest::qWait makes extra effort to process
+ // DeferredDelete events during the wait, which interferes with this test.
+ QEventLoop loop;
+ QTimer::singleShot(0, &deleter, SLOT(play()));
+ QTimer::singleShot(5000, &loop, SLOT(quit()));
+ connect(player.data(), SIGNAL(destroyed()), &loop, SLOT(quit()));
+ loop.exec();
+ // Verify that the player was destroyed within the event loop.
+ // This check will fail without the fix for QTBUG-24927.
+ QVERIFY(player.isNull());
+}
+
void tst_QMediaPlayerBackend::volumeAndMuted()
{
//volume and muted properties should be independent