diff options
Diffstat (limited to 'tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp')
-rw-r--r-- | tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp | 1399 |
1 files changed, 0 insertions, 1399 deletions
diff --git a/tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp b/tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp deleted file mode 100644 index ed2a9dd42..000000000 --- a/tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp +++ /dev/null @@ -1,1399 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** 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 The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//TESTED_COMPONENT=src/multimedia - -#include <QtTest/QtTest> - -#include <QtCore/qdebug.h> -#include <QtCore/qbuffer.h> - -#include <qabstractvideosurface.h> -#include <qmediaplayer.h> -#include <qmediaplayercontrol.h> -#include <qmediaplaylist.h> -#include <qmediaservice.h> -#include <qmediastreamscontrol.h> -#include <qvideorenderercontrol.h> - -#include "mockmediaserviceprovider.h" -#include "mockmediaplayerservice.h" -#include "mockvideosurface.h" - -QT_USE_NAMESPACE - -class AutoConnection -{ -public: - AutoConnection(QObject *sender, const char *signal, QObject *receiver, const char *method) - : sender(sender), signal(signal), receiver(receiver), method(method) - { - QObject::connect(sender, signal, receiver, method); - } - - ~AutoConnection() - { - QObject::disconnect(sender, signal, receiver, method); - } - -private: - QObject *sender; - const char *signal; - QObject *receiver; - const char *method; -}; - -class tst_QMediaPlayer: public QObject -{ - Q_OBJECT - -public slots: - 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 testSetVideoOutput(); - void testSetVideoOutputNoService(); - void testSetVideoOutputNoControl(); - void testSetVideoOutputDestruction(); - void testPositionPropertyWatch(); - void debugEnums(); - void testPlayerFlags(); - void testDestructor(); - void testSupportedMimeTypes(); - void testQrc_data(); - void testQrc(); - void testAudioRole(); - void testCustomAudioRole(); - -private: - void setupCommonTestData(); - - MockMediaServiceProvider *mockProvider; - MockMediaPlayerService *mockService; - QMediaPlayer *player; -}; - -void tst_QMediaPlayer::setupCommonTestData() -{ - QTest::addColumn<bool>("valid"); - QTest::addColumn<QMediaPlayer::State>("state"); - QTest::addColumn<QMediaPlayer::MediaStatus>("status"); - QTest::addColumn<QMediaContent>("mediaContent"); - QTest::addColumn<qint64>("duration"); - QTest::addColumn<qint64>("position"); - QTest::addColumn<bool>("seekable"); - QTest::addColumn<int>("volume"); - QTest::addColumn<bool>("muted"); - QTest::addColumn<bool>("videoAvailable"); - QTest::addColumn<int>("bufferStatus"); - QTest::addColumn<qreal>("playbackRate"); - QTest::addColumn<QMediaPlayer::Error>("error"); - QTest::addColumn<QString>("errorString"); - - QTest::newRow("invalid") << false << QMediaPlayer::StoppedState << QMediaPlayer::UnknownMediaStatus << - QMediaContent() << qint64(0) << qint64(0) << false << 0 << false << false << 0 << - qreal(0) << QMediaPlayer::NoError << QString(); - QTest::newRow("valid+null") << true << QMediaPlayer::StoppedState << QMediaPlayer::UnknownMediaStatus << - QMediaContent() << qint64(0) << qint64(0) << false << 0 << false << false << 50 << - qreal(0) << QMediaPlayer::NoError << QString(); - QTest::newRow("valid+content+stopped") << true << QMediaPlayer::StoppedState << QMediaPlayer::UnknownMediaStatus << - QMediaContent(QUrl("file:///some.mp3")) << qint64(0) << qint64(0) << false << 50 << false << false << 0 << - qreal(1) << QMediaPlayer::NoError << QString(); - QTest::newRow("valid+content+playing") << true << QMediaPlayer::PlayingState << QMediaPlayer::LoadedMedia << - QMediaContent(QUrl("file:///some.mp3")) << qint64(10000) << qint64(10) << true << 50 << true << false << 0 << - qreal(1) << QMediaPlayer::NoError << QString(); - QTest::newRow("valid+content+paused") << true << QMediaPlayer::PausedState << QMediaPlayer::LoadedMedia << - QMediaContent(QUrl("file:///some.mp3")) << qint64(10000) << qint64(10) << true << 50 << true << false << 0 << - qreal(1) << QMediaPlayer::NoError << QString(); - QTest::newRow("valud+streaming") << true << QMediaPlayer::PlayingState << QMediaPlayer::LoadedMedia << - QMediaContent(QUrl("http://example.com/stream")) << qint64(10000) << qint64(10000) << false << 50 << false << true << 0 << - qreal(1) << QMediaPlayer::NoError << QString(); - QTest::newRow("valid+error") << true << QMediaPlayer::StoppedState << QMediaPlayer::UnknownMediaStatus << - QMediaContent(QUrl("http://example.com/stream")) << qint64(0) << qint64(0) << false << 50 << false << false << 0 << - qreal(0) << QMediaPlayer::ResourceError << QString("Resource unavailable"); -} - -void tst_QMediaPlayer::initTestCase() -{ - qRegisterMetaType<QMediaPlayer::State>("QMediaPlayer::State"); - qRegisterMetaType<QMediaPlayer::Error>("QMediaPlayer::Error"); - qRegisterMetaType<QMediaPlayer::MediaStatus>("QMediaPlayer::MediaStatus"); - qRegisterMetaType<QMediaContent>("QMediaContent"); -} - -void tst_QMediaPlayer::cleanupTestCase() -{ -} - -void tst_QMediaPlayer::init() -{ - mockService = new MockMediaPlayerService; - mockProvider = new MockMediaServiceProvider(mockService); - QMediaServiceProvider::setDefaultServiceProvider(mockProvider); - - player = new QMediaPlayer; -} - -void tst_QMediaPlayer::cleanup() -{ - delete player; - delete mockProvider; - delete mockService; -} - -void tst_QMediaPlayer::testNullService_data() -{ - setupCommonTestData(); -} - -void tst_QMediaPlayer::testNullService() -{ - mockProvider->service = 0; - QMediaPlayer player; - - const QIODevice *nullDevice = 0; - - QCOMPARE(player.media(), QMediaContent()); - QCOMPARE(player.mediaStream(), nullDevice); - QCOMPARE(player.state(), QMediaPlayer::StoppedState); - QCOMPARE(player.mediaStatus(), QMediaPlayer::UnknownMediaStatus); - QCOMPARE(player.duration(), qint64(-1)); - QCOMPARE(player.position(), qint64(0)); - QCOMPARE(player.volume(), 0); - QCOMPARE(player.isMuted(), false); - QCOMPARE(player.isVideoAvailable(), false); - QCOMPARE(player.bufferStatus(), 0); - QCOMPARE(player.isSeekable(), false); - QCOMPARE(player.playbackRate(), qreal(0)); - QCOMPARE(player.error(), QMediaPlayer::ServiceMissingError); - QCOMPARE(player.isAvailable(), false); - QCOMPARE(player.availability(), QMultimedia::ServiceMissing); - - { - QFETCH(QMediaContent, mediaContent); - - QSignalSpy spy(&player, SIGNAL(currentMediaChanged(QMediaContent))); - QFile file; - - player.setMedia(mediaContent, &file); - QCOMPARE(player.currentMedia(), QMediaContent()); - QCOMPARE(player.media(), mediaContent); - QCOMPARE(player.mediaStream(), nullDevice); - QCOMPARE(spy.count(), 0); - } { - QSignalSpy stateSpy(&player, SIGNAL(stateChanged(QMediaPlayer::State))); - QSignalSpy statusSpy(&player, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus))); - - player.play(); - QCOMPARE(player.state(), QMediaPlayer::StoppedState); - QCOMPARE(player.mediaStatus(), QMediaPlayer::UnknownMediaStatus); - QCOMPARE(stateSpy.count(), 0); - QCOMPARE(statusSpy.count(), 0); - - player.pause(); - QCOMPARE(player.state(), QMediaPlayer::StoppedState); - QCOMPARE(player.mediaStatus(), QMediaPlayer::UnknownMediaStatus); - QCOMPARE(stateSpy.count(), 0); - QCOMPARE(statusSpy.count(), 0); - - player.stop(); - QCOMPARE(player.state(), QMediaPlayer::StoppedState); - QCOMPARE(player.mediaStatus(), QMediaPlayer::UnknownMediaStatus); - QCOMPARE(stateSpy.count(), 0); - QCOMPARE(statusSpy.count(), 0); - } { - QFETCH(int, volume); - QFETCH(bool, muted); - - QSignalSpy volumeSpy(&player, SIGNAL(volumeChanged(int))); - QSignalSpy mutingSpy(&player, SIGNAL(mutedChanged(bool))); - - player.setVolume(volume); - QCOMPARE(player.volume(), 0); - QCOMPARE(volumeSpy.count(), 0); - - player.setMuted(muted); - QCOMPARE(player.isMuted(), false); - QCOMPARE(mutingSpy.count(), 0); - } { - QFETCH(qint64, position); - - QSignalSpy spy(&player, SIGNAL(positionChanged(qint64))); - - player.setPosition(position); - QCOMPARE(player.position(), qint64(0)); - QCOMPARE(spy.count(), 0); - } { - QFETCH(qreal, playbackRate); - - QSignalSpy spy(&player, SIGNAL(playbackRateChanged(qreal))); - - player.setPlaybackRate(playbackRate); - QCOMPARE(player.playbackRate(), qreal(0)); - QCOMPARE(spy.count(), 0); - } { - QMediaPlaylist playlist; - player.setPlaylist(&playlist); - - QSignalSpy mediaSpy(&player, SIGNAL(mediaChanged(QMediaContent))); - QSignalSpy statusSpy(&player, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus))); - - playlist.addMedia(QUrl("http://example.com/stream")); - playlist.addMedia(QUrl("file:///some.mp3")); - - playlist.setCurrentIndex(0); - QCOMPARE(playlist.currentIndex(), 0); - QCOMPARE(player.currentMedia(), QMediaContent()); - QCOMPARE(player.media().playlist(), &playlist); - QCOMPARE(mediaSpy.count(), 0); - QCOMPARE(statusSpy.count(), 0); - - playlist.next(); - QCOMPARE(playlist.currentIndex(), 1); - QCOMPARE(player.currentMedia(), QMediaContent()); - QCOMPARE(player.media().playlist(), &playlist); - QCOMPARE(mediaSpy.count(), 0); - QCOMPARE(statusSpy.count(), 0); - } -} - -void tst_QMediaPlayer::testValid() -{ - /* - QFETCH(bool, valid); - - mockService->setIsValid(valid); - QCOMPARE(player->isValid(), valid); - */ -} - -void tst_QMediaPlayer::testMedia_data() -{ - setupCommonTestData(); -} - -void tst_QMediaPlayer::testMedia() -{ - QFETCH(QMediaContent, mediaContent); - - mockService->setMedia(mediaContent); - QCOMPARE(player->currentMedia(), mediaContent); - - QBuffer stream; - player->setMedia(mediaContent, &stream); - QCOMPARE(player->currentMedia(), mediaContent); - QCOMPARE((QBuffer*)player->mediaStream(), &stream); -} - -void tst_QMediaPlayer::testDuration_data() -{ - setupCommonTestData(); -} - -void tst_QMediaPlayer::testDuration() -{ - QFETCH(qint64, duration); - - mockService->setDuration(duration); - QVERIFY(player->duration() == duration); -} - -void tst_QMediaPlayer::testPosition_data() -{ - setupCommonTestData(); -} - -void tst_QMediaPlayer::testPosition() -{ - QFETCH(bool, valid); - QFETCH(bool, seekable); - QFETCH(qint64, position); - QFETCH(qint64, duration); - - mockService->setIsValid(valid); - mockService->setSeekable(seekable); - mockService->setPosition(position); - mockService->setDuration(duration); - QVERIFY(player->isSeekable() == seekable); - QVERIFY(player->position() == position); - QVERIFY(player->duration() == duration); - - if (seekable) { - { QSignalSpy spy(player, SIGNAL(positionChanged(qint64))); - player->setPosition(position); - QCOMPARE(player->position(), position); - QCOMPARE(spy.count(), 0); } - - mockService->setPosition(position); - { QSignalSpy spy(player, SIGNAL(positionChanged(qint64))); - player->setPosition(0); - QCOMPARE(player->position(), qint64(0)); - QCOMPARE(spy.count(), position == 0 ? 0 : 1); } - - mockService->setPosition(position); - { QSignalSpy spy(player, SIGNAL(positionChanged(qint64))); - player->setPosition(duration); - QCOMPARE(player->position(), duration); - QCOMPARE(spy.count(), position == duration ? 0 : 1); } - - mockService->setPosition(position); - { QSignalSpy spy(player, SIGNAL(positionChanged(qint64))); - player->setPosition(-1); - QCOMPARE(player->position(), qint64(0)); - QCOMPARE(spy.count(), position == 0 ? 0 : 1); } - - } - else { - QSignalSpy spy(player, SIGNAL(positionChanged(qint64))); - player->setPosition(position); - - QCOMPARE(player->position(), position); - QCOMPARE(spy.count(), 0); - } -} - -void tst_QMediaPlayer::testVolume_data() -{ - setupCommonTestData(); -} - -void tst_QMediaPlayer::testVolume() -{ - QFETCH(bool, valid); - QFETCH(int, volume); - - mockService->setVolume(volume); - QVERIFY(player->volume() == volume); - - if (valid) { - { QSignalSpy spy(player, SIGNAL(volumeChanged(int))); - player->setVolume(10); - QCOMPARE(player->volume(), 10); - QCOMPARE(spy.count(), 1); } - - { QSignalSpy spy(player, SIGNAL(volumeChanged(int))); - player->setVolume(-1000); - QCOMPARE(player->volume(), 0); - QCOMPARE(spy.count(), 1); } - - { QSignalSpy spy(player, SIGNAL(volumeChanged(int))); - player->setVolume(100); - QCOMPARE(player->volume(), 100); - QCOMPARE(spy.count(), 1); } - - { QSignalSpy spy(player, SIGNAL(volumeChanged(int))); - player->setVolume(1000); - QCOMPARE(player->volume(), 100); - QCOMPARE(spy.count(), 0); } - } -} - -void tst_QMediaPlayer::testMuted_data() -{ - setupCommonTestData(); -} - -void tst_QMediaPlayer::testMuted() -{ - QFETCH(bool, valid); - QFETCH(bool, muted); - QFETCH(int, volume); - - if (valid) { - mockService->setMuted(muted); - mockService->setVolume(volume); - QVERIFY(player->isMuted() == muted); - - QSignalSpy spy(player, SIGNAL(mutedChanged(bool))); - player->setMuted(!muted); - QCOMPARE(player->isMuted(), !muted); - QCOMPARE(player->volume(), volume); - QCOMPARE(spy.count(), 1); - } -} - -void tst_QMediaPlayer::testVideoAvailable_data() -{ - setupCommonTestData(); -} - -void tst_QMediaPlayer::testVideoAvailable() -{ - QFETCH(bool, videoAvailable); - - mockService->setVideoAvailable(videoAvailable); - QVERIFY(player->isVideoAvailable() == videoAvailable); -} - -void tst_QMediaPlayer::testBufferStatus_data() -{ - setupCommonTestData(); -} - -void tst_QMediaPlayer::testBufferStatus() -{ - QFETCH(int, bufferStatus); - - mockService->setBufferStatus(bufferStatus); - QVERIFY(player->bufferStatus() == bufferStatus); -} - -void tst_QMediaPlayer::testSeekable_data() -{ - setupCommonTestData(); -} - -void tst_QMediaPlayer::testSeekable() -{ - QFETCH(bool, seekable); - - mockService->setSeekable(seekable); - QVERIFY(player->isSeekable() == seekable); -} - -void tst_QMediaPlayer::testPlaybackRate_data() -{ - setupCommonTestData(); -} - -void tst_QMediaPlayer::testPlaybackRate() -{ - QFETCH(bool, valid); - QFETCH(qreal, playbackRate); - - if (valid) { - mockService->setPlaybackRate(playbackRate); - QVERIFY(player->playbackRate() == playbackRate); - - QSignalSpy spy(player, SIGNAL(playbackRateChanged(qreal))); - player->setPlaybackRate(playbackRate + 0.5f); - QCOMPARE(player->playbackRate(), playbackRate + 0.5f); - QCOMPARE(spy.count(), 1); - } -} - -void tst_QMediaPlayer::testError_data() -{ - setupCommonTestData(); -} - -void tst_QMediaPlayer::testError() -{ - QFETCH(QMediaPlayer::Error, error); - - mockService->setError(error); - QVERIFY(player->error() == error); -} - -void tst_QMediaPlayer::testErrorString_data() -{ - setupCommonTestData(); -} - -void tst_QMediaPlayer::testErrorString() -{ - QFETCH(QString, errorString); - - mockService->setErrorString(errorString); - QVERIFY(player->errorString() == errorString); -} - -void tst_QMediaPlayer::testIsAvailable() -{ - QCOMPARE(player->isAvailable(), true); - QCOMPARE(player->availability(), QMultimedia::Available); -} - -void tst_QMediaPlayer::testService() -{ - /* - QFETCH(bool, valid); - - mockService->setIsValid(valid); - - if (valid) - QVERIFY(player->service() != 0); - else - QVERIFY(player->service() == 0); - */ -} - -void tst_QMediaPlayer::testPlay_data() -{ - setupCommonTestData(); -} - -void tst_QMediaPlayer::testPlay() -{ - QFETCH(bool, valid); - QFETCH(QMediaContent, mediaContent); - QFETCH(QMediaPlayer::State, state); - - mockService->setIsValid(valid); - mockService->setState(state); - mockService->setMedia(mediaContent); - QVERIFY(player->state() == state); - QVERIFY(player->currentMedia() == mediaContent); - - QSignalSpy spy(player, SIGNAL(stateChanged(QMediaPlayer::State))); - - player->play(); - - if (!valid || mediaContent.isNull()) { - QCOMPARE(player->state(), QMediaPlayer::StoppedState); - QCOMPARE(spy.count(), 0); - } - else { - QCOMPARE(player->state(), QMediaPlayer::PlayingState); - QCOMPARE(spy.count(), state == QMediaPlayer::PlayingState ? 0 : 1); - } -} - -void tst_QMediaPlayer::testPause_data() -{ - setupCommonTestData(); -} - -void tst_QMediaPlayer::testPause() -{ - QFETCH(bool, valid); - QFETCH(QMediaContent, mediaContent); - QFETCH(QMediaPlayer::State, state); - - mockService->setIsValid(valid); - mockService->setState(state); - mockService->setMedia(mediaContent); - QVERIFY(player->state() == state); - QVERIFY(player->currentMedia() == mediaContent); - - QSignalSpy spy(player, SIGNAL(stateChanged(QMediaPlayer::State))); - - player->pause(); - - if (!valid || mediaContent.isNull()) { - QCOMPARE(player->state(), QMediaPlayer::StoppedState); - QCOMPARE(spy.count(), 0); - } - else { - QCOMPARE(player->state(), QMediaPlayer::PausedState); - QCOMPARE(spy.count(), state == QMediaPlayer::PausedState ? 0 : 1); - } -} - -void tst_QMediaPlayer::testStop_data() -{ - setupCommonTestData(); -} - -void tst_QMediaPlayer::testStop() -{ - QFETCH(QMediaContent, mediaContent); - QFETCH(QMediaPlayer::State, state); - - mockService->setState(state); - mockService->setMedia(mediaContent); - QVERIFY(player->state() == state); - QVERIFY(player->currentMedia() == mediaContent); - - QSignalSpy spy(player, SIGNAL(stateChanged(QMediaPlayer::State))); - - player->stop(); - - if (mediaContent.isNull() || state == QMediaPlayer::StoppedState) { - QCOMPARE(player->state(), QMediaPlayer::StoppedState); - QCOMPARE(spy.count(), 0); - } - else { - QCOMPARE(player->state(), QMediaPlayer::StoppedState); - QCOMPARE(spy.count(), 1); - } -} - -void tst_QMediaPlayer::testMediaStatus_data() -{ - setupCommonTestData(); -} - -void tst_QMediaPlayer::testMediaStatus() -{ - QFETCH(int, bufferStatus); - int bufferSignals = 0; - - player->setNotifyInterval(10); - - mockService->setMediaStatus(QMediaPlayer::NoMedia); - mockService->setBufferStatus(bufferStatus); - - AutoConnection connection( - player, SIGNAL(bufferStatusChanged(int)), - &QTestEventLoop::instance(), SLOT(exitLoop())); - - QSignalSpy statusSpy(player, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus))); - QSignalSpy bufferSpy(player, SIGNAL(bufferStatusChanged(int))); - - QCOMPARE(player->mediaStatus(), QMediaPlayer::NoMedia); - - mockService->setMediaStatus(QMediaPlayer::LoadingMedia); - QCOMPARE(player->mediaStatus(), QMediaPlayer::LoadingMedia); - QCOMPARE(statusSpy.count(), 1); - - QCOMPARE(qvariant_cast<QMediaPlayer::MediaStatus>(statusSpy.last().value(0)), - QMediaPlayer::LoadingMedia); - - mockService->setMediaStatus(QMediaPlayer::LoadedMedia); - QCOMPARE(player->mediaStatus(), QMediaPlayer::LoadedMedia); - QCOMPARE(statusSpy.count(), 2); - - QCOMPARE(qvariant_cast<QMediaPlayer::MediaStatus>(statusSpy.last().value(0)), - QMediaPlayer::LoadedMedia); - - // Verify the bufferStatusChanged() signal isn't being emitted. - QTestEventLoop::instance().enterLoop(1); - QCOMPARE(bufferSpy.count(), 0); - - mockService->setMediaStatus(QMediaPlayer::StalledMedia); - QCOMPARE(player->mediaStatus(), QMediaPlayer::StalledMedia); - QCOMPARE(statusSpy.count(), 3); - - QCOMPARE(qvariant_cast<QMediaPlayer::MediaStatus>(statusSpy.last().value(0)), - QMediaPlayer::StalledMedia); - - // Verify the bufferStatusChanged() signal is being emitted. - QTestEventLoop::instance().enterLoop(1); - QVERIFY(bufferSpy.count() > bufferSignals); - QCOMPARE(bufferSpy.last().value(0).toInt(), bufferStatus); - bufferSignals = bufferSpy.count(); - - mockService->setMediaStatus(QMediaPlayer::BufferingMedia); - QCOMPARE(player->mediaStatus(), QMediaPlayer::BufferingMedia); - QCOMPARE(statusSpy.count(), 4); - - QCOMPARE(qvariant_cast<QMediaPlayer::MediaStatus>(statusSpy.last().value(0)), - QMediaPlayer::BufferingMedia); - - // Verify the bufferStatusChanged() signal is being emitted. - QTestEventLoop::instance().enterLoop(1); - QVERIFY(bufferSpy.count() > bufferSignals); - QCOMPARE(bufferSpy.last().value(0).toInt(), bufferStatus); - bufferSignals = bufferSpy.count(); - - mockService->setMediaStatus(QMediaPlayer::BufferedMedia); - QCOMPARE(player->mediaStatus(), QMediaPlayer::BufferedMedia); - QCOMPARE(statusSpy.count(), 5); - - QCOMPARE(qvariant_cast<QMediaPlayer::MediaStatus>(statusSpy.last().value(0)), - QMediaPlayer::BufferedMedia); - - // Verify the bufferStatusChanged() signal isn't being emitted. - QTestEventLoop::instance().enterLoop(1); - QCOMPARE(bufferSpy.count(), bufferSignals); - - mockService->setMediaStatus(QMediaPlayer::EndOfMedia); - QCOMPARE(player->mediaStatus(), QMediaPlayer::EndOfMedia); - QCOMPARE(statusSpy.count(), 6); - - QCOMPARE(qvariant_cast<QMediaPlayer::MediaStatus>(statusSpy.last().value(0)), - QMediaPlayer::EndOfMedia); -} - -void tst_QMediaPlayer::testPlaylist() -{ - QMediaContent content0(QUrl(QLatin1String("test://audio/song1.mp3"))); - QMediaContent content1(QUrl(QLatin1String("test://audio/song2.mp3"))); - QMediaContent content2(QUrl(QLatin1String("test://video/movie1.mp4"))); - QMediaContent content3(QUrl(QLatin1String("test://video/movie2.mp4"))); - QMediaContent content4(QUrl(QLatin1String("test://image/photo.jpg"))); - - mockService->setIsValid(true); - mockService->setState(QMediaPlayer::StoppedState, QMediaPlayer::NoMedia); - - QMediaPlaylist *playlist = new QMediaPlaylist; - player->setPlaylist(playlist); - QCOMPARE(player->media().playlist(), playlist); - - QSignalSpy stateSpy(player, SIGNAL(stateChanged(QMediaPlayer::State))); - QSignalSpy mediaSpy(player, SIGNAL(currentMediaChanged(QMediaContent))); - - // Test the player does nothing with an empty playlist attached. - player->play(); - QCOMPARE(player->state(), QMediaPlayer::StoppedState); - QCOMPARE(player->currentMedia(), QMediaContent()); - QCOMPARE(stateSpy.count(), 0); - QCOMPARE(mediaSpy.count(), 0); - - playlist->addMedia(content0); - playlist->addMedia(content1); - playlist->addMedia(content2); - playlist->addMedia(content3); - - // Test changing the playlist position, changes the current media, but not the playing state. - playlist->setCurrentIndex(1); - QCOMPARE(player->currentMedia(), content1); - QCOMPARE(player->state(), QMediaPlayer::StoppedState); - QCOMPARE(stateSpy.count(), 0); - QCOMPARE(mediaSpy.count(), 1); - - // Test playing starts with the current media. - player->play(); - QCOMPARE(player->currentMedia(), content1); - QCOMPARE(player->state(), QMediaPlayer::PlayingState); - QCOMPARE(stateSpy.count(), 1); - QCOMPARE(mediaSpy.count(), 1); - - // Test pausing doesn't change the current media. - player->pause(); - QCOMPARE(player->currentMedia(), content1); - QCOMPARE(player->state(), QMediaPlayer::PausedState); - QCOMPARE(stateSpy.count(), 2); - QCOMPARE(mediaSpy.count(), 1); - - // Test stopping doesn't change the current media. - player->stop(); - QCOMPARE(player->currentMedia(), content1); - QCOMPARE(player->state(), QMediaPlayer::StoppedState); - QCOMPARE(stateSpy.count(), 3); - QCOMPARE(mediaSpy.count(), 1); - - // Test when the player service reaches the end of the current media, the player moves onto - // the next item without stopping. - player->play(); - QCOMPARE(player->currentMedia(), content1); - QCOMPARE(player->state(), QMediaPlayer::PlayingState); - QCOMPARE(stateSpy.count(), 4); - QCOMPARE(mediaSpy.count(), 1); - - mockService->setState(QMediaPlayer::StoppedState, QMediaPlayer::EndOfMedia); - QCOMPARE(player->currentMedia(), content2); - QCOMPARE(player->state(), QMediaPlayer::PlayingState); - QCOMPARE(stateSpy.count(), 4); - QCOMPARE(mediaSpy.count(), 2); - - // Test skipping the current media doesn't change the state. - playlist->next(); - QCOMPARE(player->currentMedia(), content3); - QCOMPARE(player->state(), QMediaPlayer::PlayingState); - QCOMPARE(stateSpy.count(), 4); - QCOMPARE(mediaSpy.count(), 3); - - // Test changing the current media while paused doesn't change the state. - player->pause(); - mockService->setMediaStatus(QMediaPlayer::BufferedMedia); - QCOMPARE(player->currentMedia(), content3); - QCOMPARE(player->state(), QMediaPlayer::PausedState); - QCOMPARE(stateSpy.count(), 5); - QCOMPARE(mediaSpy.count(), 3); - - playlist->previous(); - QCOMPARE(player->currentMedia(), content2); - QCOMPARE(player->state(), QMediaPlayer::PausedState); - QCOMPARE(stateSpy.count(), 5); - QCOMPARE(mediaSpy.count(), 4); - - // Test changing the current media while stopped doesn't change the state. - player->stop(); - mockService->setMediaStatus(QMediaPlayer::LoadedMedia); - QCOMPARE(player->currentMedia(), content2); - QCOMPARE(player->state(), QMediaPlayer::StoppedState); - QCOMPARE(stateSpy.count(), 6); - QCOMPARE(mediaSpy.count(), 4); - - playlist->next(); - QCOMPARE(player->currentMedia(), content3); - QCOMPARE(player->state(), QMediaPlayer::StoppedState); - QCOMPARE(stateSpy.count(), 6); - QCOMPARE(mediaSpy.count(), 5); - - // Test the player is stopped and the current media cleared when it reaches the end of the last - // item in the playlist. - player->play(); - QCOMPARE(player->currentMedia(), content3); - QCOMPARE(player->state(), QMediaPlayer::PlayingState); - QCOMPARE(stateSpy.count(), 7); - QCOMPARE(mediaSpy.count(), 5); - - // Double up the signals to ensure some noise doesn't destabalize things. - mockService->setState(QMediaPlayer::StoppedState, QMediaPlayer::EndOfMedia); - mockService->setState(QMediaPlayer::StoppedState, QMediaPlayer::EndOfMedia); - QCOMPARE(player->currentMedia(), QMediaContent()); - QCOMPARE(player->state(), QMediaPlayer::StoppedState); - QCOMPARE(stateSpy.count(), 8); - QCOMPARE(mediaSpy.count(), 6); - - // Test starts playing from the start of the playlist if there is no current media selected. - player->play(); - QCOMPARE(player->currentMedia(), content0); - QCOMPARE(player->state(), QMediaPlayer::PlayingState); - QCOMPARE(stateSpy.count(), 9); - // one notification is for playlist and another is for the first media in the playlist - QCOMPARE(mediaSpy.count(), 8); - - // Test deleting the playlist stops the player and clears the media it set. - delete playlist; - QCOMPARE(player->currentMedia(), QMediaContent()); - QCOMPARE(player->state(), QMediaPlayer::StoppedState); - QCOMPARE(stateSpy.count(), 10); - QCOMPARE(mediaSpy.count(), 9); - - // Test the player works as normal with the playlist removed. - player->play(); - QCOMPARE(player->currentMedia(), QMediaContent()); - QCOMPARE(player->state(), QMediaPlayer::StoppedState); - QCOMPARE(stateSpy.count(), 10); - QCOMPARE(mediaSpy.count(), 9); - - player->setMedia(content1); - player->play(); - - QCOMPARE(player->currentMedia(), content1); - QCOMPARE(player->state(), QMediaPlayer::PlayingState); - QCOMPARE(stateSpy.count(), 11); - QCOMPARE(mediaSpy.count(), 10); - - // Test the player can bind to playlist again - playlist = new QMediaPlaylist; - player->setPlaylist(playlist); - - QCOMPARE(player->currentMedia(), QMediaContent()); - QCOMPARE(player->state(), QMediaPlayer::StoppedState); - - playlist->addMedia(content0); - playlist->addMedia(content1); - playlist->addMedia(content2); - playlist->addMedia(content3); - - playlist->setCurrentIndex(1); - QCOMPARE(player->currentMedia(), content1); - QCOMPARE(player->state(), QMediaPlayer::StoppedState); - - // Test attaching the new playlist, - // player should detach the current one - QMediaPlaylist *playlist2 = new QMediaPlaylist; - playlist2->addMedia(content1); - playlist2->addMedia(content2); - playlist2->addMedia(content3); - playlist2->setCurrentIndex(2); - - player->play(); - player->setPlaylist(playlist2); - QCOMPARE(player->currentMedia(), playlist2->currentMedia()); - QCOMPARE(player->state(), QMediaPlayer::StoppedState); - - playlist2->setCurrentIndex(1); - QCOMPARE(player->currentMedia(), playlist2->currentMedia()); - - { - QMediaPlaylist playlist; - playlist.addMedia(content1); - playlist.addMedia(content2); - playlist.addMedia(content3); - playlist.setCurrentIndex(1); - - // playlist resets to the first item - player->setPlaylist(&playlist); - QCOMPARE(player->playlist(), &playlist); - QCOMPARE(player->currentMedia(), content1); - } //playlist should be detached now - - QVERIFY(player->playlist() == 0); - QCOMPARE(player->currentMedia(), QMediaContent()); - - // Test when the player service encounters an invalid media, the player moves onto - // the next item without stopping - { - QSignalSpy ss(player, SIGNAL(stateChanged(QMediaPlayer::State))); - QSignalSpy ms(player, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus))); - - // playlist index is set to 0 when it is loaded into media player - 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::LoadingMedia); - QCOMPARE(ss.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); - } - - delete playlist; - delete playlist2; -} - -void tst_QMediaPlayer::testPlayerFlags() -{ - MockMediaServiceProvider provider(0, true); - QMediaPlayer::Flag flags = QMediaPlayer::LowLatency; - - QMediaServiceProviderHint::Feature feature; - - if (flags & QMediaPlayer::LowLatency) - { - /* if the flag is low latency set the low latency play back for the service provider */ - feature = QMediaServiceProviderHint::LowLatencyPlayback; - const QByteArray service(Q_MEDIASERVICE_MEDIAPLAYER); - const QMediaServiceProviderHint providerHint(feature); - /* request service for the service provider */ - provider.requestService(service,providerHint); - - /* Constructs a SupportedFeatures media service provider hint. */ - QMediaServiceProviderHint servicepro(feature); - - /* compare the flag value */ - QVERIFY(servicepro.features() == QMediaServiceProviderHint::LowLatencyPlayback); - } - - /* The player is expected to play QIODevice based streams. - If passed to QMediaPlayer constructor, - the service supporting streams playback will be chosen. */ - flags = QMediaPlayer::StreamPlayback; - /* Construct a QMediaPlayer that uses the playback service from provider, - parented to parent and with flags.*/ - - if (flags & QMediaPlayer::StreamPlayback) - { - /* if the flag is stream play back set the stream play back for the service provider */ - feature = QMediaServiceProviderHint::StreamPlayback; - const QByteArray service(Q_MEDIASERVICE_MEDIAPLAYER); - const QMediaServiceProviderHint providerHint(feature); - - /* request service for the service provider */ - provider.requestService(service,providerHint); - - /* Constructs a SupportedFeatures media service provider hint. */ - QMediaServiceProviderHint servicepro(feature); - - /* compare the flag value */ - QVERIFY(servicepro.features() == QMediaServiceProviderHint::StreamPlayback); - } -} - -void tst_QMediaPlayer::testDestructor() -{ - //don't use the same service as tst_QMediaPlayer::player - mockProvider->service = new MockMediaPlayerService; - mockProvider->deleteServiceOnRelease = true; - - /* create an object for player */ - QMediaPlayer *victim = new QMediaPlayer; - - /* check whether the object is created */ - QVERIFY(victim); - - /* delete the instance (a crash is a failure :) */ - delete victim; - - //service is released - QVERIFY(mockProvider->service == 0); - - mockProvider->deleteServiceOnRelease = false; -} - -void tst_QMediaPlayer::testSetVideoOutput() -{ - MockVideoSurface surface; - - player->setVideoOutput(reinterpret_cast<QVideoWidget *>(0)); - player->setVideoOutput(reinterpret_cast<QGraphicsVideoItem *>(0)); - - QCOMPARE(mockService->rendererRef, 0); - - player->setVideoOutput(&surface); - QVERIFY(mockService->rendererControl->surface() == &surface); - QCOMPARE(mockService->rendererRef, 1); - - player->setVideoOutput(reinterpret_cast<QAbstractVideoSurface *>(0)); - QVERIFY(mockService->rendererControl->surface() == 0); - - //rendererControl is released - QCOMPARE(mockService->rendererRef, 0); - - player->setVideoOutput(&surface); - QVERIFY(mockService->rendererControl->surface() == &surface); - QCOMPARE(mockService->rendererRef, 1); - - player->setVideoOutput(reinterpret_cast<QVideoWidget *>(0)); - QVERIFY(mockService->rendererControl->surface() == 0); - //rendererControl is released - QCOMPARE(mockService->rendererRef, 0); - - player->setVideoOutput(&surface); - QVERIFY(mockService->rendererControl->surface() == &surface); - QCOMPARE(mockService->rendererRef, 1); -} - - -void tst_QMediaPlayer::testSetVideoOutputNoService() -{ - MockVideoSurface surface; - - MockMediaServiceProvider provider(0, true); - QMediaServiceProvider::setDefaultServiceProvider(&provider); - QMediaPlayer player; - - player.setVideoOutput(&surface); - // Nothing we can verify here other than it doesn't assert. -} - -void tst_QMediaPlayer::testSetVideoOutputNoControl() -{ - MockVideoSurface surface; - - MockMediaPlayerService service; - service.rendererRef = 1; - - MockMediaServiceProvider provider(&service); - QMediaServiceProvider::setDefaultServiceProvider(&provider); - QMediaPlayer player; - - player.setVideoOutput(&surface); - QVERIFY(service.rendererControl->surface() == 0); -} - -void tst_QMediaPlayer::testSetVideoOutputDestruction() -{ - MockVideoSurface surface; - { - QMediaPlayer player; - player.setVideoOutput(&surface); - QVERIFY(mockService->rendererControl->surface() == &surface); - QCOMPARE(mockService->rendererRef, 1); - } - QVERIFY(mockService->rendererControl->surface() == 0); - QCOMPARE(mockService->rendererRef, 0); -} - -void tst_QMediaPlayer::testPositionPropertyWatch() -{ - QMediaContent content0(QUrl(QLatin1String("test://audio/song1.mp3"))); - QMediaContent content1(QUrl(QLatin1String("test://audio/song2.mp3"))); - - mockService->setIsValid(true); - mockService->setState(QMediaPlayer::StoppedState, QMediaPlayer::NoMedia); - - QMediaPlaylist *playlist = new QMediaPlaylist; - - playlist->addMedia(content0); - playlist->addMedia(content1); - - player->setPlaylist(playlist); - player->setNotifyInterval(5); - - player->play(); - QSignalSpy positionSpy(player, SIGNAL(positionChanged(qint64))); - playlist->next(); - QCOMPARE(player->state(), QMediaPlayer::PlayingState); - QTRY_VERIFY(positionSpy.count() > 0); - - playlist->next(); - QCOMPARE(player->state(), QMediaPlayer::StoppedState); - - positionSpy.clear(); - QTRY_COMPARE(positionSpy.count(), 0); - - delete playlist; -} - -void tst_QMediaPlayer::debugEnums() -{ - QTest::ignoreMessage(QtDebugMsg, "QMediaPlayer::PlayingState"); - qDebug() << QMediaPlayer::PlayingState; - QTest::ignoreMessage(QtDebugMsg, "QMediaPlayer::NoMedia"); - qDebug() << QMediaPlayer::NoMedia; - QTest::ignoreMessage(QtDebugMsg, "QMediaPlayer::NetworkError"); - qDebug() << QMediaPlayer::NetworkError; -} - -void tst_QMediaPlayer::testSupportedMimeTypes() -{ - QStringList mimeList = QMediaPlayer::supportedMimeTypes(QMediaPlayer::LowLatency); - - // 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().request().url().scheme(), backendMediaContentScheme); - QCOMPARE(bool(mockService->mockControl->mediaStream()), backendHasStream); -} - -void tst_QMediaPlayer::testAudioRole() -{ - { - mockService->setHasAudioRole(false); - QMediaPlayer player; - - QCOMPARE(player.audioRole(), QAudio::UnknownRole); - QVERIFY(player.supportedAudioRoles().isEmpty()); - - QSignalSpy spy(&player, SIGNAL(audioRoleChanged(QAudio::Role))); - player.setAudioRole(QAudio::MusicRole); - QCOMPARE(player.audioRole(), QAudio::UnknownRole); - QCOMPARE(spy.count(), 0); - } - - { - mockService->reset(); - mockService->setHasAudioRole(true); - QMediaPlayer player; - QSignalSpy spy(&player, SIGNAL(audioRoleChanged(QAudio::Role))); - - QCOMPARE(player.audioRole(), QAudio::UnknownRole); - QVERIFY(!player.supportedAudioRoles().isEmpty()); - - player.setAudioRole(QAudio::MusicRole); - QCOMPARE(player.audioRole(), QAudio::MusicRole); - QCOMPARE(mockService->mockAudioRoleControl->audioRole(), QAudio::MusicRole); - QCOMPARE(spy.count(), 1); - QCOMPARE(qvariant_cast<QAudio::Role>(spy.last().value(0)), QAudio::MusicRole); - - spy.clear(); - - player.setProperty("audioRole", QVariant::fromValue(QAudio::AlarmRole)); - QCOMPARE(qvariant_cast<QAudio::Role>(player.property("audioRole")), QAudio::AlarmRole); - QCOMPARE(mockService->mockAudioRoleControl->audioRole(), QAudio::AlarmRole); - QCOMPARE(spy.count(), 1); - QCOMPARE(qvariant_cast<QAudio::Role>(spy.last().value(0)), QAudio::AlarmRole); - } -} - -void tst_QMediaPlayer::testCustomAudioRole() -{ - { - mockService->setHasCustomAudioRole(false); - QMediaPlayer player; - - QVERIFY(player.customAudioRole().isEmpty()); - QVERIFY(player.supportedCustomAudioRoles().isEmpty()); - - QSignalSpy spyRole(&player, SIGNAL(audioRoleChanged(QAudio::Role))); - QSignalSpy spyCustomRole(&player, SIGNAL(customAudioRoleChanged(const QString &))); - player.setCustomAudioRole(QStringLiteral("customRole")); - QCOMPARE(player.audioRole(), QAudio::UnknownRole); - QVERIFY(player.customAudioRole().isEmpty()); - QCOMPARE(spyRole.count(), 0); - QCOMPARE(spyCustomRole.count(), 0); - } - - { - mockService->reset(); - mockService->setHasAudioRole(false); - QMediaPlayer player; - - QVERIFY(player.customAudioRole().isEmpty()); - QVERIFY(player.supportedCustomAudioRoles().isEmpty()); - - QSignalSpy spyRole(&player, SIGNAL(audioRoleChanged(QAudio::Role))); - QSignalSpy spyCustomRole(&player, SIGNAL(customAudioRoleChanged(const QString &))); - player.setCustomAudioRole(QStringLiteral("customRole")); - QCOMPARE(player.audioRole(), QAudio::UnknownRole); - QVERIFY(player.customAudioRole().isEmpty()); - QCOMPARE(spyRole.count(), 0); - QCOMPARE(spyCustomRole.count(), 0); - } - - { - mockService->reset(); - QMediaPlayer player; - QSignalSpy spyRole(&player, SIGNAL(audioRoleChanged(QAudio::Role))); - QSignalSpy spyCustomRole(&player, SIGNAL(customAudioRoleChanged(const QString &))); - - QCOMPARE(player.audioRole(), QAudio::UnknownRole); - QVERIFY(player.customAudioRole().isEmpty()); - QVERIFY(!player.supportedCustomAudioRoles().isEmpty()); - - QString customRole(QStringLiteral("customRole")); - player.setCustomAudioRole(customRole); - QCOMPARE(player.audioRole(), QAudio::CustomRole); - QCOMPARE(player.customAudioRole(), customRole); - QCOMPARE(mockService->mockAudioRoleControl->audioRole(), QAudio::CustomRole); - QCOMPARE(mockService->mockCustomAudioRoleControl->customAudioRole(), customRole); - QCOMPARE(spyRole.count(), 1); - QCOMPARE(qvariant_cast<QAudio::Role>(spyRole.last().value(0)), QAudio::CustomRole); - QCOMPARE(spyCustomRole.count(), 1); - QCOMPARE(qvariant_cast<QString>(spyCustomRole.last().value(0)), customRole); - - spyRole.clear(); - spyCustomRole.clear(); - - QString customRole2(QStringLiteral("customRole2")); - player.setProperty("customAudioRole", QVariant::fromValue(customRole2)); - QCOMPARE(qvariant_cast<QString>(player.property("customAudioRole")), customRole2); - QCOMPARE(mockService->mockCustomAudioRoleControl->customAudioRole(), customRole2); - QCOMPARE(spyRole.count(), 0); - QCOMPARE(spyCustomRole.count(), 1); - QCOMPARE(qvariant_cast<QString>(spyCustomRole.last().value(0)), customRole2); - - spyRole.clear(); - spyCustomRole.clear(); - - player.setAudioRole(QAudio::MusicRole); - QCOMPARE(player.audioRole(), QAudio::MusicRole); - QVERIFY(player.customAudioRole().isEmpty()); - QCOMPARE(mockService->mockAudioRoleControl->audioRole(), QAudio::MusicRole); - QVERIFY(mockService->mockCustomAudioRoleControl->customAudioRole().isEmpty()); - QCOMPARE(spyRole.count(), 1); - QCOMPARE(qvariant_cast<QAudio::Role>(spyRole.last().value(0)), QAudio::MusicRole); - QCOMPARE(spyCustomRole.count(), 1); - QVERIFY(qvariant_cast<QString>(spyCustomRole.last().value(0)).isEmpty()); - - spyRole.clear(); - spyCustomRole.clear(); - - player.setAudioRole(QAudio::CustomRole); - QCOMPARE(player.audioRole(), QAudio::CustomRole); - QVERIFY(player.customAudioRole().isEmpty()); - QCOMPARE(mockService->mockAudioRoleControl->audioRole(), QAudio::CustomRole); - QVERIFY(mockService->mockCustomAudioRoleControl->customAudioRole().isEmpty()); - QCOMPARE(spyRole.count(), 1); - QCOMPARE(qvariant_cast<QAudio::Role>(spyRole.last().value(0)), QAudio::CustomRole); - QCOMPARE(spyCustomRole.count(), 0); - } -} - -QTEST_GUILESS_MAIN(tst_QMediaPlayer) -#include "tst_qmediaplayer.moc" |