summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/integration/qaudiodecoderbackend/BLACKLIST41
-rw-r--r--tests/auto/integration/qaudiodecoderbackend/qaudiodecoderbackend.pro2
-rw-r--r--tests/auto/integration/qaudiodeviceinfo/BLACKLIST4
-rw-r--r--tests/auto/integration/qaudiodeviceinfo/qaudiodeviceinfo.pro2
-rw-r--r--[-rwxr-xr-x]tests/auto/integration/qaudioinput/tst_qaudioinput.cpp0
-rw-r--r--[-rwxr-xr-x]tests/auto/integration/qaudioinput/wavheader.cpp0
-rw-r--r--[-rwxr-xr-x]tests/auto/integration/qaudioinput/wavheader.h0
-rw-r--r--tests/auto/integration/qaudiooutput/BLACKLIST4
-rw-r--r--[-rwxr-xr-x]tests/auto/integration/qaudiooutput/tst_qaudiooutput.cpp0
-rw-r--r--[-rwxr-xr-x]tests/auto/integration/qaudiooutput/wavheader.cpp0
-rw-r--r--[-rwxr-xr-x]tests/auto/integration/qaudiooutput/wavheader.h0
-rw-r--r--tests/auto/integration/qmediaplayerbackend/BLACKLIST62
-rw-r--r--tests/auto/integration/qmediaplayerbackend/qmediaplayerbackend.pro2
-rw-r--r--tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp11
-rw-r--r--tests/auto/integration/qsoundeffect/BLACKLIST6
-rw-r--r--tests/auto/integration/qsoundeffect/qsoundeffect.pro4
-rw-r--r--tests/auto/unit/qaudiodecoder/tst_qaudiodecoder.cpp8
-rw-r--r--tests/auto/unit/qdeclarativeaudio/qdeclarativeaudio.pro4
-rw-r--r--tests/auto/unit/qdeclarativeaudio/tst_qdeclarativeaudio.cpp49
-rw-r--r--tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp41
-rw-r--r--tests/auto/unit/qmediaplaylist/tst_qmediaplaylist.cpp304
-rw-r--r--tests/auto/unit/qmultimedia_common/mockaudiorolecontrol.h72
-rw-r--r--tests/auto/unit/qmultimedia_common/mockmediaplayerservice.h13
-rw-r--r--tests/auto/unit/qmultimedia_common/mockmediaplaylistcontrol.h46
-rw-r--r--tests/auto/unit/qmultimedia_common/mockplayer.pri3
-rw-r--r--tests/auto/unit/qmultimedia_common/mockplaylistservice.h2
-rw-r--r--tests/auto/unit/qmultimedia_common/mockreadonlyplaylistprovider.h1
-rw-r--r--tests/auto/unit/qvideowidget/tst_qvideowidget.cpp103
28 files changed, 678 insertions, 106 deletions
diff --git a/tests/auto/integration/qaudiodecoderbackend/BLACKLIST b/tests/auto/integration/qaudiodecoderbackend/BLACKLIST
new file mode 100644
index 000000000..038b89022
--- /dev/null
+++ b/tests/auto/integration/qaudiodecoderbackend/BLACKLIST
@@ -0,0 +1,41 @@
+# QTBUG-46331
+
+[fileTest]
+opensuse-13.1 64bit
+redhatenterpriselinuxworkstation-6.6
+osx-10.8
+osx-10.9
+osx-10.10
+osx-10.11
+windows 32bit developer-build
+windows 64bit developer-build
+
+[unsupportedFileTest]
+opensuse-13.1 64bit
+redhatenterpriselinuxworkstation-6.6
+osx-10.8
+osx-10.9
+osx-10.10
+osx-10.11
+windows 32bit developer-build
+windows 64bit developer-build
+
+[corruptedFileTest]
+opensuse-13.1 64bit
+redhatenterpriselinuxworkstation-6.6
+osx-10.8
+osx-10.9
+osx-10.10
+osx-10.11
+windows 32bit developer-build
+windows 64bit developer-build
+
+[deviceTest]
+opensuse-13.1 64bit
+redhatenterpriselinuxworkstation-6.6
+osx-10.8
+osx-10.9
+osx-10.10
+osx-10.11
+windows 32bit developer-build
+windows 64bit developer-build
diff --git a/tests/auto/integration/qaudiodecoderbackend/qaudiodecoderbackend.pro b/tests/auto/integration/qaudiodecoderbackend/qaudiodecoderbackend.pro
index 80ce0c112..c9f5a089c 100644
--- a/tests/auto/integration/qaudiodecoderbackend/qaudiodecoderbackend.pro
+++ b/tests/auto/integration/qaudiodecoderbackend/qaudiodecoderbackend.pro
@@ -3,7 +3,7 @@ TARGET = tst_qaudiodecoderbackend
QT += multimedia multimedia-private testlib
# This is more of a system test
-CONFIG += testcase insignificant_test
+CONFIG += testcase
TESTDATA += testdata/*
INCLUDEPATH += \
diff --git a/tests/auto/integration/qaudiodeviceinfo/BLACKLIST b/tests/auto/integration/qaudiodeviceinfo/BLACKLIST
new file mode 100644
index 000000000..40dc63a09
--- /dev/null
+++ b/tests/auto/integration/qaudiodeviceinfo/BLACKLIST
@@ -0,0 +1,4 @@
+# QTBUG-46409
+
+[deviceName]
+redhatenterpriselinuxworkstation-6.6
diff --git a/tests/auto/integration/qaudiodeviceinfo/qaudiodeviceinfo.pro b/tests/auto/integration/qaudiodeviceinfo/qaudiodeviceinfo.pro
index 69bd792bc..98ed7e69c 100644
--- a/tests/auto/integration/qaudiodeviceinfo/qaudiodeviceinfo.pro
+++ b/tests/auto/integration/qaudiodeviceinfo/qaudiodeviceinfo.pro
@@ -3,7 +3,7 @@ TARGET = tst_qaudiodeviceinfo
QT += core multimedia-private testlib
# This is more of a system test
-CONFIG += testcase insignificant_test
+CONFIG += testcase
SOURCES += tst_qaudiodeviceinfo.cpp
diff --git a/tests/auto/integration/qaudioinput/tst_qaudioinput.cpp b/tests/auto/integration/qaudioinput/tst_qaudioinput.cpp
index 242787841..242787841 100755..100644
--- a/tests/auto/integration/qaudioinput/tst_qaudioinput.cpp
+++ b/tests/auto/integration/qaudioinput/tst_qaudioinput.cpp
diff --git a/tests/auto/integration/qaudioinput/wavheader.cpp b/tests/auto/integration/qaudioinput/wavheader.cpp
index adb28e7a7..adb28e7a7 100755..100644
--- a/tests/auto/integration/qaudioinput/wavheader.cpp
+++ b/tests/auto/integration/qaudioinput/wavheader.cpp
diff --git a/tests/auto/integration/qaudioinput/wavheader.h b/tests/auto/integration/qaudioinput/wavheader.h
index 04fd951f6..04fd951f6 100755..100644
--- a/tests/auto/integration/qaudioinput/wavheader.h
+++ b/tests/auto/integration/qaudioinput/wavheader.h
diff --git a/tests/auto/integration/qaudiooutput/BLACKLIST b/tests/auto/integration/qaudiooutput/BLACKLIST
new file mode 100644
index 000000000..e640ef926
--- /dev/null
+++ b/tests/auto/integration/qaudiooutput/BLACKLIST
@@ -0,0 +1,4 @@
+[pullSuspendResume]
+redhatenterpriselinuxworkstation-6.6
+ubuntu-14.04
+opensuse-13.1 64bit
diff --git a/tests/auto/integration/qaudiooutput/tst_qaudiooutput.cpp b/tests/auto/integration/qaudiooutput/tst_qaudiooutput.cpp
index b887d3f9a..b887d3f9a 100755..100644
--- a/tests/auto/integration/qaudiooutput/tst_qaudiooutput.cpp
+++ b/tests/auto/integration/qaudiooutput/tst_qaudiooutput.cpp
diff --git a/tests/auto/integration/qaudiooutput/wavheader.cpp b/tests/auto/integration/qaudiooutput/wavheader.cpp
index adb28e7a7..adb28e7a7 100755..100644
--- a/tests/auto/integration/qaudiooutput/wavheader.cpp
+++ b/tests/auto/integration/qaudiooutput/wavheader.cpp
diff --git a/tests/auto/integration/qaudiooutput/wavheader.h b/tests/auto/integration/qaudiooutput/wavheader.h
index 04fd951f6..04fd951f6 100755..100644
--- a/tests/auto/integration/qaudiooutput/wavheader.h
+++ b/tests/auto/integration/qaudiooutput/wavheader.h
diff --git a/tests/auto/integration/qmediaplayerbackend/BLACKLIST b/tests/auto/integration/qmediaplayerbackend/BLACKLIST
new file mode 100644
index 000000000..9f0d4b746
--- /dev/null
+++ b/tests/auto/integration/qmediaplayerbackend/BLACKLIST
@@ -0,0 +1,62 @@
+# QTBUG-46368
+
+osx-10.8
+osx-10.9
+osx-10.10
+osx-10.11
+windows 32bit developer-build
+windows 64bit developer-build
+
+[construction]
+opensuse-13.1 64bit
+
+[loadMedia]
+opensuse-13.1 64bit
+windows 64bit developer-build
+
+[unloadMedia]
+opensuse-13.1 64bit
+windows 64bit developer-build
+
+[playPauseStop]
+opensuse-13.1 64bit
+redhatenterpriselinuxworkstation-6.6
+ubuntu-14.04 64bit
+windows 64bit developer-build
+
+[processEOS]
+opensuse-13.1 64bit
+windows 64bit developer-build
+
+[deleteLaterAtEOS]
+opensuse-13.1 64bit
+windows 64bit developer-build
+
+[volumeAndMuted]
+opensuse-13.1 64bit
+
+[volumeAcrossFiles]
+opensuse-13.1 64bit
+
+[initialVolume]
+opensuse-13.1 64bit
+windows 64bit developer-build
+
+[playlist]
+opensuse-13.1 64bit
+redhatenterpriselinuxworkstation-6.6
+
+[seekPauseSeek]
+redhatenterpriselinuxworkstation-6.6
+
+[seekInStoppedState]
+redhatenterpriselinuxworkstation-6.6
+
+[subsequentPlayback]
+redhatenterpriselinuxworkstation-6.6
+
+[probes]
+redhatenterpriselinuxworkstation-6.6
+
+[surfaceTest]
+redhatenterpriselinuxworkstation-6.6
diff --git a/tests/auto/integration/qmediaplayerbackend/qmediaplayerbackend.pro b/tests/auto/integration/qmediaplayerbackend/qmediaplayerbackend.pro
index 79028d885..a2c1bdf87 100644
--- a/tests/auto/integration/qmediaplayerbackend/qmediaplayerbackend.pro
+++ b/tests/auto/integration/qmediaplayerbackend/qmediaplayerbackend.pro
@@ -3,7 +3,7 @@ TARGET = tst_qmediaplayerbackend
QT += multimedia-private testlib
# This is more of a system test
-CONFIG += testcase insignificant_test
+CONFIG += testcase
SOURCES += \
diff --git a/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp b/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp
index 916f70eff..c032734c5 100644
--- a/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp
+++ b/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp
@@ -220,13 +220,13 @@ void tst_QMediaPlayerBackend::initTestCase()
qRegisterMetaType<QMediaContent>();
QStringList mediaCandidates;
- mediaCandidates << QFINDTESTDATA("testdata/colors.ogv");
mediaCandidates << QFINDTESTDATA("testdata/colors.mp4");
+ mediaCandidates << QFINDTESTDATA("testdata/colors.ogv");
localVideoFile = selectMediaFile(mediaCandidates);
mediaCandidates.clear();
- mediaCandidates << QFINDTESTDATA("testdata/nokia-tune.mkv");
mediaCandidates << QFINDTESTDATA("testdata/nokia-tune.mp3");
+ mediaCandidates << QFINDTESTDATA("testdata/nokia-tune.mkv");
localCompressedSoundFile = selectMediaFile(mediaCandidates);
localFileWithMetadata = selectMediaFile(QStringList() << QFINDTESTDATA("testdata/nokia-tune.mp3"));
@@ -478,7 +478,7 @@ void tst_QMediaPlayerBackend::processEOS()
//position is reset to start
QTRY_VERIFY(player.position() < 100);
- QVERIFY(positionSpy.count() > 0);
+ QTRY_VERIFY(positionSpy.count() > 0);
QCOMPARE(positionSpy.first()[0].value<qint64>(), 0);
QCOMPARE(player.state(), QMediaPlayer::PlayingState);
@@ -720,7 +720,7 @@ void tst_QMediaPlayerBackend::seekPauseSeek()
player.pause();
QTRY_COMPARE(player.state(), QMediaPlayer::PausedState); // it might take some time for the operation to be completed
- QTRY_COMPARE(surface->m_frameList.size(), 1); // we must see a frame at position 7000 here
+ QTRY_VERIFY(!surface->m_frameList.isEmpty()); // we must see a frame at position 7000 here
{
QVideoFrame frame = surface->m_frameList.back();
@@ -739,12 +739,13 @@ void tst_QMediaPlayerBackend::seekPauseSeek()
frame.unmap();
}
+ surface->m_frameList.clear();
positionSpy.clear();
position = 12000;
player.setPosition(position);
QTRY_VERIFY(!positionSpy.isEmpty() && qAbs(player.position() - position) < (qint64)500);
QCOMPARE(player.state(), QMediaPlayer::PausedState);
- QCOMPARE(surface->m_frameList.size(), 2);
+ QVERIFY(!surface->m_frameList.isEmpty());
{
QVideoFrame frame = surface->m_frameList.back();
diff --git a/tests/auto/integration/qsoundeffect/BLACKLIST b/tests/auto/integration/qsoundeffect/BLACKLIST
new file mode 100644
index 000000000..f290cc8ff
--- /dev/null
+++ b/tests/auto/integration/qsoundeffect/BLACKLIST
@@ -0,0 +1,6 @@
+# QTBUG-46689
+
+[testLooping]
+ubuntu-14.04 64bit
+redhatenterpriselinuxworkstation-6.6
+opensuse-13.1
diff --git a/tests/auto/integration/qsoundeffect/qsoundeffect.pro b/tests/auto/integration/qsoundeffect/qsoundeffect.pro
index cb186db20..bce5fc77a 100644
--- a/tests/auto/integration/qsoundeffect/qsoundeffect.pro
+++ b/tests/auto/integration/qsoundeffect/qsoundeffect.pro
@@ -15,6 +15,6 @@ unix:!mac {
TESTDATA += test.wav
-win32:CONFIG += insignificant_test # QTBUG-26509
-linux-*:CONFIG += insignificant_test # QTBUG-26748
DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
+
+config_pulseaudio: CONFIG += insignificant_testcase # Crashes in QSoundEffectPrivate::sampleReady with bufferAttr == 0
diff --git a/tests/auto/unit/qaudiodecoder/tst_qaudiodecoder.cpp b/tests/auto/unit/qaudiodecoder/tst_qaudiodecoder.cpp
index 72ba0484c..5d1e045d0 100644
--- a/tests/auto/unit/qaudiodecoder/tst_qaudiodecoder.cpp
+++ b/tests/auto/unit/qaudiodecoder/tst_qaudiodecoder.cpp
@@ -128,7 +128,7 @@ void tst_QAudioDecoder::read()
QVERIFY(!b.isValid());
// Wait a while
- QTRY_COMPARE(d.bufferAvailable(), 1);
+ QTRY_VERIFY(d.bufferAvailable());
QVERIFY(d.bufferAvailable());
@@ -189,7 +189,7 @@ void tst_QAudioDecoder::stop()
QVERIFY(!b.isValid());
// Wait a while
- QTRY_COMPARE(d.bufferAvailable(), 1);
+ QTRY_VERIFY(d.bufferAvailable());
QVERIFY(d.bufferAvailable());
@@ -231,7 +231,7 @@ void tst_QAudioDecoder::format()
QVERIFY(!b.isValid());
// Wait a while
- QTRY_COMPARE(d.bufferAvailable(), 1);
+ QTRY_VERIFY(d.bufferAvailable());
b = d.read();
QVERIFY(d.audioFormat() == b.format());
@@ -251,7 +251,7 @@ void tst_QAudioDecoder::format()
// Decode again
d.start();
- QTRY_COMPARE(d.bufferAvailable(), 1);
+ QTRY_VERIFY(d.bufferAvailable());
b = d.read();
QVERIFY(d.audioFormat() == f);
diff --git a/tests/auto/unit/qdeclarativeaudio/qdeclarativeaudio.pro b/tests/auto/unit/qdeclarativeaudio/qdeclarativeaudio.pro
index 6471f7b2a..e36c7dc1f 100644
--- a/tests/auto/unit/qdeclarativeaudio/qdeclarativeaudio.pro
+++ b/tests/auto/unit/qdeclarativeaudio/qdeclarativeaudio.pro
@@ -13,3 +13,7 @@ SOURCES += \
INCLUDEPATH += ../../../../src/imports/multimedia
DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
+
+include (../qmultimedia_common/mock.pri)
+include (../qmultimedia_common/mockplayer.pri)
+
diff --git a/tests/auto/unit/qdeclarativeaudio/tst_qdeclarativeaudio.cpp b/tests/auto/unit/qdeclarativeaudio/tst_qdeclarativeaudio.cpp
index a257ee7b6..355e25331 100644
--- a/tests/auto/unit/qdeclarativeaudio/tst_qdeclarativeaudio.cpp
+++ b/tests/auto/unit/qdeclarativeaudio/tst_qdeclarativeaudio.cpp
@@ -38,6 +38,9 @@
#include "qdeclarativeaudio_p.h"
#include "qdeclarativemediametadata_p.h"
+#include "mockmediaserviceprovider.h"
+#include "mockmediaplayerservice.h"
+
#include <QtMultimedia/qmediametadata.h>
#include <qmediaplayercontrol.h>
#include <qmediaservice.h>
@@ -45,6 +48,8 @@
#include <qmetadatareadercontrol.h>
#include <QtGui/qguiapplication.h>
+#include <QtQml/qqmlengine.h>
+#include <QtQml/qqmlcomponent.h>
class tst_QDeclarativeAudio : public QObject
{
@@ -73,9 +78,11 @@ private slots:
void metaData();
void error();
void loops();
+ void audioRole();
};
Q_DECLARE_METATYPE(QDeclarativeAudio::Error);
+Q_DECLARE_METATYPE(QDeclarativeAudio::AudioRole);
class QtTestMediaPlayerControl : public QMediaPlayerControl
{
@@ -285,6 +292,7 @@ public:
void tst_QDeclarativeAudio::initTestCase()
{
qRegisterMetaType<QDeclarativeAudio::Error>();
+ qRegisterMetaType<QDeclarativeAudio::AudioRole>();
}
void tst_QDeclarativeAudio::nullPlayerControl()
@@ -1007,6 +1015,47 @@ void tst_QDeclarativeAudio::loops()
qDebug() << "Testing version 5";
}
+void tst_QDeclarativeAudio::audioRole()
+{
+ MockMediaPlayerService mockService;
+ MockMediaServiceProvider mockProvider(&mockService);
+ QMediaServiceProvider::setDefaultServiceProvider(&mockProvider);
+
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.setData("import QtQuick 2.0 \n import QtMultimedia 5.6 \n Audio { }", QUrl());
+
+ {
+ mockService.setHasAudioRole(false);
+ QDeclarativeAudio *audio = static_cast<QDeclarativeAudio*>(component.create());
+
+ QCOMPARE(audio->audioRole(), QDeclarativeAudio::UnknownRole);
+ QVERIFY(audio->supportedAudioRoles().isArray());
+ QVERIFY(audio->supportedAudioRoles().toVariant().toList().isEmpty());
+
+ QSignalSpy spy(audio, SIGNAL(audioRoleChanged()));
+ audio->setAudioRole(QDeclarativeAudio::MusicRole);
+ QCOMPARE(audio->audioRole(), QDeclarativeAudio::UnknownRole);
+ QCOMPARE(spy.count(), 0);
+ }
+
+ {
+ mockService.reset();
+ mockService.setHasAudioRole(true);
+ QDeclarativeAudio *audio = static_cast<QDeclarativeAudio*>(component.create());
+ QSignalSpy spy(audio, SIGNAL(audioRoleChanged()));
+
+ QCOMPARE(audio->audioRole(), QDeclarativeAudio::UnknownRole);
+ QVERIFY(audio->supportedAudioRoles().isArray());
+ QVERIFY(!audio->supportedAudioRoles().toVariant().toList().isEmpty());
+
+ audio->setAudioRole(QDeclarativeAudio::MusicRole);
+ QCOMPARE(audio->audioRole(), QDeclarativeAudio::MusicRole);
+ QCOMPARE(mockService.mockAudioRoleControl->audioRole(), QAudio::MusicRole);
+ QCOMPARE(spy.count(), 1);
+ }
+}
+
QTEST_MAIN(tst_QDeclarativeAudio)
#include "tst_qdeclarativeaudio.moc"
diff --git a/tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp b/tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp
index 0271f1a8f..84248cd46 100644
--- a/tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp
+++ b/tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp
@@ -135,6 +135,7 @@ private slots:
void testSupportedMimeTypes();
void testQrc_data();
void testQrc();
+ void testAudioRole();
private:
void setupCommonTestData();
@@ -1296,5 +1297,45 @@ void tst_QMediaPlayer::testQrc()
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", qVariantFromValue(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);
+ }
+}
+
QTEST_GUILESS_MAIN(tst_QMediaPlayer)
#include "tst_qmediaplayer.moc"
diff --git a/tests/auto/unit/qmediaplaylist/tst_qmediaplaylist.cpp b/tests/auto/unit/qmediaplaylist/tst_qmediaplaylist.cpp
index daecda82b..104046d0e 100644
--- a/tests/auto/unit/qmediaplaylist/tst_qmediaplaylist.cpp
+++ b/tests/auto/unit/qmediaplaylist/tst_qmediaplaylist.cpp
@@ -51,14 +51,16 @@
QT_USE_NAMESPACE
-class MockReadOnlyPlaylistObject : public QMediaObject
+class MockPlaylistObject : public QMediaObject
{
Q_OBJECT
public:
- MockReadOnlyPlaylistObject(QObject *parent = 0)
- :QMediaObject(parent, new MockPlaylistService)
+ MockPlaylistObject(QObject *parent = 0)
+ : QMediaObject(parent, mockService = new MockPlaylistService)
{
}
+
+ MockPlaylistService *mockService;
};
class tst_QMediaPlaylist : public QObject
@@ -711,7 +713,9 @@ void tst_QMediaPlaylist::shuffle()
void tst_QMediaPlaylist::readOnlyPlaylist()
{
- MockReadOnlyPlaylistObject mediaObject;
+ MockPlaylistObject mediaObject;
+ mediaObject.mockService->mockControl->setReadOnly(true);
+
QMediaPlaylist playlist;
mediaObject.bind(&playlist);
@@ -777,26 +781,280 @@ void tst_QMediaPlaylist::readOnlyPlaylist()
void tst_QMediaPlaylist::setMediaObject()
{
- MockReadOnlyPlaylistObject mediaObject;
-
- QMediaPlaylist playlist;
- QVERIFY(playlist.mediaObject() == 0);
- QVERIFY(!playlist.isReadOnly());
-
- mediaObject.bind(&playlist);
- QCOMPARE(playlist.mediaObject(), qobject_cast<QMediaObject*>(&mediaObject));
- QCOMPARE(playlist.mediaCount(), 3);
- QVERIFY(playlist.isReadOnly());
-
- mediaObject.unbind(&playlist);
- QVERIFY(playlist.mediaObject() == 0);
- QCOMPARE(playlist.mediaCount(), 0);
- QVERIFY(!playlist.isReadOnly());
+ 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")));
- mediaObject.bind(&playlist);
- QCOMPARE(playlist.mediaObject(), qobject_cast<QMediaObject*>(&mediaObject));
- QCOMPARE(playlist.mediaCount(), 3);
- QVERIFY(playlist.isReadOnly());
+ {
+ MockPlaylistObject mediaObject;
+
+ QMediaPlaylist playlist;
+ QSignalSpy currentIndexSpy(&playlist, SIGNAL(currentIndexChanged(int)));
+ QSignalSpy playbackModeSpy(&playlist, SIGNAL(playbackModeChanged(QMediaPlaylist::PlaybackMode)));
+ QSignalSpy mediaAboutToBeInsertedSpy(&playlist, SIGNAL(mediaAboutToBeInserted(int, int)));
+ QSignalSpy mediaInsertedSpy(&playlist, SIGNAL(mediaInserted(int, int)));
+ QSignalSpy mediaAboutToBeRemovedSpy(&playlist, SIGNAL(mediaAboutToBeRemoved(int, int)));
+ QSignalSpy mediaRemovedSpy(&playlist, SIGNAL(mediaRemoved(int, int)));
+ QSignalSpy mediaChangedSpy(&playlist, SIGNAL(mediaChanged(int, int)));
+
+ QVERIFY(playlist.isEmpty());
+
+ mediaObject.bind(&playlist);
+
+ // Playlist is now using the service's control, nothing should have changed
+ QVERIFY(playlist.isEmpty());
+ QCOMPARE(playlist.currentIndex(), -1);
+ QCOMPARE(playlist.playbackMode(), QMediaPlaylist::Sequential);
+ QCOMPARE(currentIndexSpy.count(), 0);
+ QCOMPARE(playbackModeSpy.count(), 0);
+ QCOMPARE(mediaAboutToBeInsertedSpy.count(), 0);
+ QCOMPARE(mediaInsertedSpy.count(), 0);
+ QCOMPARE(mediaAboutToBeRemovedSpy.count(), 0);
+ QCOMPARE(mediaRemovedSpy.count(), 0);
+ QCOMPARE(mediaChangedSpy.count(), 0);
+
+ // add items to service's playlist control
+ playlist.addMedia(content0);
+ playlist.addMedia(content1);
+ playlist.setCurrentIndex(1);
+ playlist.setPlaybackMode(QMediaPlaylist::Random);
+ QCOMPARE(playlist.mediaCount(), 2);
+ QCOMPARE(playlist.currentIndex(), 1);
+ QCOMPARE(playlist.currentMedia(), content1);
+ QCOMPARE(playlist.playbackMode(), QMediaPlaylist::Random);
+
+ currentIndexSpy.clear();
+ playbackModeSpy.clear();
+ mediaAboutToBeInsertedSpy.clear();
+ mediaInsertedSpy.clear();
+ mediaAboutToBeRemovedSpy.clear();
+ mediaRemovedSpy.clear();
+ mediaChangedSpy.clear();
+
+ // unbind the playlist, reverting back to the internal control.
+ // playlist content should't have changed.
+ mediaObject.unbind(&playlist);
+ QCOMPARE(playlist.mediaCount(), 2);
+ QCOMPARE(playlist.currentIndex(), 1);
+ QCOMPARE(playlist.currentMedia(), content1);
+ QCOMPARE(playlist.playbackMode(), QMediaPlaylist::Random);
+ QCOMPARE(playbackModeSpy.count(), 0);
+ QCOMPARE(mediaAboutToBeInsertedSpy.count(), 0);
+ QCOMPARE(mediaInsertedSpy.count(), 0);
+ QCOMPARE(mediaAboutToBeRemovedSpy.count(), 0);
+ QCOMPARE(mediaRemovedSpy.count(), 0);
+ QCOMPARE(mediaChangedSpy.count(), 0);
+ }
+ {
+ MockPlaylistObject mediaObject;
+
+ QMediaPlaylist playlist;
+ QVERIFY(playlist.isEmpty());
+ // Add items to playlist before binding to the service (internal control)
+ playlist.addMedia(content0);
+ playlist.addMedia(content1);
+ playlist.addMedia(content2);
+ playlist.setCurrentIndex(2);
+ playlist.setPlaybackMode(QMediaPlaylist::CurrentItemOnce);
+
+ QSignalSpy currentIndexSpy(&playlist, SIGNAL(currentIndexChanged(int)));
+ QSignalSpy playbackModeSpy(&playlist, SIGNAL(playbackModeChanged(QMediaPlaylist::PlaybackMode)));
+ QSignalSpy mediaAboutToBeInsertedSpy(&playlist, SIGNAL(mediaAboutToBeInserted(int, int)));
+ QSignalSpy mediaInsertedSpy(&playlist, SIGNAL(mediaInserted(int, int)));
+ QSignalSpy mediaAboutToBeRemovedSpy(&playlist, SIGNAL(mediaAboutToBeRemoved(int, int)));
+ QSignalSpy mediaRemovedSpy(&playlist, SIGNAL(mediaRemoved(int, int)));
+ QSignalSpy mediaChangedSpy(&playlist, SIGNAL(mediaChanged(int, int)));
+
+ // Bind playlist, content should be unchanged
+ mediaObject.bind(&playlist);
+ QCOMPARE(playlist.mediaCount(), 3);
+ QCOMPARE(playlist.currentIndex(), 2);
+ QCOMPARE(playlist.currentMedia(), content2);
+ QCOMPARE(playlist.playbackMode(), QMediaPlaylist::CurrentItemOnce);
+ QCOMPARE(currentIndexSpy.count(), 0);
+ QCOMPARE(playbackModeSpy.count(), 0);
+ QCOMPARE(mediaAboutToBeInsertedSpy.count(), 0);
+ QCOMPARE(mediaInsertedSpy.count(), 0);
+ QCOMPARE(mediaAboutToBeRemovedSpy.count(), 0);
+ QCOMPARE(mediaRemovedSpy.count(), 0);
+ QCOMPARE(mediaChangedSpy.count(), 0);
+
+ // Clear playlist content (service's playlist control)
+ playlist.clear();
+ playlist.setCurrentIndex(-1);
+ playlist.setPlaybackMode(QMediaPlaylist::Random);
+
+ currentIndexSpy.clear();
+ playbackModeSpy.clear();
+ mediaAboutToBeInsertedSpy.clear();
+ mediaInsertedSpy.clear();
+ mediaAboutToBeRemovedSpy.clear();
+ mediaRemovedSpy.clear();
+ mediaChangedSpy.clear();
+
+ // unbind playlist from service, reverting back to the internal control.
+ // playlist should still be empty
+ mediaObject.unbind(&playlist);
+ QCOMPARE(playlist.mediaCount(), 0);
+ QCOMPARE(playlist.currentIndex(), -1);
+ QCOMPARE(playlist.currentMedia(), QMediaContent());
+ QCOMPARE(playlist.playbackMode(), QMediaPlaylist::Random);
+ QCOMPARE(playbackModeSpy.count(), 0);
+ QCOMPARE(mediaAboutToBeInsertedSpy.count(), 0);
+ QCOMPARE(mediaInsertedSpy.count(), 0);
+ QCOMPARE(mediaAboutToBeRemovedSpy.count(), 0);
+ QCOMPARE(mediaRemovedSpy.count(), 0);
+ QCOMPARE(mediaChangedSpy.count(), 0);
+ }
+ {
+ MockPlaylistObject mediaObject;
+
+ QMediaPlaylist playlist;
+ QVERIFY(playlist.isEmpty());
+ // Add items to playlist before attaching to media player (internal control)
+ playlist.addMedia(content0);
+ playlist.addMedia(content1);
+ playlist.setCurrentIndex(-1);
+ playlist.setPlaybackMode(QMediaPlaylist::CurrentItemOnce);
+
+ // Add items to service's playlist before binding
+ QMediaPlaylistProvider *pp = mediaObject.mockService->mockControl->playlistProvider();
+ pp->addMedia(content2);
+ pp->addMedia(content3);
+ mediaObject.mockService->mockControl->setCurrentIndex(1);
+ mediaObject.mockService->mockControl->setPlaybackMode(QMediaPlaylist::Random);
+
+ QSignalSpy currentIndexSpy(&playlist, SIGNAL(currentIndexChanged(int)));
+ QSignalSpy playbackModeSpy(&playlist, SIGNAL(playbackModeChanged(QMediaPlaylist::PlaybackMode)));
+ QSignalSpy mediaAboutToBeInsertedSpy(&playlist, SIGNAL(mediaAboutToBeInserted(int, int)));
+ QSignalSpy mediaInsertedSpy(&playlist, SIGNAL(mediaInserted(int, int)));
+ QSignalSpy mediaAboutToBeRemovedSpy(&playlist, SIGNAL(mediaAboutToBeRemoved(int, int)));
+ QSignalSpy mediaRemovedSpy(&playlist, SIGNAL(mediaRemoved(int, int)));
+ QSignalSpy mediaChangedSpy(&playlist, SIGNAL(mediaChanged(int, int)));
+
+ // Bind playlist, it should contain only what was explicitly added to the playlist.
+ // Anything that was present in the service's control should have been cleared
+ mediaObject.bind(&playlist);
+ QCOMPARE(playlist.mediaCount(), 2);
+ QCOMPARE(playlist.currentIndex(), -1);
+ QCOMPARE(playlist.playbackMode(), QMediaPlaylist::CurrentItemOnce);
+ QCOMPARE(currentIndexSpy.count(), 0);
+ QCOMPARE(playbackModeSpy.count(), 0);
+ QCOMPARE(mediaAboutToBeInsertedSpy.count(), 0);
+ QCOMPARE(mediaInsertedSpy.count(), 0);
+ QCOMPARE(mediaAboutToBeRemovedSpy.count(), 0);
+ QCOMPARE(mediaRemovedSpy.count(), 0);
+ QCOMPARE(mediaChangedSpy.count(), 0);
+
+ // do some changes
+ playlist.removeMedia(0); // content0
+ playlist.addMedia(content3);
+ playlist.setCurrentIndex(0);
+
+ currentIndexSpy.clear();
+ playbackModeSpy.clear();
+ mediaAboutToBeInsertedSpy.clear();
+ mediaInsertedSpy.clear();
+ mediaAboutToBeRemovedSpy.clear();
+ mediaRemovedSpy.clear();
+ mediaChangedSpy.clear();
+
+ // unbind playlist from service
+ mediaObject.unbind(&playlist);
+ QCOMPARE(playlist.mediaCount(), 2);
+ QCOMPARE(playlist.currentIndex(), 0);
+ QCOMPARE(playlist.currentMedia(), content1);
+ QCOMPARE(playlist.playbackMode(), QMediaPlaylist::CurrentItemOnce);
+ QCOMPARE(currentIndexSpy.count(), 0);
+ QCOMPARE(playbackModeSpy.count(), 0);
+ QCOMPARE(mediaAboutToBeInsertedSpy.count(), 0);
+ QCOMPARE(mediaInsertedSpy.count(), 0);
+ QCOMPARE(mediaAboutToBeRemovedSpy.count(), 0);
+ QCOMPARE(mediaRemovedSpy.count(), 0);
+ QCOMPARE(mediaChangedSpy.count(), 0);
+
+ // bind again, nothing should have changed
+ mediaObject.bind(&playlist);
+ QCOMPARE(playlist.mediaCount(), 2);
+ QCOMPARE(playlist.currentIndex(), 0);
+ QCOMPARE(playlist.currentMedia(), content1);
+ QCOMPARE(playlist.playbackMode(), QMediaPlaylist::CurrentItemOnce);
+ QCOMPARE(currentIndexSpy.count(), 0);
+ QCOMPARE(playbackModeSpy.count(), 0);
+ QCOMPARE(mediaAboutToBeInsertedSpy.count(), 0);
+ QCOMPARE(mediaInsertedSpy.count(), 0);
+ QCOMPARE(mediaAboutToBeRemovedSpy.count(), 0);
+ QCOMPARE(mediaRemovedSpy.count(), 0);
+ QCOMPARE(mediaChangedSpy.count(), 0);
+ }
+ {
+ MockPlaylistObject mediaObject;
+ mediaObject.mockService->mockControl->setReadOnly(true);
+
+ QMediaPlaylist playlist;
+ QVERIFY(playlist.isEmpty());
+ // Add items to playlist before binding to the service internal control)
+ playlist.addMedia(content0);
+ playlist.addMedia(content1);
+ playlist.setCurrentIndex(-1);
+ playlist.setPlaybackMode(QMediaPlaylist::CurrentItemOnce);
+
+ QSignalSpy currentIndexSpy(&playlist, SIGNAL(currentIndexChanged(int)));
+ QSignalSpy playbackModeSpy(&playlist, SIGNAL(playbackModeChanged(QMediaPlaylist::PlaybackMode)));
+ QSignalSpy mediaAboutToBeInsertedSpy(&playlist, SIGNAL(mediaAboutToBeInserted(int, int)));
+ QSignalSpy mediaInsertedSpy(&playlist, SIGNAL(mediaInserted(int, int)));
+ QSignalSpy mediaAboutToBeRemovedSpy(&playlist, SIGNAL(mediaAboutToBeRemoved(int, int)));
+ QSignalSpy mediaRemovedSpy(&playlist, SIGNAL(mediaRemoved(int, int)));
+ QSignalSpy mediaChangedSpy(&playlist, SIGNAL(mediaChanged(int, int)));
+
+ // Bind playlist. Since the service's control is read-only, no synchronization
+ // should be done with the internal control. The mediaRemoved() and mediaInserted()
+ // should be emitted to notify about the change.
+ mediaObject.bind(&playlist);
+ QCOMPARE(playlist.mediaCount(), 3);
+ QCOMPARE(playlist.currentIndex(), -1);
+ QCOMPARE(playlist.playbackMode(), QMediaPlaylist::CurrentItemOnce);
+ QCOMPARE(currentIndexSpy.count(), 0);
+ QCOMPARE(playbackModeSpy.count(), 0);
+
+ QCOMPARE(mediaAboutToBeRemovedSpy.count(), 1);
+ QCOMPARE(mediaAboutToBeRemovedSpy.last().at(0).toInt(), 0);
+ QCOMPARE(mediaAboutToBeRemovedSpy.last().at(1).toInt(), 1);
+ QCOMPARE(mediaRemovedSpy.count(), 1);
+ QCOMPARE(mediaRemovedSpy.last().at(0).toInt(), 0);
+ QCOMPARE(mediaRemovedSpy.last().at(1).toInt(), 1);
+
+ QCOMPARE(mediaAboutToBeInsertedSpy.count(), 1);
+ QCOMPARE(mediaAboutToBeInsertedSpy.last().at(0).toInt(), 0);
+ QCOMPARE(mediaAboutToBeInsertedSpy.last().at(1).toInt(), 2);
+ QCOMPARE(mediaInsertedSpy.count(), 1);
+ QCOMPARE(mediaInsertedSpy.last().at(0).toInt(), 0);
+ QCOMPARE(mediaInsertedSpy.last().at(1).toInt(), 2);
+
+ QCOMPARE(mediaChangedSpy.count(), 0);
+
+ currentIndexSpy.clear();
+ playbackModeSpy.clear();
+ mediaAboutToBeInsertedSpy.clear();
+ mediaInsertedSpy.clear();
+ mediaAboutToBeRemovedSpy.clear();
+ mediaRemovedSpy.clear();
+ mediaChangedSpy.clear();
+
+ // detach playlist from player
+ mediaObject.unbind(&playlist);
+ QCOMPARE(playlist.mediaCount(), 3);
+ QCOMPARE(playlist.currentIndex(), -1);
+ QCOMPARE(playlist.playbackMode(), QMediaPlaylist::CurrentItemOnce);
+ QCOMPARE(currentIndexSpy.count(), 0);
+ QCOMPARE(playbackModeSpy.count(), 0);
+ QCOMPARE(mediaAboutToBeInsertedSpy.count(), 0);
+ QCOMPARE(mediaInsertedSpy.count(), 0);
+ QCOMPARE(mediaAboutToBeRemovedSpy.count(), 0);
+ QCOMPARE(mediaRemovedSpy.count(), 0);
+ QCOMPARE(mediaChangedSpy.count(), 0);
+ }
}
void tst_QMediaPlaylist::testCurrentIndexChanged_signal()
diff --git a/tests/auto/unit/qmultimedia_common/mockaudiorolecontrol.h b/tests/auto/unit/qmultimedia_common/mockaudiorolecontrol.h
new file mode 100644
index 000000000..6ba2328b9
--- /dev/null
+++ b/tests/auto/unit/qmultimedia_common/mockaudiorolecontrol.h
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** 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.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** 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 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
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** 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$
+**
+****************************************************************************/
+
+#ifndef MOCKAUDIOROLECONTROL_H
+#define MOCKAUDIOROLECONTROL_H
+
+#include <qaudiorolecontrol.h>
+
+class MockAudioRoleControl : public QAudioRoleControl
+{
+ friend class MockMediaPlayerService;
+
+public:
+ MockAudioRoleControl()
+ : QAudioRoleControl()
+ , m_audioRole(QAudio::UnknownRole)
+ {
+ }
+
+ QAudio::Role audioRole() const
+ {
+ return m_audioRole;
+ }
+
+ void setAudioRole(QAudio::Role role)
+ {
+ if (role != m_audioRole)
+ emit audioRoleChanged(m_audioRole = role);
+ }
+
+ QList<QAudio::Role> supportedAudioRoles() const
+ {
+ return QList<QAudio::Role>() << QAudio::MusicRole
+ << QAudio::AlarmRole
+ << QAudio::NotificationRole;
+ }
+
+ QAudio::Role m_audioRole;
+};
+
+#endif // MOCKAUDIOROLECONTROL_H
+
diff --git a/tests/auto/unit/qmultimedia_common/mockmediaplayerservice.h b/tests/auto/unit/qmultimedia_common/mockmediaplayerservice.h
index d5c6d2e9f..398f92ac2 100644
--- a/tests/auto/unit/qmultimedia_common/mockmediaplayerservice.h
+++ b/tests/auto/unit/qmultimedia_common/mockmediaplayerservice.h
@@ -42,6 +42,7 @@
#include "mockvideorenderercontrol.h"
#include "mockvideoprobecontrol.h"
#include "mockvideowindowcontrol.h"
+#include "mockaudiorolecontrol.h"
class MockMediaPlayerService : public QMediaService
{
@@ -51,6 +52,7 @@ public:
MockMediaPlayerService():QMediaService(0)
{
mockControl = new MockMediaPlayerControl;
+ mockAudioRoleControl = new MockAudioRoleControl;
mockStreamsControl = new MockStreamsControl;
mockNetworkControl = new MockNetworkAccessControl;
rendererControl = new MockVideoRendererControl;
@@ -58,11 +60,13 @@ public:
mockVideoProbeControl = new MockVideoProbeControl;
windowControl = new MockVideoWindowControl;
windowRef = 0;
+ enableAudioRole = true;
}
~MockMediaPlayerService()
{
delete mockControl;
+ delete mockAudioRoleControl;
delete mockStreamsControl;
delete mockNetworkControl;
delete rendererControl;
@@ -87,6 +91,8 @@ public:
windowRef += 1;
return windowControl;
}
+ } else if (enableAudioRole && qstrcmp(iid, QAudioRoleControl_iid) == 0) {
+ return mockAudioRoleControl;
}
if (qstrcmp(iid, QMediaNetworkAccessControl_iid) == 0)
@@ -125,6 +131,8 @@ public:
void selectCurrentConfiguration(QNetworkConfiguration config) { mockNetworkControl->setCurrentConfiguration(config); }
+ void setHasAudioRole(bool enable) { enableAudioRole = enable; }
+
void reset()
{
mockControl->_state = QMediaPlayer::StoppedState;
@@ -143,11 +151,15 @@ public:
mockControl->_isValid = false;
mockControl->_errorString = QString();
+ enableAudioRole = true;
+ mockAudioRoleControl->m_audioRole = QAudio::UnknownRole;
+
mockNetworkControl->_current = QNetworkConfiguration();
mockNetworkControl->_configurations = QList<QNetworkConfiguration>();
}
MockMediaPlayerControl *mockControl;
+ MockAudioRoleControl *mockAudioRoleControl;
MockStreamsControl *mockStreamsControl;
MockNetworkAccessControl *mockNetworkControl;
MockVideoRendererControl *rendererControl;
@@ -155,6 +167,7 @@ public:
MockVideoWindowControl *windowControl;
int windowRef;
int rendererRef;
+ bool enableAudioRole;
};
diff --git a/tests/auto/unit/qmultimedia_common/mockmediaplaylistcontrol.h b/tests/auto/unit/qmultimedia_common/mockmediaplaylistcontrol.h
index 6620aa763..9f4eabf38 100644
--- a/tests/auto/unit/qmultimedia_common/mockmediaplaylistcontrol.h
+++ b/tests/auto/unit/qmultimedia_common/mockmediaplaylistcontrol.h
@@ -36,24 +36,52 @@
#include <private/qmediaplaylistcontrol_p.h>
#include <private/qmediaplaylistnavigator_p.h>
+#include <private/qmedianetworkplaylistprovider_p.h>
#include "mockreadonlyplaylistprovider.h"
-// Hmm, read only.
class MockMediaPlaylistControl : public QMediaPlaylistControl
{
- Q_OBJECT
public:
- MockMediaPlaylistControl(QObject *parent) : QMediaPlaylistControl(parent)
+ MockMediaPlaylistControl(bool readonly = false, QObject *parent = 0)
+ : QMediaPlaylistControl(parent)
+ , m_navigator(0)
+ , m_playlist(0)
+ , m_ownsProvider(false)
+ , m_readOnly(readonly)
{
- m_navigator = new QMediaPlaylistNavigator(new MockReadOnlyPlaylistProvider(this), this);
+ reset();
}
~MockMediaPlaylistControl()
{
}
- QMediaPlaylistProvider* playlistProvider() const { return m_navigator->playlist(); }
+ void reset()
+ {
+ delete m_navigator;
+ if (m_ownsProvider)
+ delete m_playlist;
+
+ if (m_readOnly)
+ m_playlist = new MockReadOnlyPlaylistProvider(this);
+ else
+ m_playlist = new QMediaNetworkPlaylistProvider(this);
+
+ m_ownsProvider = true;
+ m_navigator = new QMediaPlaylistNavigator(m_playlist, this);
+ }
+
+ void setReadOnly(bool ro)
+ {
+ if (m_readOnly == ro)
+ return;
+
+ m_readOnly = ro;
+ reset();
+ }
+
+ QMediaPlaylistProvider* playlistProvider() const { return m_playlist; }
bool setPlaylistProvider(QMediaPlaylistProvider *newProvider)
{
bool bMediaContentChanged = false;
@@ -70,6 +98,11 @@ public:
emit currentMediaChanged(newProvider->media(i));
}
+ if (m_ownsProvider)
+ delete m_playlist;
+ m_playlist = newProvider;
+ m_ownsProvider = false;
+
m_navigator->setPlaylist(newProvider);
return true;
}
@@ -99,6 +132,9 @@ public:
private:
QMediaPlaylistNavigator *m_navigator;
+ QMediaPlaylistProvider *m_playlist;
+ bool m_ownsProvider;
+ bool m_readOnly;
};
#endif // MOCKMEDIAPLAYLISTCONTROL_H
diff --git a/tests/auto/unit/qmultimedia_common/mockplayer.pri b/tests/auto/unit/qmultimedia_common/mockplayer.pri
index 74f289d47..c43fb31e5 100644
--- a/tests/auto/unit/qmultimedia_common/mockplayer.pri
+++ b/tests/auto/unit/qmultimedia_common/mockplayer.pri
@@ -8,6 +8,7 @@ HEADERS *= \
../qmultimedia_common/mockmediaplayercontrol.h \
../qmultimedia_common/mockmediastreamscontrol.h \
../qmultimedia_common/mockmedianetworkaccesscontrol.h \
- ../qmultimedia_common/mockvideoprobecontrol.h
+ ../qmultimedia_common/mockvideoprobecontrol.h \
+ ../qmultimedia_common/mockaudiorolecontrol.h
include(mockvideo.pri)
diff --git a/tests/auto/unit/qmultimedia_common/mockplaylistservice.h b/tests/auto/unit/qmultimedia_common/mockplaylistservice.h
index 95d95dbff..6c038abfe 100644
--- a/tests/auto/unit/qmultimedia_common/mockplaylistservice.h
+++ b/tests/auto/unit/qmultimedia_common/mockplaylistservice.h
@@ -44,7 +44,7 @@ class MockPlaylistService : public QMediaService
public:
MockPlaylistService():QMediaService(0)
{
- mockControl = new MockMediaPlaylistControl(this);
+ mockControl = new MockMediaPlaylistControl(false, this);
}
~MockPlaylistService()
diff --git a/tests/auto/unit/qmultimedia_common/mockreadonlyplaylistprovider.h b/tests/auto/unit/qmultimedia_common/mockreadonlyplaylistprovider.h
index 50747c1ad..39b1598b0 100644
--- a/tests/auto/unit/qmultimedia_common/mockreadonlyplaylistprovider.h
+++ b/tests/auto/unit/qmultimedia_common/mockreadonlyplaylistprovider.h
@@ -38,7 +38,6 @@
class MockReadOnlyPlaylistProvider : public QMediaPlaylistProvider
{
- Q_OBJECT
public:
MockReadOnlyPlaylistProvider(QObject *parent)
:QMediaPlaylistProvider(parent)
diff --git a/tests/auto/unit/qvideowidget/tst_qvideowidget.cpp b/tests/auto/unit/qvideowidget/tst_qvideowidget.cpp
index 2f84de03f..8dd1f39f4 100644
--- a/tests/auto/unit/qvideowidget/tst_qvideowidget.cpp
+++ b/tests/auto/unit/qvideowidget/tst_qvideowidget.cpp
@@ -114,6 +114,17 @@ private:
Q_DECLARE_METATYPE(Qt::AspectRatioMode)
Q_DECLARE_METATYPE(const uchar *)
+class QtTestVideoWidget : public QVideoWidget
+{
+public:
+ QtTestVideoWidget(QWidget *parent = 0)
+ : QVideoWidget(parent)
+ {
+ setWindowFlags(Qt::X11BypassWindowManagerHint);
+ resize(320, 240);
+ }
+};
+
class QtTestWindowControl : public QVideoWindowControl
{
public:
@@ -339,8 +350,7 @@ public:
void tst_QVideoWidget::nullObject()
{
- QVideoWidget widget;
- widget.setWindowFlags(Qt::X11BypassWindowManagerHint);
+ QtTestVideoWidget widget;
QVERIFY(widget.sizeHint().isEmpty());
@@ -425,11 +435,9 @@ void tst_QVideoWidget::nullService()
{
QtTestVideoObject object(0);
- QVideoWidget widget;
+ QtTestVideoWidget widget;
object.bind(&widget);
- widget.setWindowFlags(Qt::X11BypassWindowManagerHint);
-
QVERIFY(widget.sizeHint().isEmpty());
widget.show();
@@ -459,9 +467,8 @@ void tst_QVideoWidget::noOutputs()
{
QtTestVideoObject object(0, 0, 0);
- QVideoWidget widget;
+ QtTestVideoWidget widget;
object.bind(&widget);
- widget.setWindowFlags(Qt::X11BypassWindowManagerHint);
QVERIFY(widget.sizeHint().isEmpty());
@@ -489,9 +496,8 @@ void tst_QVideoWidget::serviceDestroyed()
QtTestVideoObject object(new QtTestWindowControl, new QtTestWidgetControl, 0);
- QVideoWidget widget;
+ QtTestVideoWidget widget;
object.bind(&widget);
- widget.setWindowFlags(Qt::X11BypassWindowManagerHint);
widget.show();
QVERIFY(QTest::qWaitForWindowExposed(&widget));
@@ -526,16 +532,14 @@ void tst_QVideoWidget::objectDestroyed()
new QtTestWidgetControl,
0);
- QVideoWidget widget;
+ QtTestVideoWidget widget;
object->bind(&widget);
- widget.setWindowFlags(Qt::X11BypassWindowManagerHint);
QCOMPARE(object->testService->windowRef, 0);
QCOMPARE(object->testService->widgetRef, 1);
QCOMPARE(object->testService->rendererRef, 0);
widget.show();
- QVERIFY(QTest::qWaitForWindowExposed(&widget));
widget.setBrightness(100);
widget.setContrast(100);
@@ -569,8 +573,7 @@ void tst_QVideoWidget::setMediaObject()
QtTestVideoObject widgetObject(0, new QtTestWidgetControl, 0);
QtTestVideoObject rendererObject(0, 0, new QtTestRendererControl);
- QVideoWidget widget;
- widget.setWindowFlags(Qt::X11BypassWindowManagerHint);
+ QtTestVideoWidget widget;
widget.show();
QVERIFY(QTest::qWaitForWindowExposed(&widget));
@@ -622,9 +625,8 @@ void tst_QVideoWidget::showWindowControl()
QtTestVideoObject object(new QtTestWindowControl, 0, 0);
object.testService->windowControl->setNativeSize(QSize(240, 180));
- QVideoWidget widget;
+ QtTestVideoWidget widget;
object.bind(&widget);
- widget.setWindowFlags(Qt::X11BypassWindowManagerHint);
widget.show();
QVERIFY(QTest::qWaitForWindowExposed(&widget));
@@ -648,9 +650,8 @@ void tst_QVideoWidget::showWidgetControl()
#endif
QtTestVideoObject object(0, new QtTestWidgetControl, 0);
- QVideoWidget widget;
+ QtTestVideoWidget widget;
object.bind(&widget);
- widget.setWindowFlags(Qt::X11BypassWindowManagerHint);
widget.show();
QVERIFY(QTest::qWaitForWindowExposed(&widget));
@@ -672,9 +673,8 @@ void tst_QVideoWidget::showRendererControl()
#endif
QtTestVideoObject object(0, 0, new QtTestRendererControl);
- QVideoWidget widget;
+ QtTestVideoWidget widget;
object.bind(&widget);
- widget.setWindowFlags(Qt::X11BypassWindowManagerHint);
widget.show();
QVERIFY(QTest::qWaitForWindowExposed(&widget));
@@ -693,9 +693,8 @@ void tst_QVideoWidget::aspectRatioWindowControl()
QtTestVideoObject object(new QtTestWindowControl, 0, 0);
object.testService->windowControl->setAspectRatioMode(Qt::IgnoreAspectRatio);
- QVideoWidget widget;
+ QtTestVideoWidget widget;
object.bind(&widget);
- widget.setWindowFlags(Qt::X11BypassWindowManagerHint);
// Test the aspect ratio defaults to keeping the aspect ratio.
QCOMPARE(widget.aspectRatioMode(), Qt::KeepAspectRatio);
@@ -729,9 +728,8 @@ void tst_QVideoWidget::aspectRatioWidgetControl()
QtTestVideoObject object(0, new QtTestWidgetControl, 0);
object.testService->widgetControl->setAspectRatioMode(Qt::IgnoreAspectRatio);
- QVideoWidget widget;
+ QtTestVideoWidget widget;
object.bind(&widget);
- widget.setWindowFlags(Qt::X11BypassWindowManagerHint);
// Test the aspect ratio defaults to keeping the aspect ratio.
QCOMPARE(widget.aspectRatioMode(), Qt::KeepAspectRatio);
@@ -764,9 +762,8 @@ void tst_QVideoWidget::aspectRatioRendererControl()
QtTestVideoObject object(0, 0, new QtTestRendererControl);
- QVideoWidget widget;
+ QtTestVideoWidget widget;
object.bind(&widget);
- widget.setWindowFlags(Qt::X11BypassWindowManagerHint);
// Test the aspect ratio defaults to keeping the aspect ratio.
QCOMPARE(widget.aspectRatioMode(), Qt::KeepAspectRatio);
@@ -801,9 +798,8 @@ void tst_QVideoWidget::sizeHintWindowControl()
QFETCH(QSize, size);
QtTestVideoObject object(new QtTestWindowControl, 0, 0);
- QVideoWidget widget;
+ QtTestVideoWidget widget;
object.bind(&widget);
- widget.setWindowFlags(Qt::X11BypassWindowManagerHint);
widget.show();
QVERIFY(QTest::qWaitForWindowExposed(&widget));
@@ -822,9 +818,8 @@ void tst_QVideoWidget::sizeHintWidgetControl()
QFETCH(QSize, size);
QtTestVideoObject object(0, new QtTestWidgetControl, 0);
- QVideoWidget widget;
+ QtTestVideoWidget widget;
object.bind(&widget);
- widget.setWindowFlags(Qt::X11BypassWindowManagerHint);
widget.show();
QVERIFY(QTest::qWaitForWindowExposed(&widget));
@@ -877,9 +872,8 @@ void tst_QVideoWidget::sizeHintRendererControl()
QFETCH(QSize, expectedSize);
QtTestVideoObject object(0, 0, new QtTestRendererControl);
- QVideoWidget widget;
+ QtTestVideoWidget widget;
object.bind(&widget);
- widget.setWindowFlags(Qt::X11BypassWindowManagerHint);
widget.show();
QVERIFY(QTest::qWaitForWindowExposed(&widget));
@@ -897,7 +891,7 @@ void tst_QVideoWidget::sizeHintRendererControl()
void tst_QVideoWidget::fullScreenWindowControl()
{
QtTestVideoObject object(new QtTestWindowControl, 0, 0);
- QVideoWidget widget;
+ QtTestVideoWidget widget;
object.bind(&widget);
widget.showNormal();
QVERIFY(QTest::qWaitForWindowExposed(&widget));
@@ -982,7 +976,7 @@ void tst_QVideoWidget::fullScreenWidgetControl()
#endif
QtTestVideoObject object(0, new QtTestWidgetControl, 0);
- QVideoWidget widget;
+ QtTestVideoWidget widget;
object.bind(&widget);
widget.showNormal();
QVERIFY(QTest::qWaitForWindowExposed(&widget));
@@ -1068,7 +1062,7 @@ void tst_QVideoWidget::fullScreenRendererControl()
#endif
QtTestVideoObject object(0, 0, new QtTestRendererControl);
- QVideoWidget widget;
+ QtTestVideoWidget widget;
object.bind(&widget);
widget.showNormal();
QVERIFY(QTest::qWaitForWindowExposed(&widget));
@@ -1164,9 +1158,8 @@ void tst_QVideoWidget::brightnessWindowControl()
QtTestVideoObject object(new QtTestWindowControl, 0, 0);
object.testService->windowControl->setBrightness(controlValue);
- QVideoWidget widget;
+ QtTestVideoWidget widget;
object.bind(&widget);
- widget.setWindowFlags(Qt::X11BypassWindowManagerHint);
widget.show();
QVERIFY(QTest::qWaitForWindowExposed(&widget));
@@ -1209,9 +1202,8 @@ void tst_QVideoWidget::brightnessWidgetControl()
QtTestVideoObject object(0, new QtTestWidgetControl, 0);
object.testService->widgetControl->setBrightness(controlValue);
- QVideoWidget widget;
+ QtTestVideoWidget widget;
object.bind(&widget);
- widget.setWindowFlags(Qt::X11BypassWindowManagerHint);
QCOMPARE(widget.brightness(), 0);
@@ -1248,9 +1240,8 @@ void tst_QVideoWidget::brightnessRendererControl()
QtTestVideoObject object(0, 0, new QtTestRendererControl);
- QVideoWidget widget;
+ QtTestVideoWidget widget;
object.bind(&widget);
- widget.setWindowFlags(Qt::X11BypassWindowManagerHint);
widget.show();
QVERIFY(QTest::qWaitForWindowExposed(&widget));
@@ -1275,9 +1266,8 @@ void tst_QVideoWidget::contrastWindowControl()
QtTestVideoObject object(new QtTestWindowControl, 0, 0);
object.testService->windowControl->setContrast(controlValue);
- QVideoWidget widget;
+ QtTestVideoWidget widget;
object.bind(&widget);
- widget.setWindowFlags(Qt::X11BypassWindowManagerHint);
QCOMPARE(widget.contrast(), 0);
@@ -1317,9 +1307,8 @@ void tst_QVideoWidget::contrastWidgetControl()
QtTestVideoObject object(0, new QtTestWidgetControl, 0);
object.testService->widgetControl->setContrast(controlValue);
- QVideoWidget widget;
+ QtTestVideoWidget widget;
object.bind(&widget);
- widget.setWindowFlags(Qt::X11BypassWindowManagerHint);
QCOMPARE(widget.contrast(), 0);
widget.show();
@@ -1356,9 +1345,8 @@ void tst_QVideoWidget::contrastRendererControl()
QtTestVideoObject object(0, 0, new QtTestRendererControl);
- QVideoWidget widget;
+ QtTestVideoWidget widget;
object.bind(&widget);
- widget.setWindowFlags(Qt::X11BypassWindowManagerHint);
widget.show();
QVERIFY(QTest::qWaitForWindowExposed(&widget));
@@ -1383,9 +1371,8 @@ void tst_QVideoWidget::hueWindowControl()
QtTestVideoObject object(new QtTestWindowControl, 0, 0);
object.testService->windowControl->setHue(controlValue);
- QVideoWidget widget;
+ QtTestVideoWidget widget;
object.bind(&widget);
- widget.setWindowFlags(Qt::X11BypassWindowManagerHint);
QCOMPARE(widget.hue(), 0);
widget.show();
@@ -1424,9 +1411,8 @@ void tst_QVideoWidget::hueWidgetControl()
QtTestVideoObject object(0, new QtTestWidgetControl, 0);
object.testService->widgetControl->setHue(controlValue);
- QVideoWidget widget;
+ QtTestVideoWidget widget;
object.bind(&widget);
- widget.setWindowFlags(Qt::X11BypassWindowManagerHint);
QCOMPARE(widget.hue(), 0);
widget.show();
@@ -1463,9 +1449,8 @@ void tst_QVideoWidget::hueRendererControl()
QtTestVideoObject object(0, 0, new QtTestRendererControl);
- QVideoWidget widget;
+ QtTestVideoWidget widget;
object.bind(&widget);
- widget.setWindowFlags(Qt::X11BypassWindowManagerHint);
widget.show();
QVERIFY(QTest::qWaitForWindowExposed(&widget));
@@ -1490,9 +1475,8 @@ void tst_QVideoWidget::saturationWindowControl()
QtTestVideoObject object(new QtTestWindowControl, 0, 0);
object.testService->windowControl->setSaturation(controlValue);
- QVideoWidget widget;
+ QtTestVideoWidget widget;
object.bind(&widget);
- widget.setWindowFlags(Qt::X11BypassWindowManagerHint);
QCOMPARE(widget.saturation(), 0);
widget.show();
QVERIFY(QTest::qWaitForWindowExposed(&widget));
@@ -1530,9 +1514,8 @@ void tst_QVideoWidget::saturationWidgetControl()
QtTestVideoObject object(0, new QtTestWidgetControl, 0);
object.testService->widgetControl->setSaturation(controlValue);
- QVideoWidget widget;
+ QtTestVideoWidget widget;
object.bind(&widget);
- widget.setWindowFlags(Qt::X11BypassWindowManagerHint);
QCOMPARE(widget.saturation(), 0);
widget.show();
@@ -1570,9 +1553,8 @@ void tst_QVideoWidget::saturationRendererControl()
QtTestVideoObject object(0, 0, new QtTestRendererControl);
- QVideoWidget widget;
+ QtTestVideoWidget widget;
object.bind(&widget);
- widget.setWindowFlags(Qt::X11BypassWindowManagerHint);
widget.show();
QVERIFY(QTest::qWaitForWindowExposed(&widget));
QSignalSpy spy(&widget, SIGNAL(saturationChanged(int)));
@@ -1597,9 +1579,8 @@ void tst_QVideoWidget::paintRendererControl()
{
QtTestVideoObject object(0, 0, new QtTestRendererControl);
- QVideoWidget widget;
+ QtTestVideoWidget widget;
object.bind(&widget);
- widget.setWindowFlags(Qt::X11BypassWindowManagerHint);
widget.resize(640,480);
widget.show();
QVERIFY(QTest::qWaitForWindowExposed(&widget));