summaryrefslogtreecommitdiffstats
path: root/tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp')
-rw-r--r--tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp273
1 files changed, 228 insertions, 45 deletions
diff --git a/tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp b/tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp
index 8c2d21483..0271f1a8f 100644
--- a/tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp
+++ b/tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp
@@ -1,7 +1,7 @@
/****************************************************************************
**
-** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
**
@@ -10,9 +10,9 @@
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia. For licensing terms and
-** conditions see http://qt.digia.com/licensing. For further information
-** use the contact form at http://qt.digia.com/contact-us.
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
@@ -23,8 +23,8 @@
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
-** In addition, as a special exception, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** $QT_END_LICENSE$
@@ -81,31 +81,46 @@ class tst_QMediaPlayer: public QObject
Q_OBJECT
public slots:
- void initTestCase_data();
void initTestCase();
void cleanupTestCase();
void init();
void cleanup();
private slots:
+ void testNullService_data();
void testNullService();
void testValid();
+ void testMedia_data();
void testMedia();
+ void testDuration_data();
void testDuration();
+ void testPosition_data();
void testPosition();
+ void testVolume_data();
void testVolume();
+ void testMuted_data();
void testMuted();
void testIsAvailable();
+ void testVideoAvailable_data();
void testVideoAvailable();
+ void testBufferStatus_data();
void testBufferStatus();
+ void testSeekable_data();
void testSeekable();
+ void testPlaybackRate_data();
void testPlaybackRate();
+ void testError_data();
void testError();
+ void testErrorString_data();
void testErrorString();
void testService();
+ void testPlay_data();
void testPlay();
+ void testPause_data();
void testPause();
+ void testStop_data();
void testStop();
+ void testMediaStatus_data();
void testMediaStatus();
void testPlaylist();
void testNetworkAccess();
@@ -118,14 +133,18 @@ private slots:
void testPlayerFlags();
void testDestructor();
void testSupportedMimeTypes();
+ void testQrc_data();
+ void testQrc();
private:
+ void setupCommonTestData();
+
MockMediaServiceProvider *mockProvider;
MockMediaPlayerService *mockService;
QMediaPlayer *player;
};
-void tst_QMediaPlayer::initTestCase_data()
+void tst_QMediaPlayer::setupCommonTestData()
{
QTest::addColumn<bool>("valid");
QTest::addColumn<QMediaPlayer::State>("state");
@@ -193,6 +212,11 @@ void tst_QMediaPlayer::cleanup()
delete mockService;
}
+void tst_QMediaPlayer::testNullService_data()
+{
+ setupCommonTestData();
+}
+
void tst_QMediaPlayer::testNullService()
{
mockProvider->service = 0;
@@ -217,7 +241,7 @@ void tst_QMediaPlayer::testNullService()
QCOMPARE(player.availability(), QMultimedia::ServiceMissing);
{
- QFETCH_GLOBAL(QMediaContent, mediaContent);
+ QFETCH(QMediaContent, mediaContent);
QSignalSpy spy(&player, SIGNAL(currentMediaChanged(QMediaContent)));
QFile file;
@@ -249,8 +273,8 @@ void tst_QMediaPlayer::testNullService()
QCOMPARE(stateSpy.count(), 0);
QCOMPARE(statusSpy.count(), 0);
} {
- QFETCH_GLOBAL(int, volume);
- QFETCH_GLOBAL(bool, muted);
+ QFETCH(int, volume);
+ QFETCH(bool, muted);
QSignalSpy volumeSpy(&player, SIGNAL(volumeChanged(int)));
QSignalSpy mutingSpy(&player, SIGNAL(mutedChanged(bool)));
@@ -263,7 +287,7 @@ void tst_QMediaPlayer::testNullService()
QCOMPARE(player.isMuted(), false);
QCOMPARE(mutingSpy.count(), 0);
} {
- QFETCH_GLOBAL(qint64, position);
+ QFETCH(qint64, position);
QSignalSpy spy(&player, SIGNAL(positionChanged(qint64)));
@@ -271,7 +295,7 @@ void tst_QMediaPlayer::testNullService()
QCOMPARE(player.position(), qint64(0));
QCOMPARE(spy.count(), 0);
} {
- QFETCH_GLOBAL(qreal, playbackRate);
+ QFETCH(qreal, playbackRate);
QSignalSpy spy(&player, SIGNAL(playbackRateChanged(qreal)));
@@ -307,16 +331,21 @@ void tst_QMediaPlayer::testNullService()
void tst_QMediaPlayer::testValid()
{
/*
- QFETCH_GLOBAL(bool, valid);
+ QFETCH(bool, valid);
mockService->setIsValid(valid);
QCOMPARE(player->isValid(), valid);
*/
}
+void tst_QMediaPlayer::testMedia_data()
+{
+ setupCommonTestData();
+}
+
void tst_QMediaPlayer::testMedia()
{
- QFETCH_GLOBAL(QMediaContent, mediaContent);
+ QFETCH(QMediaContent, mediaContent);
mockService->setMedia(mediaContent);
QCOMPARE(player->currentMedia(), mediaContent);
@@ -327,20 +356,30 @@ void tst_QMediaPlayer::testMedia()
QCOMPARE((QBuffer*)player->mediaStream(), &stream);
}
+void tst_QMediaPlayer::testDuration_data()
+{
+ setupCommonTestData();
+}
+
void tst_QMediaPlayer::testDuration()
{
- QFETCH_GLOBAL(qint64, duration);
+ QFETCH(qint64, duration);
mockService->setDuration(duration);
QVERIFY(player->duration() == duration);
}
+void tst_QMediaPlayer::testPosition_data()
+{
+ setupCommonTestData();
+}
+
void tst_QMediaPlayer::testPosition()
{
- QFETCH_GLOBAL(bool, valid);
- QFETCH_GLOBAL(bool, seekable);
- QFETCH_GLOBAL(qint64, position);
- QFETCH_GLOBAL(qint64, duration);
+ QFETCH(bool, valid);
+ QFETCH(bool, seekable);
+ QFETCH(qint64, position);
+ QFETCH(qint64, duration);
mockService->setIsValid(valid);
mockService->setSeekable(seekable);
@@ -384,10 +423,15 @@ void tst_QMediaPlayer::testPosition()
}
}
+void tst_QMediaPlayer::testVolume_data()
+{
+ setupCommonTestData();
+}
+
void tst_QMediaPlayer::testVolume()
{
- QFETCH_GLOBAL(bool, valid);
- QFETCH_GLOBAL(int, volume);
+ QFETCH(bool, valid);
+ QFETCH(int, volume);
mockService->setVolume(volume);
QVERIFY(player->volume() == volume);
@@ -415,11 +459,16 @@ void tst_QMediaPlayer::testVolume()
}
}
+void tst_QMediaPlayer::testMuted_data()
+{
+ setupCommonTestData();
+}
+
void tst_QMediaPlayer::testMuted()
{
- QFETCH_GLOBAL(bool, valid);
- QFETCH_GLOBAL(bool, muted);
- QFETCH_GLOBAL(int, volume);
+ QFETCH(bool, valid);
+ QFETCH(bool, muted);
+ QFETCH(int, volume);
if (valid) {
mockService->setMuted(muted);
@@ -434,34 +483,54 @@ void tst_QMediaPlayer::testMuted()
}
}
+void tst_QMediaPlayer::testVideoAvailable_data()
+{
+ setupCommonTestData();
+}
+
void tst_QMediaPlayer::testVideoAvailable()
{
- QFETCH_GLOBAL(bool, videoAvailable);
+ QFETCH(bool, videoAvailable);
mockService->setVideoAvailable(videoAvailable);
QVERIFY(player->isVideoAvailable() == videoAvailable);
}
+void tst_QMediaPlayer::testBufferStatus_data()
+{
+ setupCommonTestData();
+}
+
void tst_QMediaPlayer::testBufferStatus()
{
- QFETCH_GLOBAL(int, bufferStatus);
+ QFETCH(int, bufferStatus);
mockService->setBufferStatus(bufferStatus);
QVERIFY(player->bufferStatus() == bufferStatus);
}
+void tst_QMediaPlayer::testSeekable_data()
+{
+ setupCommonTestData();
+}
+
void tst_QMediaPlayer::testSeekable()
{
- QFETCH_GLOBAL(bool, seekable);
+ QFETCH(bool, seekable);
mockService->setSeekable(seekable);
QVERIFY(player->isSeekable() == seekable);
}
+void tst_QMediaPlayer::testPlaybackRate_data()
+{
+ setupCommonTestData();
+}
+
void tst_QMediaPlayer::testPlaybackRate()
{
- QFETCH_GLOBAL(bool, valid);
- QFETCH_GLOBAL(qreal, playbackRate);
+ QFETCH(bool, valid);
+ QFETCH(qreal, playbackRate);
if (valid) {
mockService->setPlaybackRate(playbackRate);
@@ -474,17 +543,27 @@ void tst_QMediaPlayer::testPlaybackRate()
}
}
+void tst_QMediaPlayer::testError_data()
+{
+ setupCommonTestData();
+}
+
void tst_QMediaPlayer::testError()
{
- QFETCH_GLOBAL(QMediaPlayer::Error, error);
+ QFETCH(QMediaPlayer::Error, error);
mockService->setError(error);
QVERIFY(player->error() == error);
}
+void tst_QMediaPlayer::testErrorString_data()
+{
+ setupCommonTestData();
+}
+
void tst_QMediaPlayer::testErrorString()
{
- QFETCH_GLOBAL(QString, errorString);
+ QFETCH(QString, errorString);
mockService->setErrorString(errorString);
QVERIFY(player->errorString() == errorString);
@@ -499,7 +578,7 @@ void tst_QMediaPlayer::testIsAvailable()
void tst_QMediaPlayer::testService()
{
/*
- QFETCH_GLOBAL(bool, valid);
+ QFETCH(bool, valid);
mockService->setIsValid(valid);
@@ -510,11 +589,16 @@ void tst_QMediaPlayer::testService()
*/
}
+void tst_QMediaPlayer::testPlay_data()
+{
+ setupCommonTestData();
+}
+
void tst_QMediaPlayer::testPlay()
{
- QFETCH_GLOBAL(bool, valid);
- QFETCH_GLOBAL(QMediaContent, mediaContent);
- QFETCH_GLOBAL(QMediaPlayer::State, state);
+ QFETCH(bool, valid);
+ QFETCH(QMediaContent, mediaContent);
+ QFETCH(QMediaPlayer::State, state);
mockService->setIsValid(valid);
mockService->setState(state);
@@ -536,11 +620,16 @@ void tst_QMediaPlayer::testPlay()
}
}
+void tst_QMediaPlayer::testPause_data()
+{
+ setupCommonTestData();
+}
+
void tst_QMediaPlayer::testPause()
{
- QFETCH_GLOBAL(bool, valid);
- QFETCH_GLOBAL(QMediaContent, mediaContent);
- QFETCH_GLOBAL(QMediaPlayer::State, state);
+ QFETCH(bool, valid);
+ QFETCH(QMediaContent, mediaContent);
+ QFETCH(QMediaPlayer::State, state);
mockService->setIsValid(valid);
mockService->setState(state);
@@ -562,10 +651,15 @@ void tst_QMediaPlayer::testPause()
}
}
+void tst_QMediaPlayer::testStop_data()
+{
+ setupCommonTestData();
+}
+
void tst_QMediaPlayer::testStop()
{
- QFETCH_GLOBAL(QMediaContent, mediaContent);
- QFETCH_GLOBAL(QMediaPlayer::State, state);
+ QFETCH(QMediaContent, mediaContent);
+ QFETCH(QMediaPlayer::State, state);
mockService->setState(state);
mockService->setMedia(mediaContent);
@@ -586,9 +680,14 @@ void tst_QMediaPlayer::testStop()
}
}
+void tst_QMediaPlayer::testMediaStatus_data()
+{
+ setupCommonTestData();
+}
+
void tst_QMediaPlayer::testMediaStatus()
{
- QFETCH_GLOBAL(int, bufferStatus);
+ QFETCH(int, bufferStatus);
int bufferSignals = 0;
player->setNotifyInterval(10);
@@ -879,12 +978,17 @@ void tst_QMediaPlayer::testPlaylist()
player->setPlaylist(playlist);
player->play();
QCOMPARE(ss.count(), 1);
+ QCOMPARE(ms.count(), 1);
+ QCOMPARE(qvariant_cast<QMediaPlayer::MediaStatus>(ms.last().value(0)), QMediaPlayer::LoadingMedia);
+ ms.clear();
mockService->setState(QMediaPlayer::StoppedState, QMediaPlayer::InvalidMedia);
QCOMPARE(player->state(), QMediaPlayer::PlayingState);
- QCOMPARE(player->mediaStatus(), QMediaPlayer::InvalidMedia);
+ QCOMPARE(player->mediaStatus(), QMediaPlayer::LoadingMedia);
QCOMPARE(ss.count(), 1);
- QCOMPARE(ms.count(), 1);
+ QCOMPARE(ms.count(), 2);
+ QCOMPARE(qvariant_cast<QMediaPlayer::MediaStatus>(ms.at(0).value(0)), QMediaPlayer::InvalidMedia);
+ QCOMPARE(qvariant_cast<QMediaPlayer::MediaStatus>(ms.at(1).value(0)), QMediaPlayer::LoadingMedia);
// NOTE: status should begin transitioning through to BufferedMedia.
QCOMPARE(player->currentMedia(), content1);
@@ -1113,5 +1217,84 @@ void tst_QMediaPlayer::testSupportedMimeTypes()
// This is empty on some platforms, and not on others, so can't test something here at the moment.
}
+void tst_QMediaPlayer::testQrc_data()
+{
+ QTest::addColumn<QMediaContent>("mediaContent");
+ QTest::addColumn<QMediaPlayer::MediaStatus>("status");
+ QTest::addColumn<QMediaPlayer::Error>("error");
+ QTest::addColumn<int>("errorCount");
+ QTest::addColumn<bool>("hasStreamFeature");
+ QTest::addColumn<QString>("backendMediaContentScheme");
+ QTest::addColumn<bool>("backendHasStream");
+
+ QTest::newRow("invalid") << QMediaContent(QUrl(QLatin1String("qrc:/invalid.mp3")))
+ << QMediaPlayer::InvalidMedia
+ << QMediaPlayer::ResourceError
+ << 1 // error count
+ << false // No StreamPlayback support
+ << QString() // backend should not have got any media (empty URL scheme)
+ << false; // backend should not have got any stream
+
+ QTest::newRow("valid+nostream") << QMediaContent(QUrl(QLatin1String("qrc:/testdata/nokia-tune.mp3")))
+ << QMediaPlayer::LoadingMedia
+ << QMediaPlayer::NoError
+ << 0 // error count
+ << false // No StreamPlayback support
+ << QStringLiteral("file") // backend should have a got a temporary file
+ << false; // backend should not have got any stream
+
+ QTest::newRow("valid+stream") << QMediaContent(QUrl(QLatin1String("qrc:/testdata/nokia-tune.mp3")))
+ << QMediaPlayer::LoadingMedia
+ << QMediaPlayer::NoError
+ << 0 // error count
+ << true // StreamPlayback support
+ << QStringLiteral("qrc")
+ << true; // backend should have got a stream (QFile opened from the resource)
+}
+
+void tst_QMediaPlayer::testQrc()
+{
+ QFETCH(QMediaContent, mediaContent);
+ QFETCH(QMediaPlayer::MediaStatus, status);
+ QFETCH(QMediaPlayer::Error, error);
+ QFETCH(int, errorCount);
+ QFETCH(bool, hasStreamFeature);
+ QFETCH(QString, backendMediaContentScheme);
+ QFETCH(bool, backendHasStream);
+
+ if (hasStreamFeature)
+ mockProvider->setSupportedFeatures(QMediaServiceProviderHint::StreamPlayback);
+
+ QMediaPlayer player;
+
+ mockService->setState(QMediaPlayer::PlayingState, QMediaPlayer::NoMedia);
+
+ QSignalSpy mediaSpy(&player, SIGNAL(currentMediaChanged(QMediaContent)));
+ QSignalSpy statusSpy(&player, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)));
+ QSignalSpy errorSpy(&player, SIGNAL(error(QMediaPlayer::Error)));
+
+ player.setMedia(mediaContent);
+
+ QTRY_COMPARE(player.mediaStatus(), status);
+ QCOMPARE(statusSpy.count(), 1);
+ QCOMPARE(qvariant_cast<QMediaPlayer::MediaStatus>(statusSpy.last().value(0)), status);
+
+ QCOMPARE(player.media(), mediaContent);
+ QCOMPARE(player.currentMedia(), mediaContent);
+ QCOMPARE(mediaSpy.count(), 1);
+ QCOMPARE(qvariant_cast<QMediaContent>(mediaSpy.last().value(0)), mediaContent);
+
+ QCOMPARE(player.error(), error);
+ QCOMPARE(errorSpy.count(), errorCount);
+ if (errorCount > 0) {
+ QCOMPARE(qvariant_cast<QMediaPlayer::Error>(errorSpy.last().value(0)), error);
+ QVERIFY(!player.errorString().isEmpty());
+ }
+
+ // Check the media actually passed to the backend
+ QCOMPARE(mockService->mockControl->media().canonicalUrl().scheme(), backendMediaContentScheme);
+ QCOMPARE(bool(mockService->mockControl->mediaStream()), backendHasStream);
+}
+
QTEST_GUILESS_MAIN(tst_QMediaPlayer)
#include "tst_qmediaplayer.moc"