diff options
Diffstat (limited to 'tests/auto')
7 files changed, 326 insertions, 5 deletions
diff --git a/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp b/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp index 3deb534eb..b68bc030a 100644 --- a/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp +++ b/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp @@ -1258,7 +1258,7 @@ void tst_QMediaPlayerBackend::playlistObject() QCOMPARE(errorSpy.count(), 0); QCOMPARE(mediaStatusSpy.count(), 7); // 2 x (LoadingMedia -> BufferedMedia -> EndOfMedia) + NoMedia - player.setPlaylist(Q_NULLPTR); + player.setPlaylist(nullptr); mediaSpy.clear(); currentMediaSpy.clear(); @@ -1283,7 +1283,7 @@ void tst_QMediaPlayerBackend::playlistObject() QCOMPARE(errorSpy.count(), 0); QCOMPARE(mediaStatusSpy.count(), 13); // 4 x (LoadingMedia -> BufferedMedia -> EndOfMedia) + NoMedia - player.setPlaylist(Q_NULLPTR); + player.setPlaylist(nullptr); mediaSpy.clear(); currentMediaSpy.clear(); @@ -1307,7 +1307,7 @@ void tst_QMediaPlayerBackend::playlistObject() QCOMPARE(errorSpy.count(), 1); QCOMPARE(mediaStatusSpy.count(), 6); // Loading -> Invalid -> Loading -> Buffered -> EndOfMedia -> NoMedia - player.setPlaylist(Q_NULLPTR); + player.setPlaylist(nullptr); mediaSpy.clear(); currentMediaSpy.clear(); diff --git a/tests/auto/unit/qdeclarativeaudio/tst_qdeclarativeaudio.cpp b/tests/auto/unit/qdeclarativeaudio/tst_qdeclarativeaudio.cpp index 5ff557ef6..b270e93eb 100644 --- a/tests/auto/unit/qdeclarativeaudio/tst_qdeclarativeaudio.cpp +++ b/tests/auto/unit/qdeclarativeaudio/tst_qdeclarativeaudio.cpp @@ -74,6 +74,13 @@ private slots: void error(); void loops(); void audioRole(); + void customAudioRole(); + +private: + void enumerator(const QMetaObject *object, const char *name, QMetaEnum *result); + QMetaEnum enumerator(const QMetaObject *object, const char *name); + void keyToValue(const QMetaEnum &enumeration, const char *key, int *result); + int keyToValue(const QMetaEnum &enumeration, const char *key); }; Q_DECLARE_METATYPE(QDeclarativeAudio::Error); @@ -1051,6 +1058,149 @@ void tst_QDeclarativeAudio::audioRole() } } +void tst_QDeclarativeAudio::customAudioRole() +{ + MockMediaPlayerService mockService; + MockMediaServiceProvider mockProvider(&mockService); + QMediaServiceProvider::setDefaultServiceProvider(&mockProvider); + + QQmlEngine engine; + QQmlComponent component(&engine); + component.setData("import QtQuick 2.0 \n import QtMultimedia 5.11 \n Audio { }", QUrl()); + + { + mockService.setHasCustomAudioRole(false); + QObject *audio = component.create(); + QVERIFY(audio); + + QMetaEnum audioRoleEnum = enumerator(audio->metaObject(), "AudioRole"); + int AudioRole_UnknownRoleValue = keyToValue(audioRoleEnum, "UnknownRole"); + QVERIFY(!QTest::currentTestFailed()); + + QVERIFY(audio->property("customAudioRole").toString().isEmpty()); + + QSignalSpy spyRole(audio, SIGNAL(audioRoleChanged())); + QSignalSpy spyCustomRole(audio, SIGNAL(customAudioRoleChanged())); + audio->setProperty("customAudioRole", QStringLiteral("customRole")); + QCOMPARE(audio->property("audioRole").toInt(), AudioRole_UnknownRoleValue); + QVERIFY(audio->property("customAudioRole").toString().isEmpty()); + QCOMPARE(spyRole.count(), 0); + QCOMPARE(spyCustomRole.count(), 0); + } + + { + mockService.reset(); + mockService.setHasAudioRole(false); + + QObject *audio = component.create(); + QVERIFY(audio); + + QMetaEnum audioRoleEnum = enumerator(audio->metaObject(), "AudioRole"); + int AudioRole_UnknownRoleValue = keyToValue(audioRoleEnum, "UnknownRole"); + QVERIFY(!QTest::currentTestFailed()); + + QVERIFY(audio->property("customAudioRole").toString().isEmpty()); + + QSignalSpy spyRole(audio, SIGNAL(audioRoleChanged())); + QSignalSpy spyCustomRole(audio, SIGNAL(customAudioRoleChanged())); + audio->setProperty("customAudioRole", QStringLiteral("customRole")); + QCOMPARE(audio->property("audioRole").toInt(), AudioRole_UnknownRoleValue); + QVERIFY(audio->property("customAudioRole").toString().isEmpty()); + QCOMPARE(spyRole.count(), 0); + QCOMPARE(spyCustomRole.count(), 0); + } + + { + mockService.reset(); + + QObject *audio = component.create(); + QVERIFY(audio); + + QMetaEnum audioRoleEnum = enumerator(audio->metaObject(), "AudioRole"); + int AudioRole_UnknownRoleValue = keyToValue(audioRoleEnum, "UnknownRole"); + int AudioRole_CustomRoleValue = keyToValue(audioRoleEnum, "CustomRole"); + int AudioRole_MusicRoleValue = keyToValue(audioRoleEnum, "MusicRole"); + QVERIFY(!QTest::currentTestFailed()); + + QSignalSpy spyRole(audio, SIGNAL(audioRoleChanged())); + QSignalSpy spyCustomRole(audio, SIGNAL(customAudioRoleChanged())); + + QCOMPARE(audio->property("audioRole").toInt(), AudioRole_UnknownRoleValue); + QVERIFY(audio->property("customAudioRole").toString().isEmpty()); + + QString customRole(QStringLiteral("customRole")); + audio->setProperty("customAudioRole", customRole); + QCOMPARE(audio->property("audioRole").toInt(), AudioRole_CustomRoleValue); + QCOMPARE(audio->property("customAudioRole").toString(), customRole); + QCOMPARE(mockService.mockAudioRoleControl->audioRole(), QAudio::CustomRole); + QCOMPARE(mockService.mockCustomAudioRoleControl->customAudioRole(), customRole); + QCOMPARE(spyRole.count(), 1); + QCOMPARE(spyCustomRole.count(), 1); + + spyRole.clear(); + spyCustomRole.clear(); + + QString customRole2(QStringLiteral("customRole2")); + audio->setProperty("customAudioRole", customRole2); + QCOMPARE(audio->property("customAudioRole").toString(), customRole2); + QCOMPARE(mockService.mockCustomAudioRoleControl->customAudioRole(), customRole2); + QCOMPARE(spyRole.count(), 0); + QCOMPARE(spyCustomRole.count(), 1); + + spyRole.clear(); + spyCustomRole.clear(); + + audio->setProperty("audioRole", AudioRole_MusicRoleValue); + QCOMPARE(audio->property("audioRole").toInt(), AudioRole_MusicRoleValue); + QVERIFY(audio->property("customAudioRole").toString().isEmpty()); + QCOMPARE(mockService.mockAudioRoleControl->audioRole(), QAudio::MusicRole); + QVERIFY(mockService.mockCustomAudioRoleControl->customAudioRole().isEmpty()); + QCOMPARE(spyRole.count(), 1); + QCOMPARE(spyCustomRole.count(), 1); + + spyRole.clear(); + spyCustomRole.clear(); + + audio->setProperty("audioRole", AudioRole_CustomRoleValue); + QCOMPARE(audio->property("audioRole").toInt(), AudioRole_CustomRoleValue); + QVERIFY(audio->property("customAudioRole").toString().isEmpty()); + QCOMPARE(mockService.mockAudioRoleControl->audioRole(), QAudio::CustomRole); + QVERIFY(mockService.mockCustomAudioRoleControl->customAudioRole().isEmpty()); + QCOMPARE(spyRole.count(), 1); + QCOMPARE(spyCustomRole.count(), 0); + } +} + +void tst_QDeclarativeAudio::enumerator(const QMetaObject *object, + const char *name, + QMetaEnum *result) +{ + int index = object->indexOfEnumerator(name); + QVERIFY(index >= 0); + *result = object->enumerator(index); +} + +QMetaEnum tst_QDeclarativeAudio::enumerator(const QMetaObject *object, const char *name) +{ + QMetaEnum result; + enumerator(object, name, &result); + return result; +} + +void tst_QDeclarativeAudio::keyToValue(const QMetaEnum &enumeration, const char *key, int *result) +{ + bool ok = false; + *result = enumeration.keyToValue(key, &ok); + QVERIFY(ok); +} + +int tst_QDeclarativeAudio::keyToValue(const QMetaEnum &enumeration, const char *key) +{ + int result; + keyToValue(enumeration, key, &result); + return result; +} + 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 a529517d3..94d297ad0 100644 --- a/tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp +++ b/tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp @@ -133,6 +133,7 @@ private slots: void testQrc_data(); void testQrc(); void testAudioRole(); + void testCustomAudioRole(); private: void setupCommonTestData(); @@ -1336,5 +1337,99 @@ void tst_QMediaPlayer::testAudioRole() } } +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", qVariantFromValue(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" diff --git a/tests/auto/unit/qmultimedia_common/mockaudiorolecontrol.h b/tests/auto/unit/qmultimedia_common/mockaudiorolecontrol.h index 299b8cf4c..06e914ba1 100644 --- a/tests/auto/unit/qmultimedia_common/mockaudiorolecontrol.h +++ b/tests/auto/unit/qmultimedia_common/mockaudiorolecontrol.h @@ -64,4 +64,3 @@ public: }; #endif // MOCKAUDIOROLECONTROL_H - diff --git a/tests/auto/unit/qmultimedia_common/mockcustomaudiorolecontrol.h b/tests/auto/unit/qmultimedia_common/mockcustomaudiorolecontrol.h new file mode 100644 index 000000000..f4031bb04 --- /dev/null +++ b/tests/auto/unit/qmultimedia_common/mockcustomaudiorolecontrol.h @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2017 QNX Software Systems. All rights reserved. +** 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$ +** +****************************************************************************/ + +#ifndef MOCKCUSTOMAUDIOROLECONTROL_H +#define MOCKCUSTOMAUDIOROLECONTROL_H + +#include <qcustomaudiorolecontrol.h> + +class MockCustomAudioRoleControl : public QCustomAudioRoleControl +{ + friend class MockMediaPlayerService; + +public: + MockCustomAudioRoleControl() + : QCustomAudioRoleControl() + , m_customAudioRole(QAudio::UnknownRole) + { + } + + QString customAudioRole() const + { + return m_customAudioRole; + } + + void setCustomAudioRole(const QString &role) + { + if (role != m_customAudioRole) + emit customAudioRoleChanged(m_customAudioRole = role); + } + + QStringList supportedCustomAudioRoles() const + { + return QStringList() << QStringLiteral("customRole") + << QStringLiteral("customRole2"); + } + + QString m_customAudioRole; +}; + +#endif // MOCKCUSTOMAUDIOROLECONTROL_H diff --git a/tests/auto/unit/qmultimedia_common/mockmediaplayerservice.h b/tests/auto/unit/qmultimedia_common/mockmediaplayerservice.h index 46b81899c..068bb84a9 100644 --- a/tests/auto/unit/qmultimedia_common/mockmediaplayerservice.h +++ b/tests/auto/unit/qmultimedia_common/mockmediaplayerservice.h @@ -38,6 +38,7 @@ #include "mockvideoprobecontrol.h" #include "mockvideowindowcontrol.h" #include "mockaudiorolecontrol.h" +#include "mockcustomaudiorolecontrol.h" class MockMediaPlayerService : public QMediaService { @@ -48,6 +49,7 @@ public: { mockControl = new MockMediaPlayerControl; mockAudioRoleControl = new MockAudioRoleControl; + mockCustomAudioRoleControl = new MockCustomAudioRoleControl; mockStreamsControl = new MockStreamsControl; mockNetworkControl = new MockNetworkAccessControl; rendererControl = new MockVideoRendererControl; @@ -56,12 +58,14 @@ public: windowControl = new MockVideoWindowControl; windowRef = 0; enableAudioRole = true; + enableCustomAudioRole = true; } ~MockMediaPlayerService() { delete mockControl; delete mockAudioRoleControl; + delete mockCustomAudioRoleControl; delete mockStreamsControl; delete mockNetworkControl; delete rendererControl; @@ -88,6 +92,8 @@ public: } } else if (enableAudioRole && qstrcmp(iid, QAudioRoleControl_iid) == 0) { return mockAudioRoleControl; + } else if (enableCustomAudioRole && qstrcmp(iid, QCustomAudioRoleControl_iid) == 0) { + return mockCustomAudioRoleControl; } if (qstrcmp(iid, QMediaNetworkAccessControl_iid) == 0) @@ -127,6 +133,7 @@ public: void selectCurrentConfiguration(QNetworkConfiguration config) { mockNetworkControl->setCurrentConfiguration(config); } void setHasAudioRole(bool enable) { enableAudioRole = enable; } + void setHasCustomAudioRole(bool enable) { enableCustomAudioRole = enable; } void reset() { @@ -148,6 +155,8 @@ public: enableAudioRole = true; mockAudioRoleControl->m_audioRole = QAudio::UnknownRole; + enableCustomAudioRole = true; + mockCustomAudioRoleControl->m_customAudioRole.clear(); mockNetworkControl->_current = QNetworkConfiguration(); mockNetworkControl->_configurations = QList<QNetworkConfiguration>(); @@ -155,6 +164,7 @@ public: MockMediaPlayerControl *mockControl; MockAudioRoleControl *mockAudioRoleControl; + MockCustomAudioRoleControl *mockCustomAudioRoleControl; MockStreamsControl *mockStreamsControl; MockNetworkAccessControl *mockNetworkControl; MockVideoRendererControl *rendererControl; @@ -163,6 +173,7 @@ public: int windowRef; int rendererRef; bool enableAudioRole; + bool enableCustomAudioRole; }; diff --git a/tests/auto/unit/qmultimedia_common/mockplayer.pri b/tests/auto/unit/qmultimedia_common/mockplayer.pri index c43fb31e5..93cdbf3d8 100644 --- a/tests/auto/unit/qmultimedia_common/mockplayer.pri +++ b/tests/auto/unit/qmultimedia_common/mockplayer.pri @@ -9,6 +9,7 @@ HEADERS *= \ ../qmultimedia_common/mockmediastreamscontrol.h \ ../qmultimedia_common/mockmedianetworkaccesscontrol.h \ ../qmultimedia_common/mockvideoprobecontrol.h \ - ../qmultimedia_common/mockaudiorolecontrol.h + ../qmultimedia_common/mockaudiorolecontrol.h \ + ../qmultimedia_common/mockcustomaudiorolecontrol.h include(mockvideo.pri) |