diff options
author | Jim Hodapp <jim.hodapp@canonical.com> | 2015-08-03 14:27:16 +0200 |
---|---|---|
committer | Yoann Lopes <yoann.lopes@theqtcompany.com> | 2015-08-10 15:12:22 +0000 |
commit | 23acd9f01d5dcca84025eb95de266e7e6b6cb386 (patch) | |
tree | bffd596d62312ed8be20075edb02b35ceec95cb0 /tests | |
parent | 129b06ba77e451c08778badcd54cbaf193d195bc (diff) | |
download | qtmultimedia-23acd9f01d5dcca84025eb95de266e7e6b6cb386.tar.gz |
Add audio role API to QMediaPlayer.
Change-Id: Ia5e3e2fe714f10b6aad62f0a4801c607905c7e0d
Task-number: QTBUG-41054
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
Diffstat (limited to 'tests')
6 files changed, 181 insertions, 1 deletions
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/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/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) |